@huynle/hub 0.8.0 → 0.8.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +213 -1
  2. package/README.md +84 -15
  3. package/package.json +1 -1
  4. package/packages/claude-code/package.json +1 -1
  5. package/packages/claude-code/src/paths.ts +3 -3
  6. package/packages/cli/dist/hub-cli.js +649 -242
  7. package/packages/cli/package.json +1 -1
  8. package/packages/cli/src/bootstrap/adapters/node-services/render.ts +2 -2
  9. package/packages/cli/src/bootstrap/discovery/host.ts +15 -1
  10. package/packages/cli/src/bootstrap/discovery/probe.ts +1 -1
  11. package/packages/cli/src/bootstrap/enrollment/enroll.ts +3 -3
  12. package/packages/cli/src/bootstrap/enrollment/policy.ts +13 -0
  13. package/packages/cli/src/cli.ts +3 -3
  14. package/packages/cli/src/http.ts +1 -0
  15. package/packages/cli/src/launches.ts +9 -3
  16. package/packages/cli/src/login.ts +2 -2
  17. package/packages/cli/src/mcp.ts +7 -3
  18. package/packages/cli/src/messaging.ts +4 -2
  19. package/packages/cli/src/profiles-mcp.ts +301 -0
  20. package/packages/cli/src/setup/commands.ts +20 -2
  21. package/packages/cli/src/spoke-services.ts +1 -1
  22. package/packages/cli/src/teams-mcp.ts +59 -2
  23. package/packages/codex/package.json +1 -1
  24. package/packages/codex/src/paths.ts +3 -3
  25. package/packages/node/package.json +1 -1
  26. package/packages/node/src/config.ts +10 -2
  27. package/packages/node/src/opencode-warm.ts +27 -8
  28. package/packages/node/src/run.ts +3 -2
  29. package/packages/preset/package.json +1 -1
  30. package/packages/protocol/package.json +1 -1
  31. package/packages/protocol/src/index.ts +7 -1
  32. package/packages/protocol/src/launch.ts +14 -0
  33. package/packages/runtime-openshell/package.json +1 -1
  34. package/packages/runtime-sdk/package.json +1 -1
  35. package/packages/sdk/package.json +1 -1
  36. package/packages/sdk/src/errors.ts +1 -0
  37. package/packages/sdk/src/index.ts +1 -0
  38. package/packages/sdk/src/types.ts +22 -2
  39. package/packages/sdk/src/wake.ts +20 -0
  40. package/packages/spoke-sdk/package.json +1 -1
  41. package/src/central/agent/acting.ts +3 -0
  42. package/src/central/agent/audit.ts +1 -1
  43. package/src/central/agent/decisions.ts +58 -2
  44. package/src/central/agent/delivery.ts +101 -27
  45. package/src/central/agent/errors.ts +2 -0
  46. package/src/central/agent/escalation.ts +10 -2
  47. package/src/central/agent/events.ts +7 -1
  48. package/src/central/agent/launch-engine.ts +173 -30
  49. package/src/central/agent/launch-routes.ts +20 -9
  50. package/src/central/agent/launch-spec.ts +26 -2
  51. package/src/central/agent/launch-store.ts +55 -2
  52. package/src/central/agent/message-limits.ts +89 -11
  53. package/src/central/agent/message-routes.ts +8 -3
  54. package/src/central/agent/messages.ts +3 -2
  55. package/src/central/agent/placement.ts +93 -18
  56. package/src/central/agent/read-routes.ts +3 -0
  57. package/src/central/agent/routes.ts +4 -2
  58. package/src/central/agent/webhooks.ts +17 -2
  59. package/src/central/artifacts/jobs-routes.ts +4 -1
  60. package/src/central/concierge/board-routes.ts +13 -2
  61. package/src/central/concierge/inbound.ts +4 -7
  62. package/src/central/concierge/prompt.ts +4 -3
  63. package/src/central/concierge/proposals.ts +8 -2
  64. package/src/central/concierge/routes.ts +62 -2
  65. package/src/central/concierge/session-routes.ts +62 -6
  66. package/src/central/concierge/supervisor.ts +34 -7
  67. package/src/central/concierge/watchlist-routes.ts +4 -2
  68. package/src/central/config.ts +21 -5
  69. package/src/central/http.ts +38 -15
  70. package/src/central/main.ts +1 -1
  71. package/src/central/registry.ts +26 -1
  72. package/src/central/teams/intake.ts +20 -6
  73. package/src/central/teams/staffing.ts +22 -0
  74. package/src/central/workspaces/sidechats-routes.ts +1 -1
  75. package/src/index.ts +39 -18
  76. package/src/migrate.ts +109 -3
  77. package/src/spoke/env-inject.ts +8 -1
  78. package/src/spoke/hub-tool.ts +24 -10
  79. package/src/spoke/launchers.ts +6 -4
  80. package/src/spoke/listing.ts +18 -6
  81. package/src/spoke/localhub.ts +14 -4
  82. package/src/spoke/locations.ts +40 -0
  83. package/src/spoke/session-context.ts +107 -27
  84. package/src/spoke/spoke.ts +13 -5
  85. package/web/dist/assets/ArtifactPage-mNzjlP_U.js +1 -0
  86. package/web/dist/assets/ArtifactPane-CPQcuX7c.js +1 -0
  87. package/web/dist/assets/ArtifactWorkbench-NoFC5Sb2.js +6 -0
  88. package/web/dist/assets/Library-LXHsP5Fw.js +2 -0
  89. package/web/dist/assets/ProfilesDestination-DhVVcAep.js +1 -0
  90. package/web/dist/assets/TeamsPage-DBrO5hoL.js +1 -0
  91. package/web/dist/assets/Watchtower-DxaJYQp_.js +2 -0
  92. package/web/dist/assets/index-BabrNDB3.css +1 -0
  93. package/web/dist/assets/index-lIOfSYck.js +34 -0
  94. package/web/dist/assets/live-BDq0AABg.js +5 -0
  95. package/web/dist/assets/{pane-layout-CKC4I00k.js → pane-layout-DWXfDU-1.js} +1 -1
  96. package/web/dist/assets/{renderer2d-CX5j3NcD.js → renderer2d-DAr4IHM8.js} +1 -1
  97. package/web/dist/assets/{renderer3d-BXIVOvfi.js → renderer3d-DWZj595u.js} +1 -1
  98. package/web/dist/assets/{safe-area-DfPsOdWR.js → safe-area-JUb6OeI3.js} +1 -1
  99. package/web/dist/assets/{source-CvUHTc3O.js → source-CDU04kYw.js} +1 -1
  100. package/web/dist/assets/ui-Dh1-78Cl.js +3 -0
  101. package/web/dist/index.html +4 -4
  102. package/web/dist/assets/ArtifactPage-BS0gVkfu.js +0 -1
  103. package/web/dist/assets/ArtifactPane-PLYHNs6s.js +0 -1
  104. package/web/dist/assets/ArtifactWorkbench-LkDyJ5Dv.js +0 -6
  105. package/web/dist/assets/Library-CtxRqTjo.js +0 -2
  106. package/web/dist/assets/ProfilesDestination-BYiHKLmc.js +0 -1
  107. package/web/dist/assets/TeamsPage-BwjsAAUC.js +0 -1
  108. package/web/dist/assets/Watchtower-C4swrWVs.js +0 -2
  109. package/web/dist/assets/index-DaH5GUdV.js +0 -31
  110. package/web/dist/assets/index-WWuKfWxL.css +0 -1
  111. package/web/dist/assets/live-YyTjE47g.js +0 -5
  112. package/web/dist/assets/ui-C9Igxzjm.js +0 -1
@@ -1 +1 @@
1
- import{E as e}from"./live-YyTjE47g.js";var t=`watchtower.layout`,n=1e3,r=[`--accent`,`--blue`,`--violet`,`--orange`,`--ok`,`--warn`];function i(e,t=0){let n=110+26*Math.sqrt(Math.max(1,e))+7*Math.sqrt(Math.max(0,t)),r=Math.PI*(3-Math.sqrt(5));return Array.from({length:e},(t,i)=>{let a=e===1?0:1-i/(e-1)*2,o=Math.sqrt(1-a*a),s=i*r;return[l(Math.cos(s)*o*n),l(a*n*.55),l(Math.sin(s)*o*n)]})}function a(t){let n=new Set(t.nodes.map(e=>e.id)),a=i(t.groups.length,t.groups.reduce((e,t)=>e+t.sections.reduce((e,t)=>e+t.members.length,0),0));return t.groups.map((t,i)=>{let o=[];n.has(t.id)&&o.push(t.id);for(let e of t.sections)e.id!==void 0&&n.has(e.id)&&o.push(e.id),o.push(...e.members);let s=t.machine===void 0?r[i%r.length]:e[t.machine%e.length];return{id:t.id,label:t.label,color:s,center:a[i],members:o}})}function o(e){let t=new Map;for(let n of e.links)n.kind!==`structure`&&n.kind!==`policy`&&(t.set(n.source,(t.get(n.source)??0)+n.count),t.set(n.target,(t.get(n.target)??0)+n.count));return t}function s(e,t){let n=new Set,r=new Set(e.groups.map(e=>e.id));for(let t of e.nodes)(t.kind===`hub`||t.kind===`user`||t.kind===`app`||t.kind===`role`||r.has(t.id)||t.match)&&n.add(t.id);let i=o(e),a=e.nodes.filter(e=>!n.has(e.id)&&e.kind!==`role`);a.sort((e,t)=>(i.get(t.id)??0)-(i.get(e.id)??0)||(e.id<t.id?-1:+(e.id>t.id)));for(let e of a.slice(0,Math.max(0,t.max)))n.add(e.id);for(let e of t.extra??[])n.add(e);return n}var c=e=>e.kind===`role`&&e.vacant?`${e.label} · vacant`:e.label,l=e=>Math.round(e*10)/10,u=e=>typeof e==`number`&&Number.isFinite(e);function d(e){let t=new Map;if(!e)return t;let n;try{n=JSON.parse(e)}catch{return t}if(typeof n!=`object`||!n||Array.isArray(n))return t;let{v:r,p:i}=n;if(r!==1||typeof i!=`object`||!i||Array.isArray(i))return t;for(let[e,n]of Object.entries(i)){if(t.size>=1e3)break;if(!Array.isArray(n)||n.length!==3)continue;let[r,i,a]=n;u(r)&&u(i)&&u(a)&&t.set(e,[r,i,a])}return t}function f(e,t,r=n){let i={},a=0;for(let n of[e,t])for(let[e,t]of n){if(a>=r)break;e in i||!t.every(u)||(i[e]=[l(t[0]),l(t[1]),l(t[2])],a++)}return JSON.stringify({v:1,p:i})}function p(e,t){let n=2166136261;for(let t=0;t<e.length;t++)n=Math.imul(n^e.charCodeAt(t),16777619);let r=(n>>>0)%1e3/1e3,i=(Math.imul(n,2654435761)>>>0)%1e3/1e3,a=r*Math.PI*2,o=i*2-1,s=Math.sqrt(1-o*o),c=t*(.6+.4*r);return[Math.cos(a)*s*c,o*c,Math.sin(a)*s*c]}function m(e,t){let n=new Map,r=new Set,i=new Map;for(let t of a(e))for(let e of t.members)i.set(e,t);let o=new Map,s=new Map;for(let t of e.links)t.kind===`structure`&&(o.get(t.target)??o.set(t.target,[]).get(t.target)).push(t.source),(s.get(t.target)??s.set(t.target,[]).get(t.target)).push(t.source),(s.get(t.source)??s.set(t.source,[]).get(t.source)).push(t.target);n.set(`hub`,[0,0,0]);for(let r of e.nodes){if(r.id===`hub`)continue;let e=t.get(r.id);e&&n.set(r.id,e)}let c=new Set(e.groups.map(e=>e.id)),u=[...e.nodes.filter(e=>c.has(e.id)),...e.nodes.filter(e=>!c.has(e.id))];for(let e of u){if(n.has(e.id))continue;r.add(e.id);let t=[...o.get(e.id)??[],...s.get(e.id)??[]].find(e=>e!==`hub`&&n.has(e)),a=i.get(e.id),c=t===void 0?a?.center:n.get(t),u=p(e.id,t===void 0?a?24:40:14),d=c??[0,0,0];n.set(e.id,[l(d[0]+u[0]),l(d[1]+u[1]),l(d[2]+u[2])])}return{positions:n,fresh:r}}function h(e,t){let n=new Map,r=[],i=e=>r.some(t=>e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h),a=[...e.filter(e=>e.pinned),...e.filter(e=>!e.pinned)];for(let e of a)for(let a of e.texts){let o=t(a,e),s={x:e.x-o/2,y:e.y,w:o,h:e.h};if(e.pinned||!i(s)){r.push(s),n.set(e.id,{text:a,box:s});break}}return n}var g=8,_=900;function v(e){let t={top:0,right:0,bottom:0,left:0},n=e.closest(`.wt-stage`);if(!n)return t;let r=e.getBoundingClientRect();if(!r.height)return t;let i=n.querySelector(`.wt-dock`)?.getBoundingClientRect(),a=n.querySelector(`.wt-chips`)?.getBoundingClientRect(),o=r.width>=_?n.querySelector(`.wt-pop-legend`)?.getBoundingClientRect():void 0,s=o&&o.width?Math.max(0,o.right-r.left+g):0,c=i&&i.height?Math.max(0,r.bottom-i.top+g):0,l=a&&a.height?Math.max(0,a.bottom-r.top+g):0;return{top:Math.min(l,r.height/3),right:0,bottom:Math.min(c,r.height/3),left:Math.min(s,r.width/3)}}export{c as a,a as c,s as i,m as l,t as n,d as o,o as r,h as s,v as t,f as u};
1
+ import{E as e}from"./live-BDq0AABg.js";var t=`watchtower.layout`,n=1e3,r=[`--accent`,`--blue`,`--violet`,`--orange`,`--ok`,`--warn`];function i(e,t=0){let n=110+26*Math.sqrt(Math.max(1,e))+7*Math.sqrt(Math.max(0,t)),r=Math.PI*(3-Math.sqrt(5));return Array.from({length:e},(t,i)=>{let a=e===1?0:1-i/(e-1)*2,o=Math.sqrt(1-a*a),s=i*r;return[l(Math.cos(s)*o*n),l(a*n*.55),l(Math.sin(s)*o*n)]})}function a(t){let n=new Set(t.nodes.map(e=>e.id)),a=i(t.groups.length,t.groups.reduce((e,t)=>e+t.sections.reduce((e,t)=>e+t.members.length,0),0));return t.groups.map((t,i)=>{let o=[];n.has(t.id)&&o.push(t.id);for(let e of t.sections)e.id!==void 0&&n.has(e.id)&&o.push(e.id),o.push(...e.members);let s=t.machine===void 0?r[i%r.length]:e[t.machine%e.length];return{id:t.id,label:t.label,color:s,center:a[i],members:o}})}function o(e){let t=new Map;for(let n of e.links)n.kind!==`structure`&&n.kind!==`policy`&&(t.set(n.source,(t.get(n.source)??0)+n.count),t.set(n.target,(t.get(n.target)??0)+n.count));return t}function s(e,t){let n=new Set,r=new Set(e.groups.map(e=>e.id));for(let t of e.nodes)(t.kind===`hub`||t.kind===`user`||t.kind===`app`||t.kind===`role`||r.has(t.id)||t.match)&&n.add(t.id);let i=o(e),a=e.nodes.filter(e=>!n.has(e.id)&&e.kind!==`role`);a.sort((e,t)=>(i.get(t.id)??0)-(i.get(e.id)??0)||(e.id<t.id?-1:+(e.id>t.id)));for(let e of a.slice(0,Math.max(0,t.max)))n.add(e.id);for(let e of t.extra??[])n.add(e);return n}var c=e=>e.kind===`role`&&e.vacant?`${e.label} · vacant`:e.label,l=e=>Math.round(e*10)/10,u=e=>typeof e==`number`&&Number.isFinite(e);function d(e){let t=new Map;if(!e)return t;let n;try{n=JSON.parse(e)}catch{return t}if(typeof n!=`object`||!n||Array.isArray(n))return t;let{v:r,p:i}=n;if(r!==1||typeof i!=`object`||!i||Array.isArray(i))return t;for(let[e,n]of Object.entries(i)){if(t.size>=1e3)break;if(!Array.isArray(n)||n.length!==3)continue;let[r,i,a]=n;u(r)&&u(i)&&u(a)&&t.set(e,[r,i,a])}return t}function f(e,t,r=n){let i={},a=0;for(let n of[e,t])for(let[e,t]of n){if(a>=r)break;e in i||!t.every(u)||(i[e]=[l(t[0]),l(t[1]),l(t[2])],a++)}return JSON.stringify({v:1,p:i})}function p(e,t){let n=2166136261;for(let t=0;t<e.length;t++)n=Math.imul(n^e.charCodeAt(t),16777619);let r=(n>>>0)%1e3/1e3,i=(Math.imul(n,2654435761)>>>0)%1e3/1e3,a=r*Math.PI*2,o=i*2-1,s=Math.sqrt(1-o*o),c=t*(.6+.4*r);return[Math.cos(a)*s*c,o*c,Math.sin(a)*s*c]}function m(e,t){let n=new Map,r=new Set,i=new Map;for(let t of a(e))for(let e of t.members)i.set(e,t);let o=new Map,s=new Map;for(let t of e.links)t.kind===`structure`&&(o.get(t.target)??o.set(t.target,[]).get(t.target)).push(t.source),(s.get(t.target)??s.set(t.target,[]).get(t.target)).push(t.source),(s.get(t.source)??s.set(t.source,[]).get(t.source)).push(t.target);n.set(`hub`,[0,0,0]);for(let r of e.nodes){if(r.id===`hub`)continue;let e=t.get(r.id);e&&n.set(r.id,e)}let c=new Set(e.groups.map(e=>e.id)),u=[...e.nodes.filter(e=>c.has(e.id)),...e.nodes.filter(e=>!c.has(e.id))];for(let e of u){if(n.has(e.id))continue;r.add(e.id);let t=[...o.get(e.id)??[],...s.get(e.id)??[]].find(e=>e!==`hub`&&n.has(e)),a=i.get(e.id),c=t===void 0?a?.center:n.get(t),u=p(e.id,t===void 0?a?24:40:14),d=c??[0,0,0];n.set(e.id,[l(d[0]+u[0]),l(d[1]+u[1]),l(d[2]+u[2])])}return{positions:n,fresh:r}}function h(e,t){let n=new Map,r=[],i=e=>r.some(t=>e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h),a=[...e.filter(e=>e.pinned),...e.filter(e=>!e.pinned)];for(let e of a)for(let a of e.texts){let o=t(a,e),s={x:e.x-o/2,y:e.y,w:o,h:e.h};if(e.pinned||!i(s)){r.push(s),n.set(e.id,{text:a,box:s});break}}return n}var g=8,_=900;function v(e){let t={top:0,right:0,bottom:0,left:0},n=e.closest(`.wt-stage`);if(!n)return t;let r=e.getBoundingClientRect();if(!r.height)return t;let i=n.querySelector(`.wt-dock`)?.getBoundingClientRect(),a=n.querySelector(`.wt-chips`)?.getBoundingClientRect(),o=r.width>=_?n.querySelector(`.wt-pop-legend`)?.getBoundingClientRect():void 0,s=o&&o.width?Math.max(0,o.right-r.left+g):0,c=i&&i.height?Math.max(0,r.bottom-i.top+g):0,l=a&&a.height?Math.max(0,a.bottom-r.top+g):0;return{top:Math.min(l,r.height/3),right:0,bottom:Math.min(c,r.height/3),left:Math.min(s,r.width/3)}}export{c as a,a as c,s as i,m as l,t as n,d as o,o as r,h as s,v as t,f as u};
@@ -1 +1 @@
1
- import{H as e,Y as t,tt as n}from"./ui-C9Igxzjm.js";var r={artifactsPerUser:5e3,revisionsPerArtifact:500,blobBytes:26214400,userBlobBytes:2147483648,bundleFiles:200,chunkBytes:1048576,aiJobsPerUser:8,aiJobsPerArtifact:2,aiInstructionChars:8e3},i=[`markdown`,`code`,`image`,`table`,`chart`,`dashboard`,`html`,`app`,`file`],a=[`html`,`app`],o=[`text/markdown`,`text/plain`,`text/csv`,`text/html`,`text/css`,`text/javascript`,`application/json`,`application/pdf`,`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`image/svg+xml`],s=e=>typeof e==`string`&&/^sha256:[0-9a-f]{64}$/.test(e);function c(e){if(!t(e))return`blob must be an object`;if(!s(e.hash))return`hash must be sha256:<64 hex>`;if(typeof e.bytes!=`number`||!Number.isSafeInteger(e.bytes)||e.bytes<0||e.bytes>r.blobBytes)return`bytes must be 0–${r.blobBytes}`;if(!o.includes(e.mediaType))return`mediaType is not allowed`;if(e.path!==void 0&&(typeof e.path!=`string`||!/^(?!\/)(?!.*(?:^|\/)\.\.?(?:\/|$))[A-Za-z0-9._/-]{1,200}$/.test(e.path)))return`path must be a relative path without . or .. segments`}var l=`/api/agent/artifacts`,u={workspace:``,type:``},d=e=>typeof e==`string`&&i.includes(e);function f(t){let n=typeof t==`string`?new URLSearchParams(t):t,r=n.get(`workspace`)??``,i=n.get(`type`)??``;return{workspace:r===`none`||e(`workspace`,r)?r:``,type:d(i)?i:``}}function p(e){let t=new URLSearchParams;e.workspace&&t.set(`workspace`,e.workspace),e.type&&t.set(`type`,e.type);let n=t.toString();return n?`?${n}`:``}var m=e=>e.workspace&&e.workspace!==`none`?e.workspace:``;function h(e,t){let n=new URLSearchParams({state:`active`,limit:`50`}),r=m(e);return r&&n.set(`workspace`,r),t&&n.set(`cursor`,t),`${l}?${n}`}var g=e=>typeof e==`string`&&e.length>0;function _(e){if(!e||typeof e!=`object`)return;let t=e;if(g(t.id)&&typeof t.title==`string`&&d(t.kind)&&typeof t.updatedAt==`number`)return{id:t.id,title:t.title,kind:t.kind,visibility:t.visibility===`workspace`?`workspace`:`private`,...g(t.workspaceID)?{workspaceID:t.workspaceID}:{},...g(t.description)?{description:t.description}:{},updatedAt:t.updatedAt}}function v(e){let t=e&&typeof e==`object`?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>_(e)??[]):[],...g(t.cursor)?{cursor:t.cursor}:{}}}function y(e,t){return e.filter(e=>(t.type===``||e.kind===t.type)&&(t.workspace===``||(t.workspace===`none`?!e.workspaceID:e.workspaceID===t.workspace)))}function b(e){return e.status===422||e.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub yet.`}:e.status===404?{kind:`unavailable`,text:`This hub doesn't have artifacts.`}:e.status===403||e.status===401?{kind:`forbidden`,text:`This device isn't allowed to read artifacts.`}:{kind:`error`,text:e.message?`Could not load artifacts: ${e.message}`:`Could not load artifacts (HTTP ${e.status}).`}}function x(e){let t=e&&typeof e==`object`?e:{};return{status:typeof t.status==`number`?t.status:0,...typeof t.code==`string`?{code:t.code}:{},message:typeof t.message==`string`?t.message:String(e)}}function S(e,t){return t?`None of the artifacts loaded so far match. Load more to keep looking.`:e.workspace===``&&e.type===``?`No artifacts yet. Artifacts that your sessions create show up here.`:`No artifacts match these filters.`}var C=(e,t)=>t.get(e)??`Workspace ${e.slice(0,12)}…`,w=e=>`/artifacts/${encodeURIComponent(e)}`;function T(e,t){let n=u,r,i=0,a=[],o,s={status:`loading`},c=()=>s.status===`ready`?{status:`ready`,items:y(a,n),total:a.length,more:o!==void 0,loadingMore:s.loadingMore,...s.moreError?{moreError:s.moreError}:{}}:s,l=e=>{s=e,t(c())};function d(u){n=u;let d=m(u);if(d===r&&s.status===`ready`){t(c());return}r=d;let f=++i;a=[],o=void 0,l({status:`loading`}),e.list(u).then(e=>{f===i&&(a=[...e.items],o=e.cursor,l({status:`ready`,loadingMore:!1}))},e=>f===i&&l({status:`error`,error:b(x(e))}))}function f(){if(s.status!==`ready`||s.loadingMore||o===void 0)return;let t=i;l({status:`ready`,loadingMore:!0}),e.list(n,o).then(e=>{if(t!==i)return;let n=new Set(a.map(e=>e.id));a=[...a,...e.items.filter(e=>!n.has(e.id))],o=e.cursor,l({status:`ready`,loadingMore:!1})},e=>t===i&&l({status:`ready`,loadingMore:!1,moreError:b(x(e)).text}))}function p(){r=void 0,d(n)}return{load:d,more:f,reload:p,view:c}}var E={list:async(e,t)=>v(await n(h(e,t)))};async function D(){try{return((await n(`/api/agent/workspaces?state=active&limit=200`)).items??[]).flatMap(e=>typeof e.id==`string`&&typeof e.title==`string`?[{id:e.id,title:e.title}]:[])}catch{return[]}}export{S as a,C as c,a as d,c as f,T as i,i as l,D as n,p as o,w as r,f as s,E as t,r as u};
1
+ import{G as e,Q as t,it as n}from"./ui-Dh1-78Cl.js";var r={artifactsPerUser:5e3,revisionsPerArtifact:500,blobBytes:26214400,userBlobBytes:2147483648,bundleFiles:200,chunkBytes:1048576,aiJobsPerUser:8,aiJobsPerArtifact:2,aiInstructionChars:8e3},i=[`markdown`,`code`,`image`,`table`,`chart`,`dashboard`,`html`,`app`,`file`],a=[`html`,`app`],o=[`text/markdown`,`text/plain`,`text/csv`,`text/html`,`text/css`,`text/javascript`,`application/json`,`application/pdf`,`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`image/svg+xml`],s=e=>typeof e==`string`&&/^sha256:[0-9a-f]{64}$/.test(e);function c(e){if(!t(e))return`blob must be an object`;if(!s(e.hash))return`hash must be sha256:<64 hex>`;if(typeof e.bytes!=`number`||!Number.isSafeInteger(e.bytes)||e.bytes<0||e.bytes>r.blobBytes)return`bytes must be 0–${r.blobBytes}`;if(!o.includes(e.mediaType))return`mediaType is not allowed`;if(e.path!==void 0&&(typeof e.path!=`string`||!/^(?!\/)(?!.*(?:^|\/)\.\.?(?:\/|$))[A-Za-z0-9._/-]{1,200}$/.test(e.path)))return`path must be a relative path without . or .. segments`}var l=`/api/agent/artifacts`,u={workspace:``,type:``},d=e=>typeof e==`string`&&i.includes(e);function f(t){let n=typeof t==`string`?new URLSearchParams(t):t,r=n.get(`workspace`)??``,i=n.get(`type`)??``;return{workspace:r===`none`||e(`workspace`,r)?r:``,type:d(i)?i:``}}function p(e){let t=new URLSearchParams;e.workspace&&t.set(`workspace`,e.workspace),e.type&&t.set(`type`,e.type);let n=t.toString();return n?`?${n}`:``}var m=e=>e.workspace&&e.workspace!==`none`?e.workspace:``;function h(e,t){let n=new URLSearchParams({state:`active`,limit:`50`}),r=m(e);return r&&n.set(`workspace`,r),t&&n.set(`cursor`,t),`${l}?${n}`}var g=e=>typeof e==`string`&&e.length>0;function _(e){if(!e||typeof e!=`object`)return;let t=e;if(g(t.id)&&typeof t.title==`string`&&d(t.kind)&&typeof t.updatedAt==`number`)return{id:t.id,title:t.title,kind:t.kind,visibility:t.visibility===`workspace`?`workspace`:`private`,...g(t.workspaceID)?{workspaceID:t.workspaceID}:{},...g(t.description)?{description:t.description}:{},updatedAt:t.updatedAt}}function v(e){let t=e&&typeof e==`object`?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>_(e)??[]):[],...g(t.cursor)?{cursor:t.cursor}:{}}}function y(e,t){return e.filter(e=>(t.type===``||e.kind===t.type)&&(t.workspace===``||(t.workspace===`none`?!e.workspaceID:e.workspaceID===t.workspace)))}function b(e){return e.status===422||e.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub yet.`}:e.status===404?{kind:`unavailable`,text:`This hub doesn't have artifacts.`}:e.status===403||e.status===401?{kind:`forbidden`,text:`This device isn't allowed to read artifacts.`}:{kind:`error`,text:e.message?`Could not load artifacts: ${e.message}`:`Could not load artifacts (HTTP ${e.status}).`}}function x(e){let t=e&&typeof e==`object`?e:{};return{status:typeof t.status==`number`?t.status:0,...typeof t.code==`string`?{code:t.code}:{},message:typeof t.message==`string`?t.message:String(e)}}function S(e,t){return t?`None of the artifacts loaded so far match. Load more to keep looking.`:e.workspace===``&&e.type===``?`No artifacts yet. Artifacts that your sessions create show up here.`:`No artifacts match these filters.`}var C=(e,t)=>t.get(e)??`Workspace ${e.slice(0,12)}…`,w=e=>`/artifacts/${encodeURIComponent(e)}`;function T(e,t){let n=u,r,i=0,a=[],o,s={status:`loading`},c=()=>s.status===`ready`?{status:`ready`,items:y(a,n),total:a.length,more:o!==void 0,loadingMore:s.loadingMore,...s.moreError?{moreError:s.moreError}:{}}:s,l=e=>{s=e,t(c())};function d(u){n=u;let d=m(u);if(d===r&&s.status===`ready`){t(c());return}r=d;let f=++i;a=[],o=void 0,l({status:`loading`}),e.list(u).then(e=>{f===i&&(a=[...e.items],o=e.cursor,l({status:`ready`,loadingMore:!1}))},e=>f===i&&l({status:`error`,error:b(x(e))}))}function f(){if(s.status!==`ready`||s.loadingMore||o===void 0)return;let t=i;l({status:`ready`,loadingMore:!0}),e.list(n,o).then(e=>{if(t!==i)return;let n=new Set(a.map(e=>e.id));a=[...a,...e.items.filter(e=>!n.has(e.id))],o=e.cursor,l({status:`ready`,loadingMore:!1})},e=>t===i&&l({status:`ready`,loadingMore:!1,moreError:b(x(e)).text}))}function p(){r=void 0,d(n)}return{load:d,more:f,reload:p,view:c}}var E={list:async(e,t)=>v(await n(h(e,t)))};async function D(){try{return((await n(`/api/agent/workspaces?state=active&limit=200`)).items??[]).flatMap(e=>typeof e.id==`string`&&typeof e.title==`string`?[{id:e.id,title:e.title}]:[])}catch{return[]}}export{S as a,C as c,a as d,c as f,T as i,i as l,D as n,p as o,w as r,f as s,E as t,r as u};
@@ -0,0 +1,3 @@
1
+ var e={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return t(this.context.count)},getNextContextId(){return t(this.context.count++)}};function t(t){let n=String(t),r=n.length-1;return e.context.id+(r?String.fromCharCode(96+r):``)+n}function n(t){e.context=t}var r=(e,t)=>e===t,i=Symbol(`solid-proxy`),a=typeof Proxy==`function`,o=Symbol(`solid-track`),s={equals:r},c=null,l=ge,u=1,d=2,f={owned:null,cleanups:null,context:null,owner:null},p={},m=null,h=null,g=null,_=null,v=null,y=0;function b(e,t){let n=g,r=m,i=e.length===0,a=t===void 0?r:t,o=i?f:{owned:null,cleanups:null,context:a?a.context:null,owner:a},s=i?e:()=>e(()=>T(()=>L(o)));m=o,g=null;try{return F(s,!0)}finally{g=n,m=r}}function x(e,t){t=t?Object.assign({},s,t):s;let n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0};return[fe.bind(n),e=>(typeof e==`function`&&(e=h&&h.running&&h.sources.has(n)?e(n.tValue):e(n.value)),pe(n,e))]}function ee(e,t,n){M(N(e,t,!0,u))}function S(e,t,n){M(N(e,t,!1,u))}function C(e,t,n){l=_e;let r=N(e,t,!1,u),i=j&&le(j);i&&(r.suspense=i),(!n||!n.render)&&(r.user=!0),v?v.push(r):M(r)}function w(e,t,n){n=n?Object.assign({},s,n):s;let r=N(e,t,!0,0);return r.observers=null,r.observerSlots=null,r.comparator=n.equals||void 0,M(r),fe.bind(r)}function te(e){return e&&typeof e==`object`&&`then`in e}function ne(t,n,r){let i,a,o;typeof n==`function`?(i=t,a=n,o=r||{}):(i=!0,a=t,o=n||{});let s=null,c=p,l=null,u=!1,d=!1,f=`initialValue`in o,_=typeof i==`function`&&w(i),v=new Set,[y,b]=(o.storage||x)(o.initialValue),[S,C]=x(void 0),[ne,re]=x(void 0,{equals:!1}),[ie,E]=x(f?`ready`:`unresolved`);m&&D(()=>{for(let e of v.keys())e.decrement();v.clear(),h&&s&&h.promises.delete(s),s=null}),e.context&&(l=e.getNextContextId(),o.ssrLoadFrom===`initial`?c=o.initialValue:e.load&&e.has(l)&&(c=e.load(l)));function O(e,t,n,r){return s===e&&(s=null,r!==void 0&&(f=!0),(e===c||t===c)&&o.onHydrated&&queueMicrotask(()=>o.onHydrated(r,{value:t})),c=p,h&&e&&u?(h.promises.delete(e),u=!1,F(()=>{h.running=!0,k(t,n)},!1)):k(t,n)),t}function k(e,t){F(()=>{t===void 0&&b(()=>e),E(t===void 0?f?`ready`:`unresolved`:`errored`),C(t);for(let e of v.keys())e.decrement();v.clear()},!1)}function oe(){let e=j&&le(j),t=y(),n=S();if(n!==void 0&&!s)throw n;return g&&!g.user&&e&&ee(()=>{ne(),s&&(e.resolved&&h&&u?h.promises.add(s):v.has(e)||(e.increment(),v.add(e)))}),t}function A(e=!0){if(e!==!1&&d)return;d=!1;let t=_?_():i;if(u=h&&h.running,t==null||t===!1){O(s,T(y));return}h&&s&&h.promises.delete(s);let n,r=c===p?T(()=>{try{return a(t,{value:y(),refetching:e})}catch(e){n=e}}):c;if(n!==void 0)O(s,void 0,R(n),t);else return te(r)?(s=r,`v`in r?(r.s===1?O(s,r.v,void 0,t):O(s,void 0,R(r.v),t),r):(d=!0,queueMicrotask(()=>d=!1),F(()=>{E(f?`refreshing`:`pending`),re()},!1),r.then(e=>O(r,e,void 0,t),e=>O(r,void 0,R(e),t)))):(O(s,r,void 0,t),r)}Object.defineProperties(oe,{state:{get:()=>ie()},error:{get:()=>S()},loading:{get(){let e=ie();return e===`pending`||e===`refreshing`}},latest:{get(){if(!f)return oe();let e=S();if(e&&!s)throw e;return y()}}});let se=m;return _?ee(()=>(se=m,A(!1))):A(!1),[oe,{refetch:e=>ae(se,()=>A(e)),mutate:b}]}function re(e){return F(e,!1)}function T(e){if(g===null)return e();let t=g;g=null;try{return e()}finally{g=t}}function ie(e,t,n){let r=Array.isArray(e),i,a=n&&n.defer;return n=>{let o;if(r){o=Array(e.length);for(let t=0;t<e.length;t++)o[t]=e[t]()}else o=e();if(a)return a=!1,n;let s=T(()=>t(o,i,n));return i=o,s}}function E(e){C(()=>T(e))}function D(e){return m===null||(m.cleanups===null?m.cleanups=[e]:m.cleanups.push(e)),e}function O(){return g}function k(){return m}function ae(e,t){let n=m,r=g;m=e,g=null;try{return F(t,!0)}catch(e){z(e)}finally{m=n,g=r}}var[oe,A]=x(!1);function se(e){v.push.apply(v,e),e.length=0}function ce(e,t){let n=Symbol(`context`);return{id:n,Provider:Se(n),defaultValue:e}}function le(e){let t;return m&&m.context&&(t=m.context[e.id])!==void 0?t:e.defaultValue}function ue(e){let t=w(e),n=w(()=>xe(t()));return n.toArray=()=>{let e=n();return Array.isArray(e)?e:e==null?[]:[e]},n}var j;function de(){return j||=ce()}function fe(){let e=h&&h.running;if(this.sources&&(e?this.tState:this.state)){if((e?this.tState:this.state)===u)M(this);else{let e=_;_=null,F(()=>I(this),!1),_=e}}if(g){let e=this.observers;if(!e||e[e.length-1]!==g){let t=e?e.length:0;g.sources?(g.sources.push(this),g.sourceSlots.push(t)):(g.sources=[this],g.sourceSlots=[t]),e?(e.push(g),this.observerSlots.push(g.sources.length-1)):(this.observers=[g],this.observerSlots=[g.sources.length-1])}}return e&&h.sources.has(this)?this.tValue:this.value}function pe(e,t,n){let r=h&&h.running&&h.sources.has(e)?e.tValue:e.value;if(!e.comparator||!e.comparator(r,t)){if(h){let r=h.running;(r||!n&&h.sources.has(e))&&(h.sources.add(e),e.tValue=t),r||(e.value=t)}else e.value=t;e.observers&&e.observers.length&&F(()=>{for(let t=0;t<e.observers.length;t+=1){let n=e.observers[t],r=h&&h.running;r&&h.disposed.has(n)||((r?!n.tState:!n.state)&&(n.pure?_.push(n):v.push(n),n.observers&&ve(n)),r?n.tState=u:n.state=u)}if(_.length>1e6)throw _=[],Error()},!1)}return t}function M(e){if(!e.fn)return;L(e);let t=y;me(e,h&&h.running&&h.sources.has(e)?e.tValue:e.value,t),h&&!h.running&&h.sources.has(e)&&queueMicrotask(()=>{F(()=>{h&&(h.running=!0),g=m=e,me(e,e.tValue,t),g=m=null},!1)})}function me(e,t,n){let r,i=m,a=g;g=m=e;try{r=e.fn(t)}catch(t){return e.pure&&(h&&h.running?(e.tState=u,e.tOwned&&e.tOwned.forEach(L),e.tOwned=void 0):(e.state=u,e.owned&&e.owned.forEach(L),e.owned=null)),e.updatedAt=n+1,z(t)}finally{g=a,m=i}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!=null&&`observers`in e?pe(e,r,!0):h&&h.running&&e.pure?(h.sources.has(e)||(e.value=r),h.sources.add(e),e.tValue=r):e.value=r,e.updatedAt=n)}function N(e,t,n,r=u,i){let a={fn:e,state:r,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:m,context:m?m.context:null,pure:n};return h&&h.running&&(a.state=0,a.tState=r),m===null||m!==f&&(h&&h.running&&m.pure?m.tOwned?m.tOwned.push(a):m.tOwned=[a]:m.owned?m.owned.push(a):m.owned=[a]),a}function P(e){let t=h&&h.running;if((t?e.tState:e.state)===0)return;if((t?e.tState:e.state)===d)return I(e);if(e.suspense&&T(e.suspense.inFallback))return e.suspense.effects.push(e);let n=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<y);){if(t&&h.disposed.has(e))return;(t?e.tState:e.state)&&n.push(e)}for(let r=n.length-1;r>=0;r--){if(e=n[r],t){let t=e,i=n[r+1];for(;(t=t.owner)&&t!==i;)if(h.disposed.has(t))return}if((t?e.tState:e.state)===u)M(e);else if((t?e.tState:e.state)===d){let t=_;_=null,F(()=>I(e,n[0]),!1),_=t}}}function F(e,t){if(_)return e();let n=!1;t||(_=[]),v?n=!0:v=[],y++;try{let t=e();return he(n),t}catch(e){n||(v=null),_=null,z(e)}}function he(e){if(_&&=(ge(_),null),e)return;let t;if(h){if(!h.promises.size&&!h.queue.size){let e=h.sources,n=h.disposed;v.push.apply(v,h.effects),t=h.resolve;for(let e of v)`tState`in e&&(e.state=e.tState),delete e.tState;h=null,F(()=>{for(let e of n)L(e);for(let t of e){if(t.value=t.tValue,t.owned)for(let e=0,n=t.owned.length;e<n;e++)L(t.owned[e]);t.tOwned&&(t.owned=t.tOwned),delete t.tValue,delete t.tOwned,t.tState=0}A(!1)},!1)}else if(h.running){h.running=!1,h.effects.push.apply(h.effects,v),v=null,A(!0);return}}let n=v;v=null,n.length&&F(()=>l(n),!1),t&&t()}function ge(e){for(let t=0;t<e.length;t++)P(e[t])}function _e(t){let r,i=0;for(r=0;r<t.length;r++){let e=t[r];e.user?t[i++]=e:P(e)}if(e.context){if(e.count){e.effects||=[],e.effects.push(...t.slice(0,i));return}n()}for(e.effects&&(e.done||!e.count)&&(t=[...e.effects,...t],i+=e.effects.length,delete e.effects),r=0;r<i;r++)P(t[r])}function I(e,t){let n=h&&h.running;n?e.tState=0:e.state=0;for(let r=0;r<e.sources.length;r+=1){let i=e.sources[r];if(i.sources){let e=n?i.tState:i.state;e===u?i!==t&&(!i.updatedAt||i.updatedAt<y)&&P(i):e===d&&I(i,t)}}}function ve(e){let t=h&&h.running;for(let n=0;n<e.observers.length;n+=1){let r=e.observers[n];(t?!r.tState:!r.state)&&(t?r.tState=d:r.state=d,r.pure?_.push(r):v.push(r),r.observers&&ve(r))}}function L(e){let t;if(e.sources)for(;e.sources.length;){let t=e.sources.pop(),n=e.sourceSlots.pop(),r=t.observers;if(r&&r.length){let e=r.pop(),i=t.observerSlots.pop();n<r.length&&(e.sourceSlots[i]=n,r[n]=e,t.observerSlots[n]=i)}}if(e.tOwned){for(t=e.tOwned.length-1;t>=0;t--)L(e.tOwned[t]);delete e.tOwned}if(h&&h.running&&e.pure)ye(e,!0);else if(e.owned){for(t=e.owned.length-1;t>=0;t--)L(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}h&&h.running?e.tState=0:e.state=0}function ye(e,t){if(t||(e.tState=0,h.disposed.add(e)),e.owned)for(let t=0;t<e.owned.length;t++)ye(e.owned[t])}function R(e){return e instanceof Error?e:Error(typeof e==`string`?e:`Unknown error`,{cause:e})}function be(e,t,n){try{for(let n of t)n(e)}catch(e){z(e,n&&n.owner||null)}}function z(e,t=m){let n=c&&t&&t.context&&t.context[c],r=R(e);if(!n)throw r;v?v.push({fn(){be(r,n,t)},state:u}):be(r,n,t)}function xe(e){if(typeof e==`function`&&!e.length)return xe(e());if(Array.isArray(e)){let t=[];for(let n=0;n<e.length;n++){let r=xe(e[n]);if(Array.isArray(r)){if(r.length<32768)t.push.apply(t,r);else for(let e=0;e<r.length;e++)t.push(r[e])}else t.push(r)}return t}return e}function Se(e,t){return function(t){let n;return S(()=>n=T(()=>(m.context={...m.context,[e]:t.value},ue(()=>t.children))),void 0),n}}var Ce=Symbol(`fallback`);function B(e){for(let t=0;t<e.length;t++)e[t]()}function we(e,t,n={}){let r=[],i=[],a=[],s=0,c=t.length>1?[]:null;return D(()=>B(a)),()=>{let l=e()||[],u=l.length,d,f;return l[o],T(()=>{let e,t,o,m,h,g,_,v,y;if(u===0)s!==0&&(B(a),a=[],r=[],i=[],s=0,c&&=[]),n.fallback&&(r=[Ce],i[0]=b(e=>(a[0]=e,n.fallback())),s=1);else if(s===0){for(i=Array(u),f=0;f<u;f++)r[f]=l[f],i[f]=b(p);s=u}else{for(o=Array(u),m=Array(u),c&&(h=Array(u)),g=0,_=Math.min(s,u);g<_&&r[g]===l[g];g++);for(_=s-1,v=u-1;_>=g&&v>=g&&r[_]===l[v];_--,v--)o[v]=i[_],m[v]=a[_],c&&(h[v]=c[_]);for(e=new Map,t=Array(v+1),f=v;f>=g;f--)y=l[f],d=e.get(y),t[f]=d===void 0?-1:d,e.set(y,f);for(d=g;d<=_;d++)y=r[d],f=e.get(y),f!==void 0&&f!==-1?(o[f]=i[d],m[f]=a[d],c&&(h[f]=c[d]),f=t[f],e.set(y,f)):a[d]();for(f=g;f<u;f++)f in o?(i[f]=o[f],a[f]=m[f],c&&(c[f]=h[f],c[f](f))):i[f]=b(p);i=i.slice(0,s=u),r=l.slice(0)}return i});function p(e){if(a[f]=e,c){let[e,n]=x(f);return c[f]=n,t(l[f],e)}return t(l[f])}}}function Te(e,t,n={}){let r=[],i=[],a=[],s=[],c=0,l;return D(()=>B(a)),()=>{let u=e()||[],d=u.length;return u[o],T(()=>{if(d===0)return c!==0&&(B(a),a=[],r=[],i=[],c=0,s=[]),n.fallback&&(r=[Ce],i[0]=b(e=>(a[0]=e,n.fallback())),c=1),i;for(r[0]===Ce&&(a[0](),a=[],r=[],i=[],c=0),l=0;l<d;l++)l<r.length&&r[l]!==u[l]?s[l](()=>u[l]):l>=r.length&&(i[l]=b(f));for(;l<r.length;l++)a[l]();return c=s.length=a.length=d,r=u.slice(0),i=i.slice(0,c)});function f(e){a[l]=e;let[n,r]=x(u[l]);return s[l]=r,t(n,l)}}}function V(e,t){return T(()=>e(t||{}))}function H(){return!0}var Ee={get(e,t,n){return t===i?n:e.get(t)},has(e,t){return t===i||e.has(t)},set:H,deleteProperty:H,getOwnPropertyDescriptor(e,t){return{configurable:!0,enumerable:!0,get(){return e.get(t)},set:H,deleteProperty:H}},ownKeys(e){return e.keys()}};function De(e){return(e=typeof e==`function`?e():e)?e:{}}function Oe(){for(let e=0,t=this.length;e<t;++e){let t=this[e]();if(t!==void 0)return t}}function ke(...e){let t=!1;for(let n=0;n<e.length;n++){let r=e[n];t||=!!r&&i in r,e[n]=typeof r==`function`?(t=!0,w(r)):r}if(a&&t)return new Proxy({get(t){for(let n=e.length-1;n>=0;n--){let r=De(e[n])[t];if(r!==void 0)return r}},has(t){for(let n=e.length-1;n>=0;n--)if(t in De(e[n]))return!0;return!1},keys(){let t=[];for(let n=0;n<e.length;n++)t.push(...Object.keys(De(e[n])));return[...new Set(t)]}},Ee);let n={},r=Object.create(null);for(let t=e.length-1;t>=0;t--){let i=e[t];if(!i)continue;let a=Object.getOwnPropertyNames(i);for(let e=a.length-1;e>=0;e--){let t=a[e];if(t===`__proto__`||t===`constructor`)continue;let o=Object.getOwnPropertyDescriptor(i,t);if(!r[t])r[t]=o.get?{enumerable:!0,configurable:!0,get:Oe.bind(n[t]=[o.get.bind(i)])}:o.value===void 0?void 0:o;else{let e=n[t];e&&(o.get?e.push(o.get.bind(i)):o.value!==void 0&&e.push(()=>o.value))}}}let o={},s=Object.keys(r);for(let e=s.length-1;e>=0;e--){let t=s[e],n=r[t];n&&n.get?Object.defineProperty(o,t,n):o[t]=n?n.value:void 0}return o}function Ae(e,...t){let n=t.length;if(a&&i in e){let r=n>1?t.flat():t[0],i=new Set,a=t.map(t=>{let n=t.filter(e=>!i.has(e)&&(i.add(e),!0));return new Proxy({get(t){return n.includes(t)?e[t]:void 0},has(t){return n.includes(t)&&t in e},keys(){return n.filter(t=>t in e)}},Ee)});return a.push(new Proxy({get(t){return r.includes(t)?void 0:e[t]},has(t){return!r.includes(t)&&t in e},keys(){return Object.keys(e).filter(e=>!r.includes(e))}},Ee)),a}let r=[];for(let e=0;e<=n;e++)r[e]={};for(let i of Object.getOwnPropertyNames(e)){let a=n;for(let e=0;e<t.length;e++)if(t[e].includes(i)){a=e;break}let o=Object.getOwnPropertyDescriptor(e,i);!o.get&&!o.set&&o.enumerable&&o.writable&&o.configurable?r[a][i]=o.value:Object.defineProperty(r[a],i,o)}return r}function je(t){let r,i,a=()=>{if(!i){let e=i=t();e.then(e=>{r=()=>e.default},()=>{i===e&&(i=void 0)})}return i},o=t=>{let i=e.context;if(i){let[t,o]=x();e.count||=0,e.count++,a().then(t=>{!e.done&&n(i),e.count--,o(()=>t.default),n()},t=>{!e.done&&n(i),e.count--,o(()=>()=>{throw t}),n()}),r=t}else if(!r){let[e]=ne(()=>a().then(e=>e.default));r=e,D(()=>r=void 0)}let o;return w(()=>(o=r?.())?T(()=>{if(!i||e.done)return o(t);let r=e.context;n(i);let a=o(t);return n(r),a}):``)};return o.preload=()=>a(),o}var Me=0;function Ne(){return e.context?e.getNextContextId():`cl-${Me++}`}var Pe=e=>`Stale read from <${e}>.`;function Fe(e){let t=`fallback`in e&&{fallback:()=>e.fallback};return w(we(()=>e.each,e.children,t||void 0))}function Ie(e){let t=`fallback`in e&&{fallback:()=>e.fallback};return w(Te(()=>e.each,e.children,t||void 0))}function U(e){let t=e.keyed,n=w(()=>e.when,void 0,void 0),r=t?n:w(n,void 0,{equals:(e,t)=>!e==!t});return w(()=>{let i=r();if(i){let a=e.children;return typeof a==`function`&&a.length>0?T(()=>a(t?i:()=>{if(!T(r))throw Pe(`Show`);return n()})):a}return e.fallback},void 0,void 0)}function Le(e){let t=ue(()=>e.children),n=w(()=>{let e=t(),n=Array.isArray(e)?e:[e],r=()=>void 0;for(let e=0;e<n.length;e++){let t=e,i=n[e],a=r,o=w(()=>a()?void 0:i.when,void 0,void 0),s=i.keyed?o:w(o,void 0,{equals:(e,t)=>!e==!t});r=()=>a()||(s()?[t,o,i]:void 0)}return r});return w(()=>{let t=n()();if(!t)return e.fallback;let[r,i,a]=t,o=a.children;return typeof o==`function`&&o.length>0?T(()=>o(a.keyed?i():()=>{if(T(n)()?.[0]!==r)throw Pe(`Match`);return i()})):o},void 0,void 0)}function Re(e){return e}var ze=ce();function Be(t){let r=0,i,a,o,s,c,[l,u]=x(!1),d=de(),f={increment:()=>{++r===1&&u(!0)},decrement:()=>{--r===0&&u(!1)},inFallback:l,effects:[],resolved:!1},p=k();if(e.context&&e.load){let t=e.getContextId(),r=e.load(t);if(r&&(typeof r!=`object`||r.s!==1?o=r:e.gather(t)),o&&o!==`$$f`){let[r,i]=x(void 0,{equals:!1});s=r,o.then(()=>{if(e.done)return i();e.gather(t),n(a),i(),n()},e=>{c=e,i()})}}let m=le(ze);m&&(i=m.register(f.inFallback));let h;return D(()=>h&&h()),V(d.Provider,{value:f,get children(){return w(()=>{if(c)throw c;if(a=e.context,s){s(),s=void 0;return}a&&o===`$$f`&&n();let r=w(()=>t.children);return w(e=>{let s=f.inFallback(),{showContent:c=!0,showFallback:l=!0}=i?i():{};if((!s||o&&o!==`$$f`)&&c)return f.resolved=!0,h&&h(),h=a=o=void 0,se(f.effects),r();if(l)return h?e:b(e=>(h=e,a&&=(n({id:a.id+`F`,count:0}),void 0),t.fallback),p)})})}})}var Ve=new Set([`className`,`value`,`readOnly`,`noValidate`,`formNoValidate`,`isMap`,`noModule`,`playsInline`,`adAuctionHeaders`,`allowFullscreen`,`browsingTopics`,`defaultChecked`,`defaultMuted`,`defaultSelected`,`disablePictureInPicture`,`disableRemotePlayback`,`preservesPitch`,`shadowRootClonable`,`shadowRootCustomElementRegistry`,`shadowRootDelegatesFocus`,`shadowRootSerializable`,`sharedStorageWritable`,...`allowfullscreen.async.alpha.autofocus.autoplay.checked.controls.default.disabled.formnovalidate.hidden.indeterminate.inert.ismap.loop.multiple.muted.nomodule.novalidate.open.playsinline.readonly.required.reversed.seamless.selected.adauctionheaders.browsingtopics.credentialless.defaultchecked.defaultmuted.defaultselected.defer.disablepictureinpicture.disableremoteplayback.preservespitch.shadowrootclonable.shadowrootcustomelementregistry.shadowrootdelegatesfocus.shadowrootserializable.sharedstoragewritable`.split(`.`)]),He=new Set([`innerHTML`,`textContent`,`innerText`,`children`]),Ue=Object.assign(Object.create(null),{className:`class`,htmlFor:`for`}),We=Object.assign(Object.create(null),{class:`className`,novalidate:{$:`noValidate`,FORM:1},formnovalidate:{$:`formNoValidate`,BUTTON:1,INPUT:1},ismap:{$:`isMap`,IMG:1},nomodule:{$:`noModule`,SCRIPT:1},playsinline:{$:`playsInline`,VIDEO:1},readonly:{$:`readOnly`,INPUT:1,TEXTAREA:1},adauctionheaders:{$:`adAuctionHeaders`,IFRAME:1},allowfullscreen:{$:`allowFullscreen`,IFRAME:1},browsingtopics:{$:`browsingTopics`,IMG:1},defaultchecked:{$:`defaultChecked`,INPUT:1},defaultmuted:{$:`defaultMuted`,AUDIO:1,VIDEO:1},defaultselected:{$:`defaultSelected`,OPTION:1},disablepictureinpicture:{$:`disablePictureInPicture`,VIDEO:1},disableremoteplayback:{$:`disableRemotePlayback`,AUDIO:1,VIDEO:1},preservespitch:{$:`preservesPitch`,AUDIO:1,VIDEO:1},shadowrootclonable:{$:`shadowRootClonable`,TEMPLATE:1},shadowrootdelegatesfocus:{$:`shadowRootDelegatesFocus`,TEMPLATE:1},shadowrootserializable:{$:`shadowRootSerializable`,TEMPLATE:1},sharedstoragewritable:{$:`sharedStorageWritable`,IFRAME:1,IMG:1}});function Ge(e,t){let n=We[e];return typeof n==`object`?n[t]?n.$:void 0:n}var Ke=new Set([`beforeinput`,`click`,`dblclick`,`contextmenu`,`focusin`,`focusout`,`input`,`keydown`,`keyup`,`mousedown`,`mousemove`,`mouseout`,`mouseover`,`mouseup`,`pointerdown`,`pointermove`,`pointerout`,`pointerover`,`pointerup`,`touchend`,`touchmove`,`touchstart`]),qe=new Set(`altGlyph.altGlyphDef.altGlyphItem.animate.animateColor.animateMotion.animateTransform.circle.clipPath.color-profile.cursor.defs.desc.ellipse.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feDropShadow.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.filter.font.font-face.font-face-format.font-face-name.font-face-src.font-face-uri.foreignObject.g.glyph.glyphRef.hkern.image.line.linearGradient.marker.mask.metadata.missing-glyph.mpath.path.pattern.polygon.polyline.radialGradient.rect.set.stop.svg.switch.symbol.text.textPath.tref.tspan.use.view.vkern`.split(`.`)),Je={xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`},Ye=e=>w(()=>e());function Xe(e,t,n){let r=n.length,i=t.length,a=r,o=0,s=0,c=t[i-1].nextSibling,l=null;for(;o<i||s<a;)if(t[o]===n[s])o++,s++;else{for(;t[i-1]===n[a-1];)i--,a--;if(i===o){let t=a<r?s?n[s-1].nextSibling:n[a-s]:c;for(;s<a;)e.insertBefore(n[s++],t)}else if(a===s)for(;o<i;)(!l||!l.has(t[o]))&&t[o].remove(),o++;else if(t[o]===n[a-1]&&n[s]===t[i-1]){let r=t[--i].nextSibling;e.insertBefore(n[s++],t[o++].nextSibling),e.insertBefore(n[--a],r),t[i]=n[a]}else{if(!l){l=new Map;let e=s;for(;e<a;)l.set(n[e],e++)}let r=l.get(t[o]);if(r!=null){if(s<r&&r<a){let c=o,u=1,d;for(;++c<i&&c<a&&(d=l.get(t[c]))!=null&&d===r+u;)u++;if(u>r-s){let i=t[o];for(;s<r;)e.insertBefore(n[s++],i)}else e.replaceChild(n[s++],t[o++])}else o++}else t[o++].remove()}}}var Ze=`_$DX_DELEGATE`;function Qe(e,t,n,r={}){let i;return b(r=>{i=r,t===document?e():Y(t,e(),!n&&t.firstChild?null:void 0,n)},r.owner),()=>{i(),t.textContent=``}}function W(e,t,n,r){let i,a=()=>{let t=r?document.createElementNS(`http://www.w3.org/1998/Math/MathML`,`template`):document.createElement(`template`);return t.innerHTML=e,n?t.content.firstChild.firstChild:r?t.firstChild:t.content.firstChild},o=t?()=>T(()=>document.importNode(i||=a(),!0)):()=>(i||=a()).cloneNode(!0);return o.cloneNode=o,o}function G(e,t=window.document){let n=t[Ze]||(t[Ze]=new Set);for(let r=0,i=e.length;r<i;r++){let i=e[r];n.has(i)||(n.add(i),t.addEventListener(i,dt))}}function K(e,t,n){X(e)||(n==null?e.removeAttribute(t):e.setAttribute(t,n))}function $e(e,t,n,r){X(e)||(r==null?e.removeAttributeNS(t,n):e.setAttributeNS(t,n,r))}function et(e,t,n){X(e)||(n?e.setAttribute(t,``):e.removeAttribute(t))}function q(e,t){X(e)||(t==null?e.removeAttribute(`class`):e.className=t)}function tt(e,t,n,r){if(r)Array.isArray(n)?(e[`$$${t}`]=n[0],e[`$$${t}Data`]=n[1]):e[`$$${t}`]=n;else if(Array.isArray(n)){let r=n[0];e.addEventListener(t,n[0]=t=>r.call(e,n[1],t))}else e.addEventListener(t,n,typeof n!=`function`&&n)}function nt(e,t,n={}){let r=Object.keys(t||{}),i=Object.keys(n),a,o;for(a=0,o=i.length;a<o;a++){let r=i[a];r&&r!==`undefined`&&!t[r]&&(lt(e,r,!1),delete n[r])}for(a=0,o=r.length;a<o;a++){let i=r[a],o=!!t[i];i&&i!==`undefined`&&n[i]!==o&&o&&(lt(e,i,!0),n[i]=o)}return n}function rt(e,t,n){if(!t)return n?K(e,`style`):t;let r=e.style;if(typeof t==`string`)return r.cssText=t;typeof n==`string`&&(r.cssText=n=void 0),n||={},t||={};let i,a;for(a in n)t[a]??r.removeProperty(a),delete n[a];for(a in t)i=t[a],i!==n[a]&&(r.setProperty(a,i),n[a]=i);return n}function it(e,t,n){n==null?e.style.removeProperty(t):e.style.setProperty(t,n)}function at(e,t={},n,r){let i={};return r||S(()=>i.children=Z(e,t.children,i.children)),S(()=>typeof t.ref==`function`&&J(t.ref,e)),S(()=>ot(e,t,n,!0,i,!0)),i}function J(e,t,n){return T(()=>e(t,n))}function Y(e,t,n,r){if(n!==void 0&&!r&&(r=[]),typeof t!=`function`)return Z(e,t,r,n);S(r=>Z(e,t(),r,n),r)}function ot(e,t,n,r,i={},a=!1){t||={};for(let r in i)if(!(r in t)){if(r===`children`)continue;i[r]=ut(e,r,null,i[r],n,a,t)}for(let o in t){if(o===`children`){r||Z(e,t.children);continue}let s=t[o];i[o]=ut(e,o,s,i[o],n,a,t)}}function st(t){let n,r;return!X()||!(n=e.registry.get(r=mt()))?t():(e.completed&&e.completed.add(n),e.registry.delete(r),n)}function X(t){return!!e.context&&!e.done&&(!t||t.isConnected)}function ct(e){return e.toLowerCase().replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function lt(e,t,n){let r=t.trim().split(/\s+/);for(let t=0,i=r.length;t<i;t++)e.classList.toggle(r[t],n)}function ut(e,t,n,r,i,a,o){let s,c,l,u,d;if(t===`style`)return rt(e,n,r);if(t===`classList`)return nt(e,n,r);if(n===r)return r;if(t===`ref`)a||n(e);else if(t.slice(0,3)===`on:`){let i=t.slice(3);r&&e.removeEventListener(i,r,typeof r!=`function`&&r),n&&e.addEventListener(i,n,typeof n!=`function`&&n)}else if(t.slice(0,10)===`oncapture:`){let i=t.slice(10);r&&e.removeEventListener(i,r,!0),n&&e.addEventListener(i,n,!0)}else if(t.slice(0,2)===`on`){let i=t.slice(2).toLowerCase(),a=Ke.has(i);if(!a&&r){let t=Array.isArray(r)?r[0]:r;e.removeEventListener(i,t)}(a||n)&&(tt(e,i,n,a),a&&G([i]))}else if(t.slice(0,5)===`attr:`)K(e,t.slice(5),n);else if(t.slice(0,5)===`bool:`)et(e,t.slice(5),n);else if((d=t.slice(0,5)===`prop:`)||(l=He.has(t))||!i&&((u=Ge(t,e.tagName))||(c=Ve.has(t)))||(s=e.nodeName.includes(`-`)||`is`in o)){if(d)t=t.slice(5),c=!0;else if(X(e))return n;t===`class`||t===`className`?q(e,n):s&&!c&&!l?e[ct(t)]=n:(t===`value`||t===`defaultValue`)&&(e.nodeName===`INPUT`||e.nodeName===`TEXTAREA`)?e[u||t]=n??``:e[u||t]=n}else{let r=i&&t.indexOf(`:`)>-1&&Je[t.split(`:`)[0]];r?$e(e,r,t,n):K(e,Ue[t]||t,n)}return n}function dt(t){if(e.registry&&e.events&&e.events.find(([e,n])=>n===t))return;let n=t.target,r=`$$${t.type}`,i=t.target,a=t.currentTarget,o=e=>Object.defineProperty(t,"target",{configurable:!0,value:e}),s=()=>{let e=n[r];if(e&&!n.disabled){let i=n[`${r}Data`];if(i===void 0?e.call(n,t):e.call(n,i,t),t.cancelBubble)return}return n.host&&typeof n.host!=`string`&&!n.host._$host&&n.contains(t.target)&&o(n.host),!0},c=()=>{for(;s()&&(n=n._$host||n.parentNode||n.host););};Object.defineProperty(t,"currentTarget",{configurable:!0,get(){return n||document}}),e.registry&&!e.done&&(e.done=_$HY.done=!0);try{if(t.composedPath){let e=t.composedPath();o(e[0]);for(let t=0;t<e.length-2&&(n=e[t],s());t++){if(n._$host){n=n._$host,c();break}if(n.parentNode===a)break}}else c();o(i)}finally{t=n=null}}function Z(e,t,n,r,i){let a=X(e);if(a){!n&&(n=[...e.childNodes]);let t=[];for(let e=0;e<n.length;e++){let r=n[e];r.nodeType===8&&r.data.slice(0,2)===`!$`?r.remove():t.push(r)}n=t}for(;typeof n==`function`;)n=n();if(t===n)return n;let o=typeof t,s=r!==void 0;if(e=s&&n[0]&&n[0].parentNode||e,o===`string`||o===`number`){if(a||o===`number`&&(t=t.toString(),t===n))return n;if(s){let i=n[0];i&&i.nodeType===3?i.data!==t&&(i.data=t):i=document.createTextNode(t),n=Q(e,n,r,i)}else n=n!==``&&typeof n==`string`?e.firstChild.data=t:e.textContent=t}else if(t==null||o===`boolean`){if(a)return n;n=Q(e,n,r)}else if(o===`function`)return S(()=>{let i=t();for(;typeof i==`function`;)i=i();n=Z(e,i,n,r)}),()=>n;else if(Array.isArray(t)){let o=[],c=n&&Array.isArray(n);if(ft(o,t,n,i))return S(()=>n=Z(e,o,n,r,!0)),()=>n;if(a){if(!o.length)return n;if(r===void 0)return n=[...e.childNodes];let t=o[0];if(t.parentNode!==e)return n;let i=[t];for(;(t=t.nextSibling)!==r;)i.push(t);return n=i}if(o.length===0){if(n=Q(e,n,r),s)return n}else c?n.length===0?pt(e,o,r):Xe(e,n,o):(n&&Q(e),pt(e,o));n=o}else if(t.nodeType){if(a&&t.parentNode)return n=s?[t]:t;if(Array.isArray(n)){if(s)return n=Q(e,n,r,t);Q(e,n,null,t)}else n==null||n===``||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}return n}function ft(e,t,n,r){let i=!1;for(let a=0,o=t.length;a<o;a++){let o=t[a],s=n&&n[e.length],c;if(o!=null&&o!==!0&&o!==!1){if((c=typeof o)==`object`&&o.nodeType)e.push(o);else if(Array.isArray(o))i=ft(e,o,s)||i;else if(c===`function`){if(r){for(;typeof o==`function`;)o=o();i=ft(e,Array.isArray(o)?o:[o],Array.isArray(s)?s:[s])||i}else e.push(o),i=!0}else{let t=String(o);s&&s.nodeType===3&&s.data===t?e.push(s):e.push(document.createTextNode(t))}}}return i}function pt(e,t,n=null){for(let r=0,i=t.length;r<i;r++)e.insertBefore(t[r],n)}function Q(e,t,n,r){if(n===void 0)return e.textContent=``;let i=r||document.createTextNode(``);if(t.length){let r=!1;for(let a=t.length-1;a>=0;a--){let o=t[a];if(i!==o){let t=o.parentNode===e;!r&&!a?t?e.replaceChild(i,o):e.insertBefore(i,n):t&&o.remove()}else r=!0}}else e.insertBefore(i,n);return[i]}function mt(){return e.getNextContextId()}var ht=`http://www.w3.org/2000/svg`;function gt(e,t=!1,n=void 0){return t?document.createElementNS(ht,e):document.createElement(e,{is:n})}function _t(t){let{useShadow:n}=t,r=document.createTextNode(``),i=()=>t.mount||document.body,a=k(),o,s=!!e.context;return C(()=>{s&&(k().user=s=!1),o||=ae(a,()=>w(()=>t.children));let e=i();if(e instanceof HTMLHeadElement){let[t,n]=x(!1);b(n=>Y(e,()=>t()?n():o(),null)),D(()=>n(!0))}else{let i=gt(t.isSVG?`g`:`div`,t.isSVG),a=n&&i.attachShadow?i.attachShadow({mode:`open`}):i;Object.defineProperty(i,"_$host",{get(){return r.parentNode},configurable:!0}),Y(a,o),e.appendChild(i),t.ref&&t.ref(i),D(()=>e.contains(i)&&e.removeChild(i))}},void 0,{render:!s}),r}function vt(t,n){let r=w(t);return w(()=>{let t=r();switch(typeof t){case`function`:return T(()=>t(n));case`string`:let r=qe.has(t),i=e.context?st():gt(t,r,T(()=>n.is));return at(i,n,r),i}})}function yt(e){let[,t]=Ae(e,[`component`]);return vt(()=>e.component,t)}var bt=class extends Error{status;code;field;hint;details;constructor(e,t){super(t),this.status=e}},xt=class extends Error{cause;name=`NetworkError`;constructor(e){super(`Can't reach the hub: the connection dropped. Check your network and try again.`),this.cause=e}},St;function Ct(e){St=e}async function wt(e,{method:t=`GET`,json:n,body:r,headers:i={},signal:a,keepalive:o}={}){let s={method:t,credentials:`same-origin`,headers:{...i},signal:a,keepalive:o};n===void 0?r!==void 0&&(s.body=r):(s.headers[`content-type`]=`application/json`,s.body=JSON.stringify(n));let c;try{c=await fetch(e,s)}catch(e){throw e instanceof TypeError?new xt(e):e}if(!c.ok){let e=await c.json().catch(()=>({}));c.status===401&&St?.();let t=e.error&&typeof e.error==`object`?e.error:e,n=typeof e.error==`string`?e.error:typeof t.message==`string`?t.message:``,r=new bt(c.status,n||`HTTP ${c.status}`);throw typeof t.field==`string`&&(r.field=t.field),typeof t.code==`string`&&(r.code=t.code),typeof t.hint==`string`&&(r.hint=t.hint),e.error&&typeof e.error==`object`&&(r.details=t),r}return c}var Tt=async e=>(await wt(e)).json(),Et=encodeURIComponent,Dt=e=>`/api/sessions/${Et(e)}`,Ot=e=>e instanceof Error?e.message:String(e),kt=e=>typeof e==`object`&&!!e&&!Array.isArray(e),At=/^[A-Za-z0-9_.:@/+~-]{1,300}$/,jt=/[\p{Cc}\p{Cf}\u2028\u2029]/u,Mt={workspace:`ws`,binding:`wsb`,member:`wsm`,assignment:`asg`,supervision:`sup`,checkpoint:`chk`,sideChat:`chat`,profile:`prof`,artifact:`art`,revision:`rev`,blob:`blob`,aiJob:`job`,team:`team`,staffing:`stf`,intake:`itk`},Nt=/^[A-Za-z0-9]{16,32}$/;function Pt(e,t){if(typeof t!=`string`)return!1;let n=`${Mt[e]}_`;return t.startsWith(n)&&Nt.test(t.slice(n.length))}var Ft=/^[a-z0-9-]{2,40}$/,It=e=>typeof e==`string`&&Ft.test(e),Lt=(e,t=120)=>typeof e==`string`&&e.trim().length>0&&e.length<=t&&!jt.test(e),Rt=4e3,zt=/[\u0000-\u0009\u000b-\u001f\u007f\u2028\u2029\u200b-\u200f\u202a-\u202e\u2066-\u2069]/,Bt=(e,t=Rt)=>typeof e==`string`&&e.length<=t&&!zt.test(e);function Vt(e){if(e!==void 0){if(!Array.isArray(e)||e.length>32)return`tags must be a list of at most 32`;if(!e.every(It))return`each tag must be 2–40 lowercase letters, digits or dashes`;if(new Set(e).size!==e.length)return`tags must be unique`}}function Ht(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return`metadata must be an object`;let t=Object.entries(e);if(t.length>32)return`metadata has more than 32 keys`;for(let[e,n]of t){if(!It(e))return`metadata key ${JSON.stringify(String(e).slice(0,50))} must be a slug`;if(!Lt(n,200))return`metadata.${e} must be 1–200 characters of text`}}var $=e=>e.signedIn,Ut=[{id:`sessions`,label:`All sessions`,icon:`home`,route:`/`,order:10,available:e=>$(e)?!0:`hidden`},{id:`concierge`,label:`Concierge`,icon:`spark`,route:`/concierge`,order:15,available:e=>$(e)&&e.concierge!==void 0&&e.concierge!==`disabled`?!0:`hidden`},{id:`artifacts`,label:`Artifacts`,icon:`file`,route:`/artifacts`,order:20,available:e=>$(e)?!0:`hidden`},{id:`teams`,label:`Teams`,icon:`team`,route:`/teams`,order:25,available:e=>$(e)?!0:`hidden`},{id:`watchtower`,label:`Watchtower`,icon:`watchtower`,route:`/watchtower`,order:30,available:e=>$(e)?!0:`hidden`},{id:`profiles`,label:`Agent profiles`,icon:`settings`,route:`/profiles`,order:40,available:e=>$(e)?!0:`hidden`}],Wt={"/birds-eye":`/watchtower`};function Gt(e,t=``,n=``){for(let[r,i]of Object.entries(Wt))if(e===r||e.startsWith(`${r}/`))return`${i}${e.slice(r.length)}${t}${n}`}function Kt(e,t){try{return e.available(t)}catch{return`hidden`}}function qt(e,t=Ut){return[...t].sort((e,t)=>e.order-t.order).flatMap(t=>{let n=Kt(t,e);return n===`hidden`?[]:[{dest:t,enabled:n===!0}]})}var Jt=(e,t)=>Kt(e,t)===!0?`ok`:`unavailable`;function Yt(e,t=Ut){for(let n of t)if(n.route!==`/`&&(e===n.route||e.startsWith(`${n.route}/`)))try{return{dest:n,rest:e.slice(n.route.length).split(`/`).filter(Boolean).map(decodeURIComponent)}}catch{return}}function Xt(e,t=Ut){return e===`/`?t.find(e=>e.route===`/`)?.id:Yt(e,t)?.dest.id}function Zt(e){return e.supported?e.permission===`denied`?{state:`blocked`,message:`Notifications are blocked for this site. Allow them in the browser's site settings, then reload.`,action:`none`,warn:!0}:e.permission==="default"?{state:`off`,message:`Notifications are off on this device.`,action:`enable`,warn:!0}:!e.worker||!e.endpoint||!e.hubSubscribed?{state:`repair`,message:`Allowed, but this device is not subscribed on this hub, so nothing will arrive (this happens after the hub moves to a new address). Enable again to fix it.`,action:`enable`,warn:!0}:{state:`on`,message:`On for this device.`,action:`disable`,warn:!1}:{state:`unsupported`,message:`This browser can't get notifications here. On iPhone, add the app to the Home Screen first (iOS 16.4+); everywhere else the hub must be on https.`,action:`none`,warn:!0}}var Qt=e=>e.supported&&e.permission===`granted`&&(!e.endpoint||!e.hubSubscribed);function $t(e){if(e.subscriptions===0)return{ok:!1,text:`This device is not subscribed; enable notifications first`};if(e.sent>0)return{ok:!0,text:e.sent===1?`Test notification sent to this device`:`Test notification sent (${e.sent} subscriptions)`};let t=e.failed[0];return t?{ok:!1,text:`Test failed: ${t.host} ${t.status===void 0?`did not answer`:`answered ${t.status}`}`}:{ok:!1,text:`Test failed`}}var en=[1,2,5,10,15,30,60],tn=[{title:`Needs you`,kinds:[{key:`question`,label:`Question`,description:`A session or subagent asks you something.`},{key:`permission`,label:`Needs permission`,description:`A tool call waits for your OK (answer from the notification).`},{key:`decision`,label:`Decision`,description:`A session asks you to decide (hub ask @me), with options and a recommendation.`},{key:`message`,label:`Message`,description:`Agent messaging needs you: a message to you, an unanswered ask, or sessions looping.`},{key:`concierge`,label:`Concierge`,description:`Your Concierge needs you or has news: its questions, permissions, decisions, messages and spoken replies.`}]},{title:`Session`,kinds:[{key:`done`,label:`All done`,description:`The session and all its subagents and scripts finished; nothing waits on you. Once per run.`},{key:`failed`,label:`Failed`,description:`The session's run failed (provider or tool error), with the reason.`},{key:`providerError`,label:`Model provider error`,description:`Quota, budget, auth or model-routing errors of the session or a subagent; once per run.`},{key:`turn`,label:`Turn finished`,description:`Every reply of the main session, also the short ones between subagents. Noisy.`},{key:`stopped`,label:`Stopped`,description:`A run stopped without you asking (OpenCode shut down, inactivity).`},{key:`retry`,label:`Retrying`,description:`The provider failed and OpenCode is retrying the request.`}]},{title:`Subagents`,kinds:[{key:`subagentDone`,label:`Subagent finished`,description:`Each subagent that finishes, by name.`},{key:`subagentFailed`,label:`Subagent failed`,description:`Each subagent that fails, with the reason.`}]},{title:`Scripts and tools`,kinds:[{key:`jobDone`,label:`Script finished`,description:`A background shell or terminal exited 0.`},{key:`jobFailed`,label:`Script failed`,description:`A background shell or terminal exited non-zero, was killed or timed out.`},{key:`longTool`,label:`Long tool finished`,description:`A tool call that ran 30 seconds or more ended.`}]},{title:`Voice`,kinds:[{key:`say`,label:`Spoken reply`,description:`Voice mode replies while no device shows the session.`},{key:`handoff`,label:`Hand-off`,description:`A session sent to this device from the terminal (ignores quiet hours).`}]},{title:`Activity digest`,kinds:[{key:`activity`,label:`Activity`,description:`One quiet, self-replacing summary per session: subagents, long tools, scripts, idle.`}]}],nn=tn.flatMap(e=>e.kinds);function rn(e){let t=nn.filter(t=>e[t.key]).map(e=>e.label);return t.length?`You'll get: ${t.join(`, `)}.`:`You'll get no notifications on this device.`}function an(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`}catch{return`UTC`}}var on=[{id:`general`,label:`General`,description:`Account, theme, text size and the Hub app`},{id:`notifications`,label:`Notifications`,description:`This device's notifications, what to notify about, quiet hours`},{id:`voice`,label:`Voice & speech`,description:`Voice mode, mic sensitivity, speech-to-text and text-to-speech`},{id:`machines`,label:`Machines & devices`,description:`Connected machines, approvals, signed-in browsers and apps`},{id:`agents`,label:`Agents & access`,description:`App tokens, acting switches, grants and agent activity`},{id:`concierge`,label:`Concierge`,description:`Your hub-managed assistant: machine, directory, model and its grant`},{id:`teams`,label:`Teams`,description:`Team isolation: what team members see`},{id:`admin`,label:`Admin`,description:`Users, all machines, approvals and the audit log`,admin:!0}],sn=e=>on.filter(t=>e||!t.admin);function cn(e){if(e!==`/settings`&&!e.startsWith(`/settings/`))return;let t=e.slice(10).split(`/`)[0]??``;if(!t)return{};try{return{section:decodeURIComponent(t)}}catch{return{section:t}}}function ln(e,t){return e===void 0?t.phone?`list`:`general`:sn(t.admin).find(t=>t.id===e)?.id}var un={account:`general`,appearance:`general`,notifications:`notifications`,voice:`voice`,speech:`voice`,machines:`machines`,devices:`machines`,agents:`agents`,admin:`admin`};function dn(e){let t=e.replace(/^#/,``);if(!t)return;let n=un[t];if(n)return`/settings/${n}#${t}`;if(on.some(e=>e.id===t))return`/settings/${t}`}var fn=[{id:`account`,section:`general`,label:`Account`,description:`Who you are signed in as; sign out of this device`,keywords:`sign out logout user email`},{id:`set-theme`,section:`general`,label:`Color theme`,description:`Light, dark or the system's theme`,keywords:`appearance light dark system mode`},{id:`set-text-size`,section:`general`,label:`Text size`,description:`How big text is on this device`,keywords:`appearance font scale zoom`},{id:`add-app`,section:`general`,label:`Add the Hub app`,description:`Link the Hub app on a phone or tablet with a QR code`,keywords:`mobile android ios install pair link`},{id:`notifications`,section:`notifications`,label:`Notifications on this device`,description:`Enable or turn off push notifications here; permission and subscription status`,keywords:`push enable subscribe permission service worker`},{id:`notify-test`,section:`notifications`,label:`Send test notification`,description:`Check that notifications reach this device`,keywords:`push try`},{id:`quiet-hours`,section:`notifications`,label:`Quiet hours`,description:`No notifications at night (hand-offs still come through)`,keywords:`do not disturb night sleep time`},{id:`set-voice-speed`,section:`voice`,label:`Voice speed`,description:`How fast replies are spoken`,keywords:`rate tts`},{id:`set-sensitivity`,section:`voice`,label:`Mic sensitivity`,description:`How sure Voice mode must be that you are speaking to it`,keywords:`microphone noise vad`},{id:`set-cues`,section:`voice`,label:`Progress cues`,description:`Tones and short acknowledgements while the agent works`,keywords:`sounds acknowledgement`},{id:`set-background`,section:`voice`,label:`Keep listening when the screen is off`,description:`Lock-screen controls and listening with the screen off`,keywords:`background lock screen`},{id:`speech`,section:`voice`,label:`Speech`,description:`Speech-to-text and text-to-speech provider, model, voice and API keys`,keywords:`stt tts transcription openrouter openai key`},{id:`machines`,section:`machines`,label:`Machines`,description:`Computers running OpenCode connected to this hub; approve or revoke them`,keywords:`computer approve enrollment revoke opencode`},{id:`devices`,section:`machines`,label:`Devices`,description:`Browsers and the Hub app signed in to your account; revoke them`,keywords:`browser phone sessions revoke sign out`},{id:`agents`,section:`agents`,label:`Acting switch`,description:`Whether sessions and apps may act for you at all`,keywords:`pause kill switch acting`},{id:`app-tokens`,section:`agents`,label:`App tokens`,description:`Tokens for MCP gateways, CLIs and other apps, with their scopes`,keywords:`api key token scopes mcp cli`},{id:`grants`,section:`agents`,label:`Grants`,description:`What sessions and apps may approve, deny, answer, prompt or stop for you`,keywords:`permissions delegate allow`},{id:`agent-activity`,section:`agents`,label:`Agent activity`,description:`What agents did for you (the agent audit)`,keywords:`audit log history`},{id:`concierge`,section:`concierge`,label:`Concierge`,description:`Turn the Concierge on or off, pick its machine and directory, restart it`,keywords:`assistant butler watch sessions`},{id:`concierge-grant`,section:`concierge`,label:`Concierge grant`,description:`What the Concierge may do for you without asking; renew or remove it`,keywords:`permissions approve deny preset`},{id:`team-isolation`,section:`teams`,label:`Team isolation`,description:`Team members see only their teams' sessions, not your other sessions`,keywords:`teams privacy hide members`}],pn=[{id:`admin`,section:`admin`,label:`Users`,description:`Everyone on this hub: roles, disable, remove`,keywords:`admin accounts people`},{id:`admin-machines`,section:`admin`,label:`All machines`,description:`Every machine connected to this hub, by owner`,keywords:`admin revoke`},{id:`admin-audit`,section:`admin`,label:`Audit log`,description:`Who changed what on this hub`,keywords:`admin history`}],mn=(e,t)=>({id:`pref-${e.key}`,section:`notifications`,label:e.label,description:e.description,keywords:`notify ${t}`});function hn(e){return[...fn,...tn.flatMap(e=>e.kinds.map(t=>mn(t,e.title))),...e?pn:[]]}var gn=e=>on.find(t=>t.id===e)?.label??e;function _n(e,t){let n=e.trim().toLowerCase();if(!n)return[];let r=n.split(/\s+/),i=e=>{let t=e.label.toLowerCase();return t.startsWith(n)?0:t.includes(n)?1:r.every(e=>t.includes(e))?2:3};return t.filter(e=>{let t=`${e.label} ${e.description} ${e.keywords??``} ${gn(e.section)}`.toLowerCase();return r.every(e=>t.includes(e))}).map((e,t)=>({e,i:t,r:i(e)})).sort((e,t)=>e.r-t.r||e.i-t.i).map(e=>e.e)}function vn(e,t){let n=e.filter(e=>e.key in t);if(!n.length)return``;let r=n.filter(e=>t[e.key]);return r.length===n.length?`All on`:r.length?`${r.length} of ${n.length} on: ${r.map(e=>e.label).join(`, `)}`:`All off`}var yn=e=>e&&e.startsWith(`/`)&&!e.startsWith(`//`)&&!e.includes(`\\`)?e:`/`;function bn(e){let t=e.pathname,n=e.searchParams;if(t===`/pair`)return{name:`pair`,next:yn(n.get(`next`)),error:n.get(`error`)??``};if(t===`/approve`)return{name:`approve`,code:n.get(`code`)??``};if(t===`/new`)return{name:`new`,machine:n.get(`machine`)??void 0,dir:n.get(`dir`)??void 0,key:n.get(`key`)??void 0};if(t===`/panes`)return{name:`panes`};if(t===`/concierge`||t.startsWith(`/concierge/`))return{name:`concierge`};let r=cn(t);if(r)return{name:`settings`,...r};let i=Yt(t);if(i)return{name:`feature`,id:i.dest.id,rest:i.rest};let a=/^\/s\/([^/]+)$/.exec(t);if(a)try{return{name:`session`,id:decodeURIComponent(a[1])}}catch{return{name:`home`}}return{name:`home`}}function xn(){let e=(location.pathname===`/settings`?dn(location.hash):void 0)??Gt(location.pathname,location.search,location.hash);return e&&history.replaceState(history.state,``,e),new URL(location.href)}var[Sn,Cn]=x(xn()),wn=Sn,Tn=()=>bn(Sn()),En=0;function Dn(e,{replace:t=!1}={}){let n=new URL(e,location.origin);n.pathname+n.search+n.hash!==location.pathname+location.search+location.hash&&(history[t?`replaceState`:`pushState`]({},``,n.pathname+n.search+n.hash),t||En++),Cn(xn())}function On(e=`/`){En>0?history.back():Dn(e)}window.addEventListener(`popstate`,()=>{En=Math.max(0,En-1),Cn(xn())}),document.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[href]`);if(!t||t.target||t.hasAttribute(`download`)||e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let n=t.getAttribute(`href`)??``;!n.startsWith(`/`)||n.startsWith(`//`)||n.startsWith(`/auth/`)||n.startsWith(`/api/`)||(e.preventDefault(),Dn(n))});var kn=()=>new Set;function An(e){kn=e}var jn=e=>kn().has(e),Mn=e=>kn().has(e)?`/concierge`:`/s/${encodeURIComponent(e)}`,[Nn,Pn]=x(),Fn=Nn,In=0,Ln;function Rn(e,t=``,n){let r=++In;Pn({id:r,text:e,kind:t,action:n}),clearTimeout(Ln),Ln=setTimeout(()=>Nn()?.id===r&&Pn(void 0),n||t?8e3:4e3)}var zn=()=>Pn(void 0);function Bn(e){let t=[];return{ask(n){return new Promise(r=>{t.push({request:n,resolve:r}),t.length===1&&e(n)})},current:()=>t[0]?.request,settle(n){let r=t.shift();r&&(r.resolve(n),e(t[0]?.request))}}}function Vn(e){let t=e.trim(),n=t.indexOf(`
2
+
3
+ `);if(n>=0)return{title:t.slice(0,n).trim(),message:t.slice(n+2).trim()};let r=/\?\s/.exec(t);return r?{title:t.slice(0,r.index+1),message:t.slice(r.index+1).trim()}:{title:t,message:``}}var Hn=e=>e.danger?`cancel`:`primary`,Un=e=>e.repeat&&(e.key===`Enter`||e.key===` `);function Wn(e,t){return Array.from(e.querySelectorAll(`dialog:modal`)).some(e=>!t||!e.contains(t))}var Gn=W(`<dialog class="dialog confirm-dialog"role=alertdialog aria-modal=true aria-labelledby=confirm-dialog-title data-confirm-dialog>`),Kn=W(`<p id=confirm-dialog-message class=confirm-message>`),qn=W(`<form method=dialog><div class=dialog-head><h2 id=confirm-dialog-title></h2></div><div class=dialog-body><div class=dialog-actions><button type=button class=btn data-confirm-cancel></button><button type=submit data-confirm-primary>`),[Jn,Yn]=x(),Xn=Bn(Yn);function Zn(e){return Xn.ask(e)}var Qn=e=>Wn(document,e??void 0);function $n(e,t,n={}){let{title:r,message:i}=Vn(e);return Zn({title:r,message:i,confirm:t,...n})}var er=`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function tr(){let e,t,n,r=null;C(()=>{let i=Jn();e&&(i&&!e.open?(r=document.activeElement,e.showModal()):!i&&e.open&&(e.close(),r?.isConnected&&r.focus(),r=null),i&&queueMicrotask(()=>(Hn(i)===`cancel`?n:t)?.focus()))});let i=e=>Xn.settle(e);return(()=>{var r=Gn();r.$$keydown=t=>{if(Un(t)){t.preventDefault();return}if(t.key!==`Tab`||!e)return;let n=[...e.querySelectorAll(er)];if(!n.length)return;let r=n[0],i=n[n.length-1];t.shiftKey&&document.activeElement===r?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),r.focus())},r.$$click=t=>t.target===e&&i(!1),r.addEventListener(`cancel`,e=>{e.preventDefault(),i(!1)});var a=e;return typeof a==`function`?J(a,r):e=r,Y(r,V(U,{get when(){return Jn()},children:e=>(()=>{var r=qn(),a=r.firstChild,o=a.firstChild,s=a.nextSibling,c=s.firstChild,l=c.firstChild,u=l.nextSibling;r.addEventListener(`submit`,e=>{e.preventDefault(),i(!0)}),Y(o,()=>e().title),Y(s,V(U,{get when(){return e().message},get children(){var t=Kn();return Y(t,()=>e().message),t}}),c),l.$$click=()=>i(!1);var d=n;typeof d==`function`?J(d,l):n=l,Y(l,()=>e().cancel??`Cancel`);var f=t;return typeof f==`function`?J(f,u):t=u,Y(u,()=>e().confirm),S(()=>q(u,`btn primary${e().danger?` danger`:``}`)),r})()})),S(()=>K(r,`aria-describedby`,Jn()?.message?`confirm-dialog-message`:void 0)),r})()}G([`click`,`keydown`]);var nr=W(`<svg viewBox="0 0 24 24"aria-hidden=true>`),rr=W(`<svg><path></svg>`,!1,!0,!1),ir=W(`<span class=voice-dot role=img aria-label="Voice mode on"title="Voice mode on">`),ar=W(`<span class=spinner>`),or=W(`<span role=img>`),sr=W(`<span class=status-dot>`),cr=W(`<button type=button>`),lr=W(`<button type=button aria-haspopup=menu>`),ur=W(`<div class=menu role=menu>`),dr=W(`<div class=menu-sep role=separator>`),fr=W(`<div class=menu-section>`),pr=W(`<span class=menu-hint>`),mr=W(`<kbd class=menu-key>`),hr=W(`<button type=button><span class=menu-check></span><span class=menu-label>`),gr=W(`<div class=dialog-head><h2>`),_r=W(`<div class=dialog-body>`),vr=W(`<dialog>`),yr=W(`<span class=error-badge role=img>!`),br={menu:[`M4 6h16`,`M4 12h16`,`M4 18h16`],sidebar:[`M4 5h16v14H4z`,`M9 5v14`],rail:[`M4 5h16v14H4z`,`M15 5v14`],plus:[`M12 5v14`,`M5 12h14`],file:[`M6 3h8l4 4v14H6z`,`M14 3v4h4`],more:[`M5 12h.01`,`M12 12h.01`,`M19 12h.01`],search:[`M11 4a7 7 0 1 0 0 14a7 7 0 0 0 0-14z`,`M20 20l-4-4`],mic:[`M12 3a3 3 0 0 1 3 3v6a3 3 0 0 1-6 0V6a3 3 0 0 1 3-3z`,`M5 11a7 7 0 0 0 14 0`,`M12 18v3`],wave:[`M3 12h2`,`M7 8v8`,`M11 5v14`,`M15 8v8`,`M19 11v2`],stop:[`M7 7h10v10H7z`],send:[`M12 19V5`,`M5 12l7-7 7 7`],chevron:[`M9 6l6 6-6 6`],down:[`M6 9l6 6 6-6`],close:[`M6 6l12 12`,`M18 6L6 18`],back:[`M15 5l-7 7 7 7`],settings:[`M4 7h10M18 7h2M4 17h4M12 17h8`,`M16 5v4`,`M10 15v4`],branch:[`M6 3v12`,`M18 9a3 3 0 1 0 0-6a3 3 0 0 0 0 6z`,`M6 21a3 3 0 1 0 0-6a3 3 0 0 0 0 6z`,`M18 9a9 9 0 0 1-9 9`],server:[`M4 5h16v6H4z`,`M4 13h16v6H4z`,`M8 8h.01`,`M8 16h.01`],diff:[`M12 3v6`,`M9 6h6`,`M9 18h6`,`M5 3h14v18H5z`],pin:[`M12 17v5`,`M8 3h8l-1 6 3 3H6l3-3z`],muted:[`M12 3a3 3 0 0 1 3 3v6a3 3 0 0 1-6 0V6a3 3 0 0 1 3-3z`,`M5 11a7 7 0 0 0 14 0`,`M4 4l16 16`],home:[`M4 11l8-7 8 7`,`M6 10v10h12V10`],cloud:[`M7 18h10a4 4 0 0 0 .5-7.97A6 6 0 0 0 6.1 9.1A4.5 4.5 0 0 0 7 18z`],folder:[`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`],bell:[`M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9`,`M10.3 21a1.94 1.94 0 0 0 3.4 0`],watchtower:[`M6 7l6-4 6 4`,`M8 7h8v4H8z`,`M9 11l-2 10`,`M15 11l2 10`,`M8.2 15h7.6`],copy:[`M9 9h11v11H9z`,`M5 15H4V4h11v1`],fork:[`M6 3v5a6 6 0 0 0 6 6`,`M18 3v5a6 6 0 0 1-6 6v7`,`M4 5l2-2 2 2`,`M16 5l2-2 2 2`],undo:[`M9 14L4 9l5-5`,`M4 9h11a5 5 0 0 1 0 10h-3`],download:[`M12 4v11`,`M7 10l5 5 5-5`,`M5 20h14`],edit:[`M4 20h4L19 9l-4-4L4 16z`,`M13 7l4 4`],info:[`M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0-18z`,`M12 11v5`,`M12 8h.01`],check:[`M5 12l5 5 9-10`],spark:[`M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z`,`M19 16l.7 1.8 1.8.7-1.8.7L19 21l-.7-1.8-1.8-.7 1.8-.7z`],split:[`M4 5h16v14H4z`,`M12 5v14`],expand:[`M14 4h6v6`,`M20 4l-7 7`,`M10 20H4v-6`,`M4 20l7-7`],archive:[`M4 5h16v4H4z`,`M6 9v10h12V9`,`M10 13h4`],wrap:[`M4 6h16`,`M4 12h13a3 3 0 0 1 0 6h-4`,`M15 16l-2 2 2 2`,`M4 18h5`],lock:[`M6 11h12v9H6z`,`M8 11V8a4 4 0 0 1 8 0v3`],code:[`M9 8l-4 4 4 4`,`M15 8l4 4-4 4`],image:[`M4 5h16v14H4z`,`M4 16l5-5 4 4 2-2 5 5`,`M15 9h.01`],table:[`M4 5h16v14H4z`,`M4 10h16`,`M4 15h16`,`M10 5v14`],chart:[`M4 20h16`,`M7 16v-5`,`M12 16V7`,`M17 16v-8`],grid:[`M4 4h7v7H4z`,`M13 4h7v7h-7z`,`M4 13h7v7H4z`,`M13 13h7v7h-7z`],stack:[`M4 5h16v14H4z`,`M4 12h16`],grip:[`M9 6h.01`,`M15 6h.01`,`M9 12h.01`,`M15 12h.01`,`M9 18h.01`,`M15 18h.01`],app:[`M4 5h16v14H4z`,`M4 9h16`,`M7 7h.01`,`M10 7h.01`],doc:[`M6 3h8l4 4v14H6z`,`M14 3v4h4`,`M9 12h6`,`M9 16h6`],team:[`M9 11a3 3 0 1 0 0-6a3 3 0 0 0 0 6z`,`M3 20a6 6 0 0 1 12 0`,`M16 11a2.5 2.5 0 1 0 0-5`,`M17 14.2a5 5 0 0 1 4 4.8`]};function xr(e){return(()=>{var t=nr();return Y(t,V(Fe,{get each(){return[...br[e.name]]},children:e=>(()=>{var t=rr();return K(t,`d`,e),t})()})),S(()=>K(t,`class`,`icon ${e.class??``}`)),t})()}var Sr={idle:`Idle`,working:`Running`,blocked:`Needs you`,error:`Error`};function Cr(){return ir()}function wr(e){return(()=>{var t=or();return Y(t,V(U,{get when(){return e.state===`working`},get fallback(){return sr()},get children(){return ar()}})),S(n=>{var r=`status ${e.state} ${e.class??``}`,i=Sr[e.state],a=Sr[e.state];return r!==n.e&&q(t,n.e=r),i!==n.t&&K(t,`aria-label`,n.t=i),a!==n.a&&K(t,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}function Tr(e){let[t,n]=Ae(e,[`icon`,`label`,`class`]);return(()=>{var e=cr();return at(e,ke({get class(){return`icon-btn ${t.class??``}`},get"aria-label"(){return t.label},get title(){return t.label}},n),!1,!0),Y(e,V(xr,{get name(){return t.icon}})),e})()}function Er(e){let[t,n]=x(!1),r,i,[a,o]=x({top:0,left:0,right:0,bottom:0}),s=()=>{let e=r.getBoundingClientRect();o({top:e.bottom+4,left:e.left,right:window.innerWidth-e.right,bottom:window.innerHeight-e.top+4})},c=()=>n(!1),l=e=>{if(!t())return;let n=e.target;!r.contains(n)&&!i?.contains(n)&&c()},u=n=>{if(t()){if(n.key===`Escape`){if(Qn(i??r))return;c(),r.focus()}else if(/^[1-9]$/.test(n.key)&&!(n.target instanceof HTMLInputElement||n.target instanceof HTMLTextAreaElement)){let t=e.items().filter(e=>typeof e==`object`&&`run`in e&&!e.disabled)[Number(n.key)-1];t&&(n.preventDefault(),c(),t.run())}}};E(()=>{document.addEventListener(`mousedown`,l),document.addEventListener(`keydown`,u)}),D(()=>{document.removeEventListener(`mousedown`,l),document.removeEventListener(`keydown`,u)});let d=()=>{let t=0;return e.items().map(e=>({item:e,index:typeof e==`object`&&`run`in e&&!e.disabled?++t:0}))};return[(()=>{var i=lr();i.$$click=e=>{e.stopPropagation(),e.preventDefault(),s(),n(!t())};var a=r;return typeof a==`function`?J(a,i):r=i,Y(i,()=>e.text??V(xr,{get name(){return e.icon??`more`}})),S(n=>{var r=e.class??`icon-btn`,a=e.label,o=e.label,s=t();return r!==n.e&&q(i,n.e=r),a!==n.t&&K(i,`aria-label`,n.t=a),o!==n.a&&K(i,`title`,n.a=o),s!==n.o&&K(i,`aria-expanded`,n.o=s),n},{e:void 0,t:void 0,a:void 0,o:void 0}),i})(),V(U,{get when(){return t()},get children(){return V(_t,{get children(){var t=ur(),n=i;return typeof n==`function`?J(n,t):i=t,Y(t,V(Fe,{get each(){return d()},children:({item:e,index:t})=>e===`sep`?dr():`section`in e?(()=>{var t=fr();return Y(t,()=>e.section),t})():(()=>{var n=hr(),r=n.firstChild,i=r.nextSibling;return n.$$click=t=>{t.stopPropagation(),c(),e.run()},Y(r,()=>e.checked?`✓`:``),Y(i,()=>e.label),Y(n,V(U,{get when(){return e.hint},get children(){var t=pr();return Y(t,()=>e.hint),t}}),null),Y(n,V(U,{when:t>0&&t<10,get children(){var e=mr();return Y(e,t),e}}),null),S(t=>{var r=e.checked===void 0?`menuitem`:`menuitemradio`,i=e.checked,a=`menu-item${e.danger?` danger`:``}`,o=e.disabled;return r!==t.e&&K(n,`role`,t.e=r),i!==t.t&&K(n,`aria-checked`,t.t=i),a!==t.a&&q(n,t.a=a),o!==t.o&&(n.disabled=t.o=o),t},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()})),S(n=>rt(t,{...e.up?{bottom:`${a().bottom}px`}:{top:`${a().top}px`},...e.align===`left`?{left:`${a().left}px`}:{right:`${a().right}px`}},n)),t}})}})]}function Dr(e){let t;return C(()=>{let n=e.open;t&&(n&&!t.open?t.showModal():!n&&t.open&&t.close())}),(()=>{var n=vr();n.$$click=n=>n.target===t&&e.onClose(),n.addEventListener(`close`,()=>e.onClose());var r=t;return typeof r==`function`?J(r,n):t=n,Y(n,V(U,{get when(){return e.open},get children(){return[(()=>{var t=gr(),n=t.firstChild;return Y(n,()=>e.title),Y(t,V(Tr,{icon:`close`,label:`Close`,onClick:()=>e.onClose()}),null),t})(),(()=>{var t=_r();return Y(t,()=>e.children),t})()]}})),S(t=>{var r=`dialog${e.wide?` wide`:``} ${e.class??``}`,i=e.title;return r!==t.e&&q(n,t.e=r),i!==t.t&&K(n,`aria-label`,t.t=i),t},{e:void 0,t:void 0}),n})()}var[Or,kr]=x(Date.now());setInterval(()=>kr(Date.now()),3e4);var Ar=Or,[jr,Mr]=x(Date.now());setInterval(()=>Mr(Date.now()),1e3);var Nr=jr;function Pr(e){return(()=>{var t=yr();return S(n=>{var r=`Error: ${e.text}`,i=e.text;return r!==n.e&&K(t,`aria-label`,n.e=r),i!==n.t&&K(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}function Fr(e,t=Or()){if(!e)return``;let n=Math.max(0,Math.round((t-e)/1e3));return n<45?`just now`:n<3600?`${Math.round(n/60)}m ago`:n<86400?`${Math.round(n/3600)}h ago`:`${Math.round(n/86400)}d ago`}var Ir=e=>String(e??``).replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e||``,Lr={herdr:`Herdr`,tui:`TUI`,background:`Background`};G([`click`]);export{bt as $,hn as A,V as At,Ut as B,je as Bt,Dn as C,Fe as Ct,vn as D,Be as Dt,An as E,U as Et,$t as F,ne as Ft,Pt as G,T as Gt,qt as H,ie as Ht,an as I,b as It,Bt as J,Lt as K,Zt as L,x as Lt,en as M,C as Mt,tn as N,w as Nt,ln as O,Le as Ot,nn as P,S as Pt,kt as Q,rn as R,Ne as Rt,wn as S,o as St,Mn as T,Re as Tt,Jt as U,D as Ut,Xt as V,ke as Vt,Rt as W,E as Wt,Vt as X,Ht as Y,At as Z,Fn as _,at as _t,Er as a,Dt as at,On as b,J as bt,wr as c,_t as ct,Ir as d,G as dt,xt as et,Ar as f,Y as ft,Qn as g,it as gt,$n as h,K as ht,Tr as i,Tt as it,sn as j,ee as jt,_n as k,re as kt,Cr as l,tt as lt,tr as m,Qe as mt,Pr as n,Et as nt,Lr as o,Ct as ot,Nr as p,Ye as pt,It as q,xr as r,Ot as rt,Sr as s,yt as st,Dr as t,wt as tt,Fr as u,q as ut,zn as v,rt as vt,Tn as w,Ie as wt,jn as x,i as xt,Rn as y,W as yt,Qt as z,O as zt};
@@ -28,11 +28,11 @@
28
28
  <link rel="icon" href="/icon.svg" type="image/svg+xml" />
29
29
  <link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192" />
30
30
  <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
31
- <script type="module" crossorigin src="/assets/index-DaH5GUdV.js"></script>
32
- <link rel="modulepreload" crossorigin href="/assets/ui-C9Igxzjm.js">
33
- <link rel="modulepreload" crossorigin href="/assets/pane-layout-CKC4I00k.js">
31
+ <script type="module" crossorigin src="/assets/index-lIOfSYck.js"></script>
32
+ <link rel="modulepreload" crossorigin href="/assets/ui-Dh1-78Cl.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/pane-layout-DWXfDU-1.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/plural-Bspvoqfq.js">
35
- <link rel="stylesheet" crossorigin href="/assets/index-WWuKfWxL.css">
35
+ <link rel="stylesheet" crossorigin href="/assets/index-BabrNDB3.css">
36
36
  </head>
37
37
  <body>
38
38
  <div id="root"></div>
@@ -1 +0,0 @@
1
- import{Ct as e,Dt as t,gt as n,i as r,lt as i,r as a}from"./ui-C9Igxzjm.js";import{L as o,R as s,z as c}from"./index-DaH5GUdV.js";import{t as l}from"./ArtifactWorkbench-LkDyJ5Dv.js";var u=n(`<div class="feature-page av-page">`),d=n(`<a class="icon-btn av-back"href=/artifacts aria-label="All artifacts"title="All artifacts">`);function f(n){return(()=>{var f=u();return i(f,t(l,{get id(){return n.id},layout:`page`,get lead(){return[t(e,{get when(){return o()},get children(){return t(r,{icon:`menu`,label:`Open sidebar`,onClick:s})}}),(()=>{var e=d();return i(e,t(a,{name:`back`})),e})()]},get actions(){return t(r,{class:`av-wide`,icon:`split`,label:`Open in pane`,onClick:()=>c(n.id)})}})),f})()}export{f as default};
@@ -1 +0,0 @@
1
- import{Dt as e,ft as t,gt as n,jt as r,lt as i,r as a}from"./ui-C9Igxzjm.js";import{t as o}from"./ArtifactWorkbench-LkDyJ5Dv.js";var s=n(`<a class=icon-btn aria-label="Full page"title="Open the artifact's full page">`);function c(n){return e(o,{get id(){return n.artifactID},layout:`pane`,onArtifact:e=>n.onTitle?.(e.title||`Untitled`),get actions(){return(()=>{var o=s();return i(o,e(a,{name:`expand`})),r(()=>t(o,`href`,`/artifacts/${encodeURIComponent(n.artifactID)}`)),o})()},get trailing(){return n.paneTools}})}export{c as ArtifactPane};
@@ -1,6 +0,0 @@
1
- import{$ as e,At as t,Bt as n,Ct as r,Dt as i,H as a,Lt as o,Pt as s,Q as c,Rt as l,St as u,Tt as d,W as f,X as p,_t as m,a as h,bt as g,ct as _,ft as v,gt as y,ht as b,i as x,it as S,jt as C,kt as w,lt as T,ot as E,pt as D,r as O,st as k,tt as A,u as j,ut as M,xt as N,zt as P}from"./ui-C9Igxzjm.js";import{A as F,O as I,P as ee,U as L,V as R,k as te,z as ne}from"./index-DaH5GUdV.js";import{c as re,d as ie,f as ae,i as oe,l as se,n as ce,r as le,t as ue,u as de}from"./source-CvUHTc3O.js";var fe=`ai-actions`,pe=16,z=[`ask`,`propose-edit`,`run-action`],me=[`queued`,`running`,`succeeded`,`failed`,`cancelled`],he=[`starting`,`waiting`,`offline`,`ready`,`ended`,`failed`],ge=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/,B=e=>typeof e==`object`&&!!e&&!Array.isArray(e),V=e=>typeof e==`string`&&e.length>0,_e=e=>typeof e==`number`&&Number.isFinite(e),H=(e,t)=>typeof t==`string`&&e.includes(t),ve=e=>e.replace(/\/+$/,``).split(`/`).pop()||e;function ye(e){if(B(e)&&H(he,e.status)){if(e.kind===`session`&&V(e.address))return e;if(e.kind===`launch`&&V(e.machine)&&V(e.repo))return{harness:``,mode:`checkout`,...e}}}function be(e){if(!B(e)||!H([`pending`,`applied`,`conflict`],e.state)||!Array.isArray(e.files))return;let t=e.files.filter(e=>B(e)&&V(e.mediaType)&&_e(e.bytes)&&V(e.hash));return{state:e.state,files:t,...Array.isArray(e.keep)?{keep:e.keep.filter(V)}:{},...V(e.entry)?{entry:e.entry}:{},...V(e.appliedRevisionID)?{appliedRevisionID:e.appliedRevisionID}:{}}}function xe(e){if(!B(e)||!V(e.id)||!V(e.artifactID)||!V(e.baseRevisionID)||!_e(e.revision)||!H(me,e.state)||!H(z,e.kind)||typeof e.instruction!=`string`||!V(e.by)||!_e(e.createdAt)||!_e(e.updatedAt))return;let t=ye(e.handler);if(!t)return;let n=be(e.proposal),{proposal:r,...i}=e;return{...i,handler:t,...n?{proposal:n}:{},...typeof e.answer==`string`?{answer:e.answer}:{},...typeof e.error==`string`?{error:e.error}:{}}}function Se(e){let t=B(e)?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>xe(e)??[]):[],...V(t.cursor)?{cursor:t.cursor}:{}}}function Ce(e){let t=e?.[fe];return t?t.split(`,`).map(e=>e.trim()).filter(f).slice(0,pe):[]}var U=e=>e.state===`queued`||e.state===`running`;function W(e,t){return e.kind===`session`?e.address.startsWith(`@`)?e.address:t?.(e.sessionID??e.address)??(e.sessionID?t?.(e.address):void 0)??e.address:`New ${e.harness||`agent`} session on ${e.machine} · ${ve(e.repo)}`}function we(e,t){let n=(e,t)=>({tone:e,active:!1,text:t});if(e.state===`failed`)return n(`failed`,`Failed: ${e.error||`no reason given`}`);if(e.state===`cancelled`)return n(`cancelled`,`Cancelled`);if(e.state===`succeeded`){if(e.kind!==`propose-edit`)return n(`done`,`Answered`);let t=e.proposal;return t?t.state===`applied`?n(`done`,`Edit accepted`):t.state===`conflict`?n(`failed`,`Not accepted: the artifact changed after this edit was proposed. Request it again on the latest revision.`):n(`done`,`Proposed an edit: review it below`):n(`done`,`Finished without a proposal`)}let r=e.handler,i=(e,t)=>({tone:e,active:!0,text:t});switch(r.status){case`offline`:return r.kind===`session`?i(`offline`,`Waiting: ${W(r,t)} is offline. The request is queued and is delivered when it reconnects.`):i(`offline`,`Waiting: ${r.machine} is offline. The request is queued until it's back.`);case`starting`:return i(`waiting`,r.kind===`session`?`Sending to ${W(r,t)}…`:`Starting a session on ${r.machine}…`);case`waiting`:return i(`waiting`,r.kind===`launch`?`Waiting for a session on ${r.machine}${r.reason?`: ${r.reason}`:``}`:`Waiting for ${W(r,t)}`);case`ready`:return e.state===`running`?i(`running`,`Working: ${W(r,t)} has the request.`):i(`waiting`,`Request delivered to ${W(r,t)}; waiting for it to pick it up.`);default:return i(`waiting`,`The handler ${r.status===`ended`?`ended`:`failed`}; the job finishes shortly.`)}}function Te(e){return e===`user`?`You`:e.startsWith(`app:`)?`App ${e.slice(4)}`:`Session ${e}`}function Ee(e,t){let n=t.get(e);return n===void 0?`revision ${e.slice(-6)}`:`revision ${n}`}function De(e){let t=[],n=[];for(let r of e.sessions){if(r.archived)continue;let e=r.name?.replace(/^@+/,``)?`@${r.name.replace(/^@+/,``)}`:void 0,i=r.title||r.id,a=[r.machineName,r.harness].filter(Boolean).join(` · `),o=`${r.online?`●`:`○`} ${e?`${e} — ${i} · ${a}`:`${i} · ${a}`}${r.online?``:` (offline: queued until it reconnects)`}`,s={key:`session:${r.id}`,kind:`session`,label:o,display:e??i,online:r.online,handler:{session:r.id},search:[e,r.title,r.id,r.machineName,r.harness].filter(Boolean).join(` `).toLowerCase()};e?t.push({...s,sortName:e.toLowerCase()}):n.push(s)}t.sort((e,t)=>e.sortName<t.sortName?-1:+(e.sortName>t.sortName));let r=[...t.map(({sortName:e,...t})=>t),...n];for(let t of e.bindings){let n=e.machines.find(e=>e.id===t.machineID),i=n?.online??!1,a=`New session in ${t.label||ve(t.repo)} on ${n?.name??t.machineID}`;r.push({key:`launch:${t.id}`,kind:`launch`,label:`${a}${i?``:` (machine offline: waits for it)`}`,display:a,online:i,handler:{launch:{machine:t.machineID,repo:t.repo}},search:[a,t.repo,t.machineID].join(` `).toLowerCase()})}return r}function Oe(e,t,n){let r=t.trim().toLowerCase();return r?e.filter(e=>e.key===n||e.search.includes(r)):[...e]}function ke(e){let t=new Map;for(let n of e)n.kind===`session`&&`session`in n.handler&&n.handler.session&&t.set(n.handler.session,n.display);return t}function Ae(e){return e.kind===`session`?{session:e.sessionID??e.address}:{launch:{machine:e.machine,repo:e.repo,...e.harness?{harness:e.harness}:{},...e.model?{model:e.model}:{},...e.agent?{agent:e.agent}:{},mode:e.mode}}}function je(e){let t=e=>({ok:!1,problem:e});if(!e.handler)return t(`Choose who handles this request.`);let n=e.instruction.trim();if(e.kind===`run-action`){let r=e.actions??[];if(r.length===0)return t(`This artifact declares no AI actions.`);if(!e.action||!r.includes(e.action))return t(`Choose one of the artifact's actions.`);n||=`Run the ${e.action} action.`}if(!n)return t(e.kind===`ask`?`Write a question.`:`Describe the edit.`);if(n.length>de.aiInstructionChars)return t(`Keep it under ${de.aiInstructionChars.toLocaleString(`en-US`)} characters.`);if(ge.test(n))return t(`Use plain text (no control characters).`);let r={kind:e.kind,baseRevisionID:e.baseRevisionID,instruction:n,handler:e.handler};return e.kind===`run-action`?{ok:!0,request:{kind:`run-action`,action:e.action,baseRevisionID:e.baseRevisionID,instruction:n,handler:e.handler}}:{ok:!0,request:e.kind===`propose-edit`?{...r,apply:`manual`}:r}}var Me=4e6,Ne=3,Pe=e=>{let t=e.replace(/\r\n?/g,`
2
- `).split(`
3
- `);return t.length>1&&t[t.length-1]===``&&t.pop(),e===``?[]:t};function Fe(e,t){let n=Pe(e),r=Pe(t),i=[{type:`meta`,text:`Too large to compare line by line.`}];if(n.length+r.length>1e4)return i;let a=0;for(;a<n.length&&a<r.length&&n[a]===r[a];)a++;let o=n.length,s=r.length;for(;o>a&&s>a&&n[o-1]===r[s-1];)o--,s--;let c=o-a,l=s-a;if((c+1)*(l+1)>Me)return i;let u=l+1,d=new Uint32Array((c+1)*u);for(let e=c-1;e>=0;e--)for(let t=l-1;t>=0;t--)d[e*u+t]=n[a+e]===r[a+t]?d[(e+1)*u+t+1]+1:Math.max(d[(e+1)*u+t],d[e*u+t+1]);let f=[];for(let e=0;e<a;e++)f.push({type:`context`,text:n[e],oldNo:e+1,newNo:e+1});let p=0,m=0,h=[],g=[],_=()=>{f.push(...h,...g),h=[],g=[]};for(;p<c||m<l;)p<c&&m<l&&n[a+p]===r[a+m]?(_(),f.push({type:`context`,text:n[a+p],oldNo:a+p+1,newNo:a+m+1}),p++,m++):m<l&&(p===c||d[p*u+m+1]>=d[(p+1)*u+m])?(g.push({type:`add`,text:r[a+m],newNo:a+m+1}),m++):(h.push({type:`del`,text:n[a+p],oldNo:a+p+1}),p++);_();for(let e=0;e<n.length-o;e++)f.push({type:`context`,text:n[o+e],oldNo:o+e+1,newNo:s+e+1});let v=new Uint8Array(f.length);f.forEach((e,t)=>{if(e.type!==`context`)for(let e=Math.max(0,t-Ne);e<=Math.min(f.length-1,t+Ne);e++)v[e]=1});let y=[],b=0;for(;b<f.length;){if(!v[b]){b++;continue}let e=b;for(;e<f.length&&v[e];)e++;let t=f.slice(b,e),n=t.find(e=>e.oldNo!==void 0)?.oldNo??0,r=t.find(e=>e.newNo!==void 0)?.newNo??0,i=t.filter(e=>e.type!==`add`).length,a=t.filter(e=>e.type!==`del`).length;y.push({type:`hunk`,text:`@@ -${n},${i} +${r},${a} @@`});for(let e of t)y.push(e);b=e}return y}function Ie(e,t){if(!(t.files.some(e=>e.path!==void 0)||t.keep.length>0||e.some(e=>e.path!==void 0))){let n=e[0];return t.files.map(e=>({change:n?n.hash===e.hash?`unchanged`:`changed`:`added`,mediaType:e.mediaType,bytes:e.bytes,...n?{baseBytes:n.bytes}:{}}))}let n=new Map(e.map(e=>[e.path??``,e])),r=[],i=new Set;for(let e of t.files){let t=e.path??``;i.add(t);let a=n.get(t);r.push({path:t,change:a?a.hash===e.hash?`unchanged`:`changed`:`added`,mediaType:e.mediaType,bytes:e.bytes,...a?{baseBytes:a.bytes}:{}})}for(let e of t.keep){if(i.has(e))continue;i.add(e);let t=n.get(e);r.push({path:e,change:`kept`,mediaType:t?.mediaType??``,bytes:t?.bytes??0,...t?{baseBytes:t.bytes}:{}})}for(let t of e){let e=t.path??``;i.has(e)||r.push({path:e,change:`removed`,mediaType:t.mediaType,bytes:0,baseBytes:t.bytes})}return r}function G(e){let t=B(e)||e instanceof Error?e:{},n=_e(t.status)?t.status:0,r=typeof t.code==`string`?t.code:``,i=typeof t.message==`string`?t.message:String(e),a=B(t.details)?t.details:{};if(n===422||r===`unsupported`){let e=typeof a.feature==`string`?a.feature:``;return e===`artifactActions`?{kind:`unsupported`,text:`This artifact declares no AI actions.`}:!e||e===`artifacts`?{kind:`unsupported`,text:`AI requests aren't supported on this hub.`}:{kind:`unsupported`,text:`Not supported on this hub (${e}): ${i}`}}return n===404||r===`not_found`?{kind:`unavailable`,text:`AI requests aren't available for this artifact (it doesn't exist, or you can't see it).`}:n===401||n===403||r===`forbidden`?{kind:`forbidden`,text:`Not allowed: ${i}`}:n===409||r===`conflict`?{kind:`conflict`,text:i}:n===429||r===`rate_limited`?{kind:`rate_limited`,text:`Too many AI requests are running (on this artifact or for you). Wait for one to finish.`}:n===503||r===`offline`?{kind:`offline`,text:`Offline: ${i}`}:n===400||r===`invalid`?{kind:`invalid`,text:i}:{kind:`error`,text:i}}function Le(e){return e.proposal?.state===`conflict`?`stale-base`:`job-changed`}function Re(e){return Math.min(1e4,Math.round(1500*1.5**Math.max(0,e)))}var ze={set(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)}},Be=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,Ve=e=>!(e&&typeof e==`object`&&typeof e.status==`number`);function He(e){let{source:t,artifactID:n,onState:r}=e,i=e.timers??ze,a=e.key??Be,o={status:`loading`,actions:[],revisionNumbers:new Map,jobs:[],more:!1,loadingMore:!1,handlers:[],sending:!1,pending:{},notices:{},reviews:{}},s,c,l=0,u=!1,d,f=e=>{u||(o={...o,...e},r(o))},p=e=>o.jobs.find(t=>t.id===e),m=e=>f({jobs:o.jobs.some(t=>t.id===e.id)?o.jobs.map(t=>t.id===e.id?e:t):[e,...o.jobs]}),h=(e,t)=>{let{[e]:n,...r}=o.notices;f({notices:t?{...r,[e]:t}:r})},g=(e,t)=>{let{[e]:n,...r}=o.pending;f({pending:t?{...r,[e]:t}:r})};async function _(){let[e,r]=await Promise.all([t.artifact(n),t.revisionNumbers(n).catch(()=>o.revisionNumbers)]);f({artifact:e,actions:Ce(e.metadata),revisionNumbers:r})}function v(){c?.(),c=void 0,u||!o.jobs.some(U)?l=0:c=i.set(()=>{c=void 0,x()},Re(l))}async function y(){f({status:`loading`});try{let[,e]=await Promise.all([_(),t.jobs(n)]);s=e.cursor,f({status:`ready`,jobs:e.items,more:!!e.cursor,error:void 0})}catch(e){f({status:`error`,error:G(e)});return}v(),await b()}async function b(){if(!u&&o.artifact)try{f({handlers:await t.handlers(o.artifact),handlersError:void 0})}catch(e){f({handlersError:G(e).text})}}async function x(){if(!(u||o.status!==`ready`)){try{let e=await t.jobs(n),r=new Map(o.jobs.map(e=>[e.id,e])),i=new Set(e.items.map(e=>e.id)),a=e.items.some(e=>r.get(e.id)?.revision!==e.revision),s=e.items.some(e=>!U(e)&&r.get(e.id)&&U(r.get(e.id)));f({jobs:[...e.items,...o.jobs.filter(e=>!i.has(e.id))]}),l=a?0:l+1,s&&await _().catch(()=>void 0)}catch{l++}v()}}async function S(){if(s&&!o.loadingMore){f({loadingMore:!0});try{let e=await t.jobs(n,s);s=e.cursor;let r=new Set(o.jobs.map(e=>e.id));f({jobs:[...o.jobs,...e.items.filter(e=>!r.has(e.id))],more:!!e.cursor,loadingMore:!1})}catch(e){f({loadingMore:!1,sendError:G(e)})}}}async function C(e){let r=JSON.stringify(e),i=d?.body===r?d.key:a();try{let r=await t.create(n,e,i);return d=void 0,m(r),f({sending:!1,sendError:void 0}),l=0,v(),r}catch(e){d=Ve(e)?{body:r,key:i}:void 0;let t=G(e);f({sending:!1,sendError:t}),t.kind===`conflict`&&await _().catch(()=>void 0);return}}async function w(e){return await T(e)!==void 0}async function T(e){if(o.sending||!o.artifact)return;if(e.baseRevisionID!==void 0&&e.baseRevisionID!==o.artifact.latestRevisionID){f({sendError:{kind:`conflict`,text:`The artifact changed since that view opened: the request was not sent.`}});return}let t=o.handlers.find(t=>t.key===e.handlerKey)?.handler,n=je({kind:e.kind,instruction:e.instruction,baseRevisionID:o.artifact.latestRevisionID,...t?{handler:t}:{},...e.action?{action:e.action}:{},actions:o.actions});if(!n.ok)f({sendError:{kind:`invalid`,text:n.problem}});else return f({sending:!0,sendError:void 0}),C(n.request)}async function E(e){try{let r=await t.job(n,e);return m(r),r}catch{return}}async function D(e){let r=p(e);if(!r||o.pending[e]||!U(r))return!1;g(e,`cancel`);try{return m(await t.cancel(n,e,r.revision)),h(e,void 0),!0}catch(t){let n=G(t),r=n.kind===`conflict`?await E(e):void 0;return h(e,{kind:n.kind===`conflict`?`conflict`:`error`,text:r&&!U(r)?`Not cancelled: it already ${r.state===`succeeded`?`finished`:r.state}.`:n.text}),!1}finally{g(e,void 0),v()}}async function O(e){let r=p(e);if(!r||o.pending[e]||r.kind!==`propose-edit`||r.state!==`succeeded`||r.proposal?.state!==`pending`)return!1;g(e,`apply`);try{let i=await t.apply(n,e,r.revision);m(i.job),await _().catch(()=>void 0);let a=i.revisionNumber??o.revisionNumbers.get(i.revisionID);return h(e,{kind:`info`,text:a===void 0?`Accepted as a new revision.`:`Accepted as revision ${a}.`}),!0}catch(t){let n=G(t);if(n.kind!==`conflict`)return h(e,{kind:`error`,text:n.text}),!1;let[r]=await Promise.all([E(e),_().catch(()=>void 0)]);if(r&&Le(r)===`stale-base`){let t=o.artifact?Ee(o.artifact.latestRevisionID,o.revisionNumbers):`a newer revision`;h(e,{kind:`conflict`,stale:!0,text:`Not accepted: the artifact changed since this edit was proposed (it is at ${t} now). Nothing was changed. Request the edit again on the latest revision.`})}else h(e,{kind:`conflict`,stale:!1,text:`This request changed since you read it. Review it again, then Accept.`});return!1}finally{g(e,void 0)}}async function k(e){let t=p(e);if(!t||o.pending[e]||o.sending||t.kind!==`propose-edit`)return!1;g(e,`rerequest`),f({sending:!0,sendError:void 0});try{await _();let n=!!await C({kind:`propose-edit`,baseRevisionID:o.artifact.latestRevisionID,instruction:t.instruction,handler:Ae(t.handler),apply:`manual`});return n&&h(e,{kind:`info`,text:`Requested again on the latest revision.`}),n}catch(e){return f({sending:!1,sendError:G(e)}),!1}finally{g(e,void 0)}}async function A(e){let r=p(e);if(r?.proposal){f({reviews:{...o.reviews,[e]:{status:`loading`}}});try{let[i,a]=await Promise.all([t.proposal(n,e),t.revisionFiles(n,r.baseRevisionID)]),s=Ie(a,{files:i.files,keep:i.keep}),c=a.length<=1&&i.files.every(e=>e.path===void 0),l=i.files.map(e=>{let t=c?a[0]:a.find(t=>t.path===e.path),n=e.path===void 0?{}:{path:e.path};return e.omitted===`binary`?{...n,note:`Binary file: not compared.`}:e.omitted===`budget`||e.text===void 0?{...n,note:`Too large to show here.`}:t&&t.text===void 0?{...n,note:t.omitted===`binary`?`Replaces a binary file.`:`The current file is too large to compare.`}:t&&t.hash===e.hash?{...n,note:`Unchanged.`}:{...n,lines:Fe(t?.text??``,e.text)}});f({reviews:{...o.reviews,[e]:{status:`ready`,changes:s,diffs:l,truncated:i.truncated}}})}catch(t){f({reviews:{...o.reviews,[e]:{status:`error`,text:G(t).text}}})}}}return{state:()=>o,load:y,refresh:x,more:S,request:w,requestJob:T,cancel:D,accept:O,rerequest:k,review:A,reloadHandlers:b,dispose(){c?.(),c=void 0,u=!0}}}var Ue=`/api/agent/artifacts`,K={textBytes:2097152,imageBytes:10485760,editBytes:1048576,revisionsPage:20},We=encodeURIComponent,Ge=e=>`${Ue}/${We(e)}`,Ke=(e,t)=>`${Ge(e)}/revisions?limit=${K.revisionsPage}${t?`&cursor=${We(t)}`:``}`,qe=(e,t)=>`${Ge(e)}/revisions/${We(t)}`,Je=(e,t,n)=>`${qe(e,t)}/blobs/${We(n)}`,Ye=e=>typeof e==`object`&&!!e&&!Array.isArray(e),q=e=>typeof e==`string`&&e.length>0,Xe=e=>typeof e==`number`&&Number.isFinite(e),Ze=e=>typeof e==`string`&&se.includes(e),Qe=(e,t)=>Ye(e)&&Ye(e[t])?e[t]:e;function $e(e){let t=Qe(e,`artifact`);if(!Ye(t)||!q(t.id)||typeof t.title!=`string`||!Ze(t.kind)||!q(t.latestRevisionID)||!Xe(t.revision))return;let n=Array.isArray(t.tags)?t.tags.filter(e=>typeof e==`string`):void 0;return{v:1,id:t.id,title:t.title,kind:t.kind,state:t.state===`archived`?`archived`:`active`,visibility:t.visibility===`workspace`?`workspace`:`private`,latestRevisionID:t.latestRevisionID,revision:t.revision,createdAt:Xe(t.createdAt)?t.createdAt:0,updatedAt:Xe(t.updatedAt)?t.updatedAt:0,...q(t.description)?{description:t.description}:{},...q(t.workspaceID)?{workspaceID:t.workspaceID}:{},...q(t.createdBySessionID)?{createdBySessionID:t.createdBySessionID}:{},...n?.length?{tags:n}:{}}}function et(e){if(Ye(e)){if(e.kind===`user`)return{kind:`user`};if(e.kind===`session`&&q(e.sessionID))return{kind:`session`,sessionID:e.sessionID};if(e.kind===`ai_job`&&q(e.jobID))return{kind:`ai_job`,jobID:e.jobID}}}function tt(e){let t=Qe(e,`revision`);if(!Ye(t)||!q(t.id)||!q(t.artifactID)||!Xe(t.number)||!Array.isArray(t.blobs))return;let n=et(t.author);if(!n)return;let r=t.blobs.filter(e=>ae(e)===void 0);return{v:1,id:t.id,artifactID:t.artifactID,number:t.number,blobs:r.map(e=>({hash:e.hash,bytes:e.bytes,mediaType:e.mediaType,...e.path===void 0?{}:{path:e.path}})),author:n,createdAt:Xe(t.createdAt)?t.createdAt:0,...q(t.baseRevisionID)?{baseRevisionID:t.baseRevisionID}:{},...q(t.entry)?{entry:t.entry}:{}}}function nt(e){let t=Ye(e)?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>tt(e)??[]):[],...q(t.cursor)?{cursor:t.cursor}:{}}}function rt(e){return e.kind===`user`?`You`:e.kind===`session`?`Session ${e.sessionID.slice(0,12)}…`:`AI job`}var it=[`text/markdown`,`text/plain`,`text/csv`,`text/html`,`text/css`,`text/javascript`,`application/json`],at=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`,`image/svg+xml`],ot={markdown:{"text/markdown":`markdown`,"text/plain":`markdown`},code:Object.fromEntries(it.map(e=>[e,`code`])),image:Object.fromEntries(at.map(e=>[e,`image`])),table:{"text/csv":`table`,"application/json":`table`},chart:{"application/json":`chart`},dashboard:{"application/json":`dashboard`},file:{...Object.fromEntries(at.map(e=>[e,`image`])),"text/plain":`text`,"text/markdown":`text`}},st={ts:`ts`,tsx:`tsx`,js:`js`,jsx:`jsx`,mjs:`js`,cjs:`js`,py:`python`,go:`go`,rs:`rust`,sh:`bash`,bash:`bash`,json:`json`,css:`css`,html:`html`,htm:`html`,md:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`toml`,sql:`sql`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,rb:`ruby`,swift:`swift`,kt:`kotlin`,diff:`diff`,csv:`csv`,txt:``},ct={"text/javascript":`js`,"text/css":`css`,"application/json":`json`,"text/html":`html`,"text/markdown":`markdown`,"text/csv":`csv`};function lt(e){let t=e.path?.split(`/`).pop()?.split(`.`).slice(1).pop()?.toLowerCase();return t!==void 0&&t in st?st[t]:ct[e.mediaType]??``}function ut(e,t){let n=t.blobs;if(ie.includes(e))return{mode:`isolated`,files:n,...n[0]?{file:dt(t)??n[0]}:{}};if(!n.length)return{mode:`empty`,files:n};let r=ot[e],i=dt(t)??n.find(e=>r[e.mediaType])??n[0],a=r[i.mediaType];if(!a)return{mode:`download`,file:i,files:n,note:`A ${i.mediaType} file can't be shown as ${e===`image`?`an`:`a`} ${e} here.`};let o=a===`image`?K.imageBytes:K.textBytes;return i.bytes>o?{mode:`download`,file:i,files:n,note:`This file is too large to preview (${Math.ceil(i.bytes/1024)} KiB).`}:{mode:a,file:i,files:n,...a===`code`?{lang:lt(i)}:{}}}function dt(e){return e.entry===void 0?void 0:e.blobs.find(t=>t.path===e.entry)}var ft=class extends Error{limit;name=`TooLargeError`;code=`too_large`;constructor(e){super(`A file here is at most ${Math.round(e/1024)} KiB`),this.limit=e}};async function pt(e,t){let n=Number(e.headers.get(`content-length`)??``);if(Number.isFinite(n)&&n>t)throw await e.body?.cancel().catch(()=>{}),new ft(t);if(!e.body)return new Uint8Array;let r=e.body.getReader(),i=[],a=0;for(;;){let{done:e,value:n}=await r.read();if(e)break;if(a+=n.byteLength,a>t)throw await r.cancel().catch(()=>{}),new ft(t);i.push(n)}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return o}function mt(e){let t=e&&typeof e==`object`?e:{},n=typeof t.status==`number`?t.status:0,r=typeof t.message==`string`?t.message:``;return t.name===`NetworkError`||n===503?{kind:`offline`,text:`Can't reach the hub right now. Nothing was lost; try again when it's back.`}:t.name===`TooLargeError`||t.code===`too_large`?{kind:`too_large`,text:r||`The file is too large.`}:n===404||n===403?{kind:`not_found`,text:`This artifact doesn't exist or you can't see it.`}:n===401?{kind:`forbidden`,text:`This device isn't signed in to the hub.`}:n===422||t.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub yet.`}:n===409||t.code===`conflict`?{kind:`conflict`,text:`The artifact changed since you opened it.`}:n===429||t.code===`rate_limited`?{kind:`rate_limited`,text:r?`Limit reached: ${r}`:`A limit was reached; try again later.`}:n===400?{kind:`invalid`,text:r||`The hub refused the change.`}:{kind:`error`,text:r?`Something went wrong: ${r}`:`Something went wrong (HTTP ${n}).`}}var ht=e=>new TextEncoder().encode(e).byteLength;function gt(e,t){if(e.state!==`active`||t.id!==e.latestRevisionID||ie.includes(e.kind)||t.blobs.length!==1)return!1;let n=t.blobs[0];return it.includes(n.mediaType)&&n.bytes<=K.editBytes}function _t(e,t,n){if(ht(n)>K.editBytes)throw new ft(K.editBytes);return{baseRevisionID:e,upload:[{mediaType:t.mediaType,data:n,encoding:`utf8`,...t.path===void 0?{}:{path:t.path}}]}}var vt=e=>`hub.artifactDraft.v1.${e}`;function yt(e,t){try{let n=e?.getItem(vt(t)),r=n?JSON.parse(n):void 0;return Ye(r)&&r.v===1&&q(r.base)&&typeof r.text==`string`?{v:1,base:r.base,text:r.text}:void 0}catch{return}}function bt(e,t){let n=yt(t.storage,e.artifactID),r=n?n.base===e.baseRevisionID?{status:`editing`,draft:n.text,baseRevisionID:n.base,restored:!0}:{status:`conflict`,draft:n.text,baseRevisionID:n.base,latestRevisionID:e.baseRevisionID,restored:!0}:{status:`editing`,draft:e.original,baseRevisionID:e.baseRevisionID},i=e.original,a,o=e=>{r=e,t.onChange()},s=()=>{try{r.draft===i&&r.baseRevisionID===e.baseRevisionID?t.storage?.removeItem(vt(e.artifactID)):ht(r.draft)<=K.editBytes&&t.storage?.setItem(vt(e.artifactID),JSON.stringify({v:1,base:r.baseRevisionID,text:r.draft}))}catch{}};return{state:()=>r,setDraft(e){o({...r,draft:e,status:r.status===`conflict`?`conflict`:`editing`}),s()},async save(){if(r.status===`saving`||r.status===`conflict`||r.draft===i&&r.baseRevisionID===e.baseRevisionID)return;let n;try{n=_t(r.baseRevisionID,e.file,r.draft)}catch(e){o({...r,status:`error`,error:{kind:`too_large`,text:`${e.message}; shorten the draft to save it.`}});return}let c=`${r.baseRevisionID}\n${r.draft}`,l=a?.sig===c?a.key:t.newKey();a={sig:c,key:l};let u=r;o({...r,status:`saving`});try{let r=await t.revise(e.artifactID,n,l);return i=u.draft,t.storage?.removeItem(vt(e.artifactID)),o({status:`saved`,draft:u.draft,baseRevisionID:r.id}),r}catch(e){let t=mt(e),n=e.details;t.kind===`conflict`?o({...u,status:`conflict`,error:t,...q(n?.latestRevisionID)?{latestRevisionID:n.latestRevisionID}:{}}):o({...u,status:`error`,error:t}),s();return}},rebase(e){let{latestRevisionID:t,error:n,...i}=r;o({...i,status:`editing`,baseRevisionID:e}),s()},discard(){t.storage?.removeItem(vt(e.artifactID)),a=void 0,o({status:`editing`,draft:i,baseRevisionID:e.baseRevisionID})}}}var xt={markdown:`Markdown`,code:`Code`,image:`Image`,table:`Table`,chart:`Chart`,dashboard:`Dashboard`,html:`HTML`,app:`App`,file:`File`};function St(e){let t=[[]];for(let n of e)n.text.split(`
4
- `).forEach((e,r)=>{r>0&&t.push([]),e&&t[t.length-1].push(n.kind?{text:e,kind:n.kind}:{text:e})});return t.length>1&&t[t.length-1].length===0&&t.pop(),t}var Ct={ts:`TypeScript`,tsx:`TypeScript (TSX)`,js:`JavaScript`,jsx:`JavaScript (JSX)`,python:`Python`,go:`Go`,rust:`Rust`,bash:`Shell`,json:`JSON`,css:`CSS`,html:`HTML`,markdown:`Markdown`,yaml:`YAML`,toml:`TOML`,sql:`SQL`,java:`Java`,c:`C`,cpp:`C++`,ruby:`Ruby`,swift:`Swift`,kotlin:`Kotlin`,diff:`Diff`,csv:`CSV`};function wt(e,t){return{name:e?.path?.split(`/`).pop()||`Untitled`,language:t?Ct[t]??t.toUpperCase():`Plain text`}}function Tt(e,t){let n=[{label:`Type`,value:xt[e.kind]??e.kind},{label:`Visibility`,value:e.visibility===`workspace`?`Workspace members`:`Private (only you)`}];e.workspaceID&&n.push({label:`Workspace`,value:t.workspaceName??e.workspaceID}),n.push({label:`Created by`,value:e.createdBySessionID?rt({kind:`session`,sessionID:e.createdBySessionID}):`You`}),n.push({label:`Created`,value:t.when(e.createdAt)},{label:`Updated`,value:t.when(e.updatedAt)}),e.state===`archived`&&n.push({label:`State`,value:`Archived (read only)`}),e.tags?.length&&n.push({label:`Tags`,value:e.tags.join(`, `)});let r=Ce(e.metadata);r.length&&n.push({label:`AI actions`,value:r.join(`, `)});for(let[t,r]of Object.entries(e.metadata??{}))t!==`ai-actions`&&n.push({label:t,value:r});return n}var Et={ask:`ask`,edit:`propose-edit`,action:`run-action`};function Dt(e,t){let n=/^\/([a-z]+)(?:\s+([\s\S]*))?$/.exec(e),r=n?Et[n[1]]:void 0;if(!n||!r)return{text:e};let i=n[2]??``;if(r!==`run-action`)return{kind:r,text:i};let a=/^(\S+)\s*([\s\S]*)$/.exec(i);return!a||!t.includes(a[1])?{text:e}:{kind:r,action:a[1],text:a[2]}}var Ot=`hub.artifactAiHandler.v1`;function kt(e,t){try{e?.setItem(Ot,t)}catch{}}function At(e,t){let n=null;try{n=e?.getItem(`hub.artifactAiHandler.v1`)??null}catch{return}return n?t.find(e=>e.key===n):void 0}function jt(e){return[...e].reverse()}var Mt=`hub.artifactAiPanel.v1`,J={min:280,max:640,default:380,share:.6};function Nt(e,t){if(!Number.isFinite(e))return J.default;let n=Math.max(J.min,Math.min(J.max,Math.floor(t*J.share)));return Math.min(n,Math.max(J.min,Math.round(e)))}function Pt(e){try{let t=JSON.parse(e?.getItem(`hub.artifactAiPanel.v1`)??`null`);if(!t||typeof t!=`object`)return{};let{open:n,width:r}=t;return{...typeof n==`boolean`?{open:n}:{},...typeof r==`number`&&Number.isFinite(r)?{width:r}:{}}}catch{return{}}}function Ft(e,t){try{e?.setItem(Mt,JSON.stringify(t))}catch{}}var It=y(`<input type=search class=aai-picker-search aria-label="Search handlers"placeholder=Find… title="Find a handler by @name, title or session ID">`),Lt=y(`<optgroup label="Your sessions">`),Rt=y(`<optgroup label="New session in a workspace repo">`),zt=y(`<span><select aria-label="Handled by"title="Who handles this request"><option value>`),Bt=y(`<option>`),Vt=y(`<button type=button class=aai-recent>Use `);function Ht(){try{return window.localStorage}catch{return}}function Ut(e){let[n,a]=s(``),o=()=>e.value?void 0:At(Ht(),e.handlers),c=t(()=>Oe(e.handlers,n(),e.value)),l=()=>c().filter(e=>e.kind===`session`),u=()=>c().filter(e=>e.kind===`launch`),d=()=>!!n().trim()&&!c().some(t=>t.key!==e.value);return(()=>{var t=zt(),s=t.firstChild,c=s.firstChild;return T(t,i(r,{get when(){return e.handlers.length>1},get children(){var t=It();return t.$$input=e=>a(e.currentTarget.value),t.addEventListener(`focus`,()=>e.onPick?.()),C(()=>t.value=n()),t}}),s),s.addEventListener(`change`,t=>e.onChange(t.currentTarget.value)),s.addEventListener(`focus`,()=>e.onPick?.()),T(c,()=>d()?`No handler matches the search`:`Choose a session…`),T(s,i(r,{get when(){return l().length},get children(){var t=Lt();return T(t,i(g,{get each(){return l()},children:t=>(()=>{var n=Bt();return T(n,()=>t.label),C(()=>n.selected=t.key===e.value),C(()=>n.value=t.key),n})()})),t}}),null),T(s,i(r,{get when(){return u().length},get children(){var t=Rt();return T(t,i(g,{get each(){return u()},children:t=>(()=>{var n=Bt();return T(n,()=>t.label),C(()=>n.selected=t.key===e.value),C(()=>n.value=t.key),n})()})),t}}),null),T(t,i(r,{get when(){return o()},children:t=>(()=>{var n=Vt();return n.firstChild,n.$$click=()=>e.onChange(t().key),T(n,()=>t().display,null),C(e=>{var r=`Last used on this device: ${t().label}`,i=`Use ${t().display} (last used)`;return r!==e.e&&v(n,`title`,e.e=r),i!==e.t&&v(n,`aria-label`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),C(()=>k(t,`aai-picker ${e.class??``}`)),C(()=>s.value=e.value),t})()}_([`input`,`click`]);var Wt=`/api/agent/artifacts`,Gt=50,Kt=262144,qt=e=>e.startsWith(`text/`)||e===`application/json`||e===`image/svg+xml`,Y=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Jt=e=>new p(502,`The hub answered an unexpected ${e}`);function Yt(e){let t=Y(e)&&Y(e.artifact)?e.artifact:e;if(!Y(t)||typeof t.id!=`string`||typeof t.latestRevisionID!=`string`||typeof t.revision!=`number`)throw Jt(`artifact`);return{id:t.id,title:typeof t.title==`string`?t.title:``,kind:typeof t.kind==`string`?t.kind:`file`,state:typeof t.state==`string`?t.state:`active`,latestRevisionID:t.latestRevisionID,revision:t.revision,...typeof t.workspaceID==`string`?{workspaceID:t.workspaceID}:{},...Y(t.metadata)?{metadata:t.metadata}:{}}}var Xt=e=>{let t=xe(Y(e)?e.job:void 0);if(!t)throw Jt(`job`);return t},Zt=async(e,t,n={})=>(await c(e,{method:`POST`,json:t,headers:n})).json();async function Qt(){try{let e=await A(`/api/agent/who`),t=Y(e)&&Array.isArray(e.sessions)?e.sessions:[];return new Map(t.flatMap(e=>Y(e)&&typeof e.sessionID==`string`&&typeof e.name==`string`&&e.name?[[e.sessionID,e.name]]:[]))}catch{return new Map}}function $t(t){let n=t=>`${Wt}/${e(t)}/jobs`,r=(t,r,i=``)=>`${n(t)}/${e(r)}${i}`;return{artifact:async t=>Yt(await A(`${Wt}/${e(t)}`)),async revisionNumbers(t){let n=await A(`${Wt}/${e(t)}/revisions?limit=200`),r=Y(n)&&Array.isArray(n.items)?n.items:[];return new Map(r.flatMap(e=>Y(e)&&typeof e.id==`string`&&typeof e.number==`number`?[[e.id,e.number]]:[]))},jobs:async(t,r)=>Se(await A(`${n(t)}?limit=${Gt}${r?`&cursor=${e(r)}`:``}`)),job:async(e,t)=>Xt(await A(r(e,t))),create:async(e,t,r)=>Xt(await Zt(n(e),t,{"idempotency-key":r})),cancel:async(e,t,n)=>Xt(await Zt(r(e,t,`/cancel`),{expectedRevision:n})),async apply(e,t,n){let i=await Zt(r(e,t,`/apply`),{expectedRevision:n}),a=Y(i)&&Y(i.revision)?i.revision:{};if(typeof a.id!=`string`)throw Jt(`revision`);return{job:Xt(i),revisionID:a.id,...typeof a.number==`number`?{revisionNumber:a.number}:{}}},proposal:async(e,t)=>{let n=await A(r(e,t,`/proposal`));if(!Y(n)||!Array.isArray(n.files))throw Jt(`proposal`);return{...n,keep:Array.isArray(n.keep)?n.keep:[],truncated:n.truncated===!0}},async revisionFiles(t,n){let r=await A(`${Wt}/${e(t)}/revisions/${e(n)}`),i=Y(r)&&Y(r.revision)&&Array.isArray(r.revision.blobs)?r.revision.blobs:[],a=Kt,o=[];for(let r of i){if(!Y(r)||typeof r.hash!=`string`||typeof r.mediaType!=`string`||typeof r.bytes!=`number`)continue;let i={...typeof r.path==`string`?{path:r.path}:{},hash:r.hash,mediaType:r.mediaType,bytes:r.bytes};qt(r.mediaType)?r.bytes>a?o.push({...i,omitted:`budget`}):(a-=r.bytes,o.push({...i,text:await(await c(`${Wt}/${e(t)}/revisions/${e(n)}/blobs/${e(r.hash)}`)).text()})):o.push({...i,omitted:`binary`})}return o},async handlers(n){let[r,i]=await Promise.all([(async()=>{if(!n.workspaceID)return[];try{let t=await A(`/api/agent/workspaces/${e(n.workspaceID)}/bindings`);return(Y(t)&&Array.isArray(t.bindings)?t.bindings:[]).flatMap(e=>Y(e)&&typeof e.id==`string`&&typeof e.machineID==`string`&&typeof e.repo==`string`?[{id:e.id,machineID:e.machineID,repo:e.repo,...typeof e.label==`string`?{label:e.label}:{}}]:[])}catch{return[]}})(),Qt()]);return De({sessions:t.sessions().map(e=>i.get(e.id)?{...e,name:i.get(e.id)}:e),bindings:r,machines:t.machines()})}}}var en=y(`<span>an unknown revision`),tn=y(`<button type=button class=aai-link>`),nn=y(`<span>`),rn=y(`<strong class=aai-older>You are viewing an older revision.`),an=y(`<p class=aai-sub>Requests use the latest revision (<!>).`),on=y(`<p class=aai-note role=status>Loading AI requests…`),sn=y(`<button type=button class="btn small aai-older-btn">Load older requests`),cn=y(`<ol class=aai-jobs aria-label="AI request history">`),ln=y(`<p class=aai-note>Could not list handlers: `),un=y(`<p class=aai-note role=status>`),dn=y(`<div class=aai-confirm role=group aria-label="Confirm action"><p>Run <strong></strong> on <!>, handled by <strong></strong>? It gets a read-only copy of this revision; its answer shows here and nothing is changed.</p><div class=aai-actions><button type=button class="btn primary small">Confirm and run</button><button type=button class="btn small">Back`),fn=y(`<select class=aai-action aria-label="Declared action"><option value>Choose an action…`),pn=y(`<form class=aai-composer aria-label="New AI request"><div class=aai-box><div class=aai-box-top><div class=aai-seg role=radiogroup aria-label="Request type"></div></div><textarea class=aai-input rows=2></textarea><div class=aai-box-foot><span class=aai-hint>Ctrl+Enter</span><button type=submit class=aai-send><span class=aai-send-text>`),mn=y(`<section class=aai><header class=aai-head><span class=aai-mark aria-hidden=true></span><div class=aai-head-text><h2 class=aai-title>AI requests</h2></div></header><div class=aai-scroll>`),hn=y(`<button type=button class="btn small">Retry`),gn=y(`<p class=aai-note> `),_n=y(`<kbd>/action `),vn=y(`<div class=aai-empty><p><strong>Ask about this artifact, or describe an edit.</strong></p><p>The session you choose gets a read-only copy. Nothing changes until you accept an edit.</p><p class=aai-tips>Tip: start with <kbd>/ask</kbd>, <kbd>/edit</kbd>.`),yn=y(`<p class="aai-note err"role=alert>`),bn=y(`<label class=aai-seg-item><input type=radio>`),xn=y(`<option>`),Sn=y(`<span class=aai-dot aria-hidden=true>`),Cn=y(`<div class=aai-answer>`),wn=y(`<p class="aai-note warn"role=status>The artifact changed since this edit was proposed: accepting it will be refused. Request it again on the latest revision.`),Tn=y(`<button type=button class="btn primary small">`),En=y(`<button type=button class="btn small">Request again on the latest revision`),Dn=y(`<button type=button class="btn small">`),On=y(`<button type=button class="btn small">Continue in side chat`),kn=y(`<li class=aai-job><div class=aai-q><div class=aai-q-meta><span class=aai-badge></span><span class=aai-meta> · </span></div><p class=aai-instruction></p></div><div class=aai-a><p class="aai-meta aai-prov">On <!> · handled by </p><p role=status aria-live=polite></p><div class=aai-actions>`),An=y(`<div class=aai-proposal>`),jn=y(`<button type=button class="btn small">Review proposed edit (<!> file<!>)`),Mn=y(`<p class=aai-note role=status>Loading the proposal…`),Nn=y(`<p class="aai-note err">Could not load the proposal: `),Pn=y(`<ul class=aai-files aria-label="Proposed files">`),Fn=y(`<p class=aai-note>Some files are too large to show here.`),In=y(`<li><span class=aai-file-change></span> <code>`),Ln=y(`<p class=aai-meta><code>`),Rn=y(`<table class=diff><tbody>`),zn=y(`<div class=aai-diff>`),Bn=y(`<p class=aai-note>`),Vn=y(`<tr><td class=ln></td><td class=ln></td><td class=code-line><span class=sign>`),Hn=y(`<p>`),Un={ask:`Ask`,"propose-edit":`Edit`,"run-action":`Action`},Wn={ask:`Ask a question (answer only)`,"propose-edit":`Propose an edit you review before it applies`,"run-action":`Run one of the artifact's declared actions`},Gn=e=>e.kind===`ask`?`Question`:e.kind===`propose-edit`?`Edit`:`Action: ${e.action??`?`}`;function Kn(){return $t({sessions:()=>{let e=new Map;for(let t of R.machines??[])for(let n of t.processes)for(let t of n.sessions)e.set(t.id,n.harness||`opencode`);return L().filter(e=>!e.hidden&&!e.archived).map(t=>({id:t.id,title:t.title,machineName:t.machineName,online:t.machineOnline,...e.get(t.id)?{harness:e.get(t.id)}:{}}))},machines:()=>(R.machines??[]).map(e=>({id:e.id,name:e.name,online:!!e.online}))})}function qn(e){let[a,o]=s(),c=!e.controller,f=e.controller?.ai??He({source:e.source??Kn(),artifactID:e.artifactID,onState:o});n(()=>c&&void f.load()),P(()=>c&&f.dispose());let p=()=>(c?a():e.controller.state())??f.state(),h=()=>p().revisionNumbers,_=()=>p().artifact?.latestRevisionID,[y,b]=s(`ask`),[x,S]=s(``),[E,D]=s(``),[k,A]=s(``),[j,N]=s(!1),F,I,ee,L=t(()=>p().handlers.find(e=>e.key===E())),R=()=>y()===`ask`?`Ask`:y()===`propose-edit`?`Propose edit`:k()?`Run ${k()}…`:`Run action…`,te=t(()=>jt(p().jobs));w(l(()=>[p().jobs.length,e.tailCount??0],()=>queueMicrotask(()=>ee&&(ee.scrollTop=ee.scrollHeight))));async function ne(){let e=E(),t=await f.request({kind:y(),instruction:x(),...e?{handlerKey:e}:{},...y()===`run-action`&&k()?{action:k()}:{}});N(!1),t&&(S(``),kt(Ht(),e))}function re(e){e?.preventDefault(),!p().sending&&(y()===`run-action`&&k()&&E()?(N(!0),queueMicrotask(()=>F?.focus())):ne())}function ie(e){let t=Dt(e,p().actions);t.kind&&/\s$/.test(e)?(b(t.kind),t.action&&A(t.action),N(!1),S(t.text),I&&(I.value=t.text)):S(e)}async function ae(t){if(await f.accept(t.id)){let t=_();t&&e.onRevised?.(t)}}let oe=(t,n=``)=>i(r,{when:t,get fallback(){return(()=>{var e=en(),t=e.firstChild;return T(e,n,t),e})()},children:t=>i(r,{get when(){return e.onShowRevision},get fallback(){return(()=>{var e=nn();return T(e,()=>n+Ee(t(),h())),e})()},get children(){var r=tn();return r.$$click=()=>e.onShowRevision?.(t()),T(r,()=>n+Ee(t(),h())),r}})});return(()=>{var t=mn(),n=t.firstChild,a=n.firstChild,o=a.nextSibling,s=o.firstChild,c=n.nextSibling;T(a,i(O,{name:`spark`})),T(o,i(r,{get when(){return p().status===`ready`},get children(){var t=an(),n=t.firstChild.nextSibling;return n.nextSibling,T(t,()=>oe(_()),n),T(t,i(r,{get when(){return M(()=>!!(e.revisionID&&_()))()&&e.revisionID!==_()},get children(){return[` `,rn()]}}),null),t}}),null),T(n,()=>e.headerActions,null);var l=ee;return typeof l==`function`?m(l,c):ee=c,T(c,i(d,{get children(){return[i(u,{get when(){return p().status===`loading`},get children(){return on()}}),i(u,{get when(){return M(()=>p().status===`error`)()&&p().error},children:e=>(()=>{var t=gn(),n=t.firstChild;return T(t,()=>e().text,n),T(t,i(r,{get when(){return e().kind===`error`||e().kind===`offline`},get children(){var e=hn();return e.$$click=()=>void f.load(),e}}),null),C(n=>{var r=e().kind===`error`,i=e().kind===`error`?`alert`:`status`;return r!==n.e&&t.classList.toggle(`err`,n.e=r),i!==n.t&&v(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),i(u,{get when(){return p().status===`ready`},get children(){return[i(r,{get when(){return p().more},get children(){var e=sn();return e.$$click=()=>void f.more(),C(t=>{var n=p().loadingMore,r=p().loadingMore;return n!==t.e&&(e.disabled=t.e=n),r!==t.t&&v(e,`aria-busy`,t.t=r),t},{e:void 0,t:void 0}),e}}),i(r,{get when(){return p().jobs.length},get fallback(){return(()=>{var e=vn(),t=e.firstChild.nextSibling.nextSibling,n=t.firstChild.nextSibling.nextSibling.nextSibling.nextSibling;return T(t,i(r,{get when(){return p().actions.length},get children(){return[` `,`or `,(()=>{var e=_n();return e.firstChild,T(e,()=>p().actions[0],null),e})()]}}),n),e})()},get children(){var t=cn();return T(t,i(g,{get each(){return te()},children:t=>i(Jn,{job:t,get state(){return p()},revisionRef:oe,onCancel:()=>void f.cancel(t.id),onReview:()=>void f.review(t.id),onAccept:()=>void ae(t),onRerequest:()=>void f.rerequest(t.id),get onContinue(){return e.onContinueInSideChat}})})),t}})]}})]}}),null),T(c,()=>e.threadTail,null),T(t,i(r,{get when(){return p().status===`ready`},get children(){var t=pn(),n=t.firstChild,a=n.firstChild,o=a.firstChild,s=a.nextSibling,c=s.nextSibling,l=c.firstChild,u=l.nextSibling,d=u.firstChild;t.addEventListener(`submit`,re),T(t,i(r,{get when(){return p().sendError},children:e=>(()=>{var t=yn();return T(t,()=>e().text),t})()}),n),T(t,i(r,{get when(){return p().handlersError},get children(){var e=ln();return e.firstChild,T(e,()=>p().handlersError,null),e}}),n),T(t,i(r,{get when(){return M(()=>!!L())()&&!L().online},get children(){var e=un();return T(e,()=>L().kind===`session`?`That session is offline: the request is queued and delivered when it reconnects.`:`That machine is offline: the new session starts when it's back.`),e}}),n),T(t,i(r,{get when(){return j()},get children(){var e=dn(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling,a=t.nextSibling.firstChild,o=a.nextSibling;e.$$keydown=e=>{e.key===`Escape`&&(e.preventDefault(),N(!1),I?.focus())},T(n,k),T(t,()=>Ee(_()??``,h()),r),T(i,()=>L()?.display),a.$$click=()=>void ne();var s=F;return typeof s==`function`?m(s,a):F=a,o.$$click=()=>{N(!1),I?.focus()},C(()=>a.disabled=p().sending),e}}),n),T(o,i(g,{each:[`ask`,`propose-edit`,`run-action`],children:t=>{let n=()=>t===`run-action`&&p().actions.length===0;return(()=>{var r=bn(),i=r.firstChild;return i.addEventListener(`change`,()=>{b(t),N(!1)}),i.value=t,T(r,()=>Un[t],null),C(a=>{var o=y()===t,s=!!n(),c=n()?`This artifact declares no AI actions`:Wn[t],l=`aai-mode-${e.artifactID}`,u=n();return o!==a.e&&r.classList.toggle(`on`,a.e=o),s!==a.t&&r.classList.toggle(`disabled`,a.t=s),c!==a.a&&v(r,`title`,a.a=c),l!==a.o&&v(i,`name`,a.o=l),u!==a.i&&(i.disabled=a.i=u),a},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),C(()=>i.checked=y()===t),r})()}})),T(a,i(r,{get when(){return y()===`run-action`},get children(){var e=fn();return e.firstChild,e.addEventListener(`change`,e=>(A(e.currentTarget.value),N(!1))),T(e,i(g,{get each(){return p().actions},children:e=>(()=>{var t=xn();return t.value=e,T(t,e),t})()}),null),C(()=>e.value=k()),e}}),null),s.$$keydown=e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&re(e)},s.$$input=e=>ie(e.currentTarget.value);var S=I;return typeof S==`function`?m(S,s):I=s,T(c,i(Ut,{get handlers(){return p().handlers},get value(){return E()},onPick:()=>void f.reloadHandlers(),onChange:e=>(D(e),N(!1))}),l),T(u,i(O,{name:`send`}),d),T(d,(()=>{var e=M(()=>!!p().sending);return()=>e()?`Sending…`:R()})()),C(e=>{var t=y()===`ask`?`Question`:y()===`propose-edit`?`Describe the edit`:`Notes for the action (optional)`,n=y()===`ask`?`Ask about this artifact…`:y()===`propose-edit`?`Describe the edit, e.g. Add a rollback section`:`Notes for the action (optional)`,r=p().sending||j(),i=p().sending,a=p().sending?`Sending…`:R(),o=`${R()} (Ctrl+Enter)`;return t!==e.e&&v(s,`aria-label`,e.e=t),n!==e.t&&v(s,`placeholder`,e.t=n),r!==e.a&&(u.disabled=e.a=r),i!==e.o&&v(u,`aria-busy`,e.o=i),a!==e.i&&v(u,`aria-label`,e.i=a),o!==e.n&&v(u,`title`,e.n=o),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),C(()=>s.value=x()),t}}),null),C(n=>{var r=`aai-h-${e.artifactID}`,i=`aai-h-${e.artifactID}`;return r!==n.e&&v(t,`aria-labelledby`,n.e=r),i!==n.t&&v(s,`id`,n.t=i),n},{e:void 0,t:void 0}),t})()}function Jn(e){let n=()=>e.job,a=t(()=>ke(e.state.handlers)),o=e=>a().get(e)??L().find(t=>t.id===e)?.title,s=()=>we(n(),o),c=()=>e.state.pending[n().id],l=()=>e.state.notices[n().id],f=()=>e.state.reviews[n().id],p=()=>e.state.artifact?.latestRevisionID,m=()=>n().kind===`propose-edit`&&n().state===`succeeded`&&n().proposal?.state===`pending`,h=()=>m()&&p()!==void 0&&n().baseRevisionID!==p(),_=()=>n().kind===`propose-edit`&&(n().proposal?.state===`conflict`||h()||l()?.stale);return(()=>{var t=kn(),a=t.firstChild,p=a.firstChild,y=p.firstChild,b=y.nextSibling,x=b.firstChild,S=p.nextSibling,w=a.nextSibling,D=w.firstChild,O=D.firstChild.nextSibling;O.nextSibling;var A=D.nextSibling,N=A.nextSibling;return T(y,()=>Gn(n())),T(b,()=>Te(n().by),x),T(b,()=>j(n().createdAt),null),T(S,()=>n().instruction),T(D,()=>e.revisionRef(n().baseRevisionID),O),T(D,()=>W(n().handler,o),null),T(D,i(r,{get when(){return n().proposal?.appliedRevisionID},children:t=>[` · became `,M(()=>e.revisionRef(t()))]}),null),T(A,i(r,{get when(){return s().active},get children(){return Sn()}}),null),T(A,()=>s().text,null),T(w,i(r,{get when(){return n().answer},get children(){var t=Cn();return T(t,()=>n().answer),C(()=>v(t,`aria-label`,`Answer from ${W(n().handler,o)} on ${Ee(n().baseRevisionID,e.state.revisionNumbers)}`)),t}}),N),T(w,i(r,{get when(){return M(()=>!!(n().proposal&&n().proposal.state!==`applied`))()&&n().proposal},children:t=>(()=>{var n=An();return T(n,i(r,{get when(){return f()},get fallback(){return(()=>{var n=jn(),r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,E(n,`click`,e.onReview,!0),T(n,()=>t().files.length,r),T(n,()=>t().files.length===1?``:`s`,i),T(n,(()=>{var e=M(()=>!!t().keep?.length);return()=>e()?`, ${t().keep.length} kept`:``})(),i),n})()},children:e=>i(d,{get children(){return[i(u,{get when(){return e().status===`loading`},get children(){return Mn()}}),i(u,{get when(){return M(()=>e().status===`error`)()&&e()},children:e=>(()=>{var t=Nn();return t.firstChild,T(t,()=>e().text,null),t})()}),i(u,{get when(){return M(()=>e().status===`ready`)()&&e()},children:e=>{let t=()=>e();return[i(r,{get when(){return t().changes.some(e=>e.path!==void 0)},get children(){var e=Pn();return T(e,i(g,{get each(){return t().changes},children:e=>(()=>{var t=In(),n=t.firstChild,r=n.nextSibling.nextSibling;return T(n,()=>e.change),T(r,()=>e.path),C(()=>k(t,`aai-file ${e.change}`)),t})()})),e}}),i(g,{get each(){return t().diffs},children:e=>(()=>{var t=zn();return T(t,i(r,{get when(){return e.path},get children(){var t=Ln(),n=t.firstChild;return T(n,()=>e.path),t}}),null),T(t,i(r,{get when(){return e.lines},get fallback(){return(()=>{var t=Bn();return T(t,()=>e.note),t})()},get children(){var t=Rn(),n=t.firstChild;return T(n,i(g,{get each(){return e.lines},children:e=>(()=>{var t=Vn(),n=t.firstChild,r=n.nextSibling,i=r.nextSibling,a=i.firstChild;return T(n,()=>e.oldNo??``),T(r,()=>e.newNo??``),T(a,(()=>{var t=M(()=>e.type===`add`);return()=>t()?`+`:e.type===`del`?`−`:` `})()),T(i,()=>e.text,null),C(()=>k(t,e.type)),t})()})),C(()=>v(t,`aria-label`,`Changes${e.path?` to ${e.path}`:``}`)),t}}),null),t})()}),i(r,{get when(){return t().truncated},get children(){return Fn()}})]}})]}})})),n})()}),N),T(w,i(r,{get when(){return M(()=>!!h())()&&!l()},get children(){return wn()}}),N),T(w,i(r,{get when(){return l()},children:e=>(()=>{var t=Hn();return T(t,()=>e().text),C(n=>{var r=`aai-note ${e().kind===`info`?`ok`:e().kind===`conflict`?`warn`:`err`}`,i=e().kind===`info`?`status`:`alert`;return r!==n.e&&k(t,n.e=r),i!==n.t&&v(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),N),T(N,i(r,{get when(){return m()},get children(){var t=Tn();return E(t,`click`,e.onAccept,!0),T(t,()=>c()===`apply`?`Accepting…`:`Accept as new revision`),C(e=>{var n=!!c(),r=c()===`apply`;return n!==e.e&&(t.disabled=e.e=n),r!==e.t&&v(t,`aria-busy`,e.t=r),e},{e:void 0,t:void 0}),t}}),null),T(N,i(r,{get when(){return _()},get children(){var t=En();return E(t,`click`,e.onRerequest,!0),C(()=>t.disabled=!!c()||e.state.sending),t}}),null),T(N,i(r,{get when(){return U(n())},get children(){var t=Dn();return E(t,`click`,e.onCancel,!0),T(t,()=>c()===`cancel`?`Cancelling…`:`Cancel`),C(e=>{var n=!!c(),r=c()===`cancel`;return n!==e.e&&(t.disabled=e.e=n),r!==e.t&&v(t,`aria-busy`,e.t=r),e},{e:void 0,t:void 0}),t}}),null),T(N,i(r,{get when(){return M(()=>!!e.onContinue)()&&n().handler.sessionID},get children(){var t=On();return t.$$click=()=>e.onContinue?.(n()),t}}),null),C(e=>{var r=n().id,i=n().state,a=`${Gn(n())}: ${n().instruction}`,o=`aai-status ${s().tone}`;return r!==e.e&&v(t,`data-job`,e.e=r),i!==e.t&&v(t,`data-state`,e.t=i),a!==e.a&&v(t,`aria-label`,e.a=a),o!==e.o&&k(A,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()}_([`click`,`keydown`,`input`]);var X={rows:1e3,columns:50,cellChars:2e3};function Yn(e){let t=e.length>X.columns,n=e.slice(0,X.columns).map(e=>i(e)),r=[];function i(e){return typeof e==`string`&&e.length>X.cellChars?(t=!0,e.slice(0,X.cellChars)):e}return{add(e,a){return r.length>=X.rows?(t=!0,!1):(r.push(n.map((t,n)=>i(n<e.length?e[n]:a))),!0)},done:()=>({columns:n,rows:r,truncated:t})}}function Xn(e){let t=[],n=[],r=``,i=!1,a=0,o=()=>{n.push(r),r=``,(n.length!==1||n[0]!==``)&&t.push(n),n=[]};for(;a<e.length&&t.length<=X.rows+1;){let t=e[a];i?t===`"`?e[a+1]===`"`?(r+=`"`,a++):i=!1:r+=t:t===`"`&&r===``?i=!0:t===`,`?(n.push(r),r=``):t===`
5
- `||t===`\r`?(t===`\r`&&e[a+1]===`
6
- `&&a++,o()):r+=t,a++}(r!==``||n.length)&&o();let[s,...c]=t;if(!s)return{columns:[],rows:[],truncated:!1};let l=Yn(s);for(let e of c)if(!l.add(e,``))break;return l.done()}var Zn=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null};function Qn(e){if(e==null)return null;if(typeof e==`string`||typeof e==`boolean`)return e;if(typeof e==`number`)return Number.isFinite(e)?e:null;try{return JSON.stringify(e)??null}catch{return null}}function $n(e){if(Zn(e)&&Array.isArray(e.columns)&&Array.isArray(e.rows)){let t=Yn(e.columns.map(String));for(let n of e.rows)if(!t.add(Array.isArray(n)?n.map(Qn):[],null))break;return t.done()}if(Array.isArray(e)){if(e.every(Zn)){let t=[],n=new Set;for(let r of e){for(let e of Object.keys(r))n.has(e)||(n.add(e),t.push(e));if(t.length>X.columns)break}let r=Yn(t);for(let n of e)if(!r.add(t.slice(0,X.columns).map(e=>Qn(Object.hasOwn(n,e)?n[e]:null)),null))break;return r.done()}if(e.length&&e.every(Array.isArray)){let[t,...n]=e,r=Yn(t.map(String));for(let e of n)if(!r.add(e.map(Qn),null))break;return r.done()}}}function er(e,t){if(t===``)return e;let n=e;for(let e of t.split(`.`))if(Array.isArray(n)){if(!/^\d{1,6}$/.test(e))return;let t=Number(e);if(t>=n.length)return;n=n[t]}else if(Zn(n)){if(e===`__proto__`||!Object.hasOwn(n,e))return;n=n[e]}else return;return n}function tr(e){if(typeof e==`number`)return Number.isFinite(e)?e:void 0;if(typeof e!=`string`||e.trim()===``)return;let t=Number(e.trim());return Number.isFinite(t)?t:void 0}function nr(e,t){switch(t){case`application/json`:try{return{ok:!0,format:`json`,value:JSON.parse(e)}}catch{return{ok:!1,error:`The JSON is not valid`}}case`text/csv`:return{ok:!0,format:`table`,value:Xn(e)};case`text/markdown`:case`text/plain`:return{ok:!0,format:`text`,value:e};default:return{ok:!1,error:`${t} isn't data`}}}function rr(e){if(e.ok){if(e.format===`table`)return e.value;if(e.format===`json`)return $n(e.value)}}var Z={widgets:24,sources:8,refreshMinSeconds:30,refreshMaxSeconds:86400,defaultRefreshSeconds:300,staleFactor:2,concurrent:4,sourceBytes:524288,titleChars:120,markdownChars:2e4,chartSeries:4,chartPoints:500,tableRows:1e3,defaultTableRows:50},ir=e=>typeof e==`object`&&!!e&&!Array.isArray(e),ar=(e,t,n)=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=t&&e<=n,or=e=>typeof e==`string`&&e.length>=1&&e.length<=120,sr=/^(?!\/)(?!.*(?:^|\/)\.\.?(?:\/|$))[A-Za-z0-9._/-]{1,200}$/,cr=/^[A-Za-z0-9_$ -]{1,64}$/,lr=/^[A-Za-z0-9_-]{1,40}$/,ur={dashboard:[`v`,`title`,`refreshSeconds`,`widgets`],binding:[`artifact`,`path`,`select`],metric:[`id`,`type`,`title`,`width`,`source`,`unit`,`precision`],table:[`id`,`type`,`title`,`width`,`source`,`columns`,`limit`],chart:[`id`,`type`,`title`,`width`,`source`,`chart`,`x`,`y`],markdown:[`id`,`type`,`title`,`width`,`text`,`source`],chartSpec:[`v`,`title`,`chart`,`x`,`y`,`data`]};function dr(e,t,n){let r=Object.keys(e).find(e=>!t.includes(e));return r===void 0?void 0:`${n} has an unknown field ${JSON.stringify(r.slice(0,40))}`}var fr=e=>`${e.artifact}|${e.path??``}`;function pr(e,t,n,r){if(!ir(e))return void r.push(`${t}.source must be an object`);let i=dr(e,ur.binding,`${t}.source`);if(i)return void r.push(i);if(!a(`artifact`,e.artifact))return void r.push(`${t}.source.artifact must be an artifact ID`);if(n!==void 0&&e.artifact===n)return void r.push(`${t}: a dashboard can't bind to itself`);if(e.path!==void 0&&(typeof e.path!=`string`||!sr.test(e.path)))return void r.push(`${t}.source.path must be a relative file path`);if(e.select!==void 0&&(typeof e.select!=`string`||e.select.length>200||!e.select.split(`.`).every(e=>cr.test(e))))r.push(`${t}.source.select must be a dot path like "0.count"`);else return{artifact:e.artifact,...e.path===void 0?{}:{path:e.path},...e.select===void 0?{}:{select:e.select}}}function mr(e,t,n,r){let i=`widget ${t+1}`;if(!ir(e))return void r.push(`${i} must be an object`);let a=e.type;if(a!==`metric`&&a!==`table`&&a!==`chart`&&a!==`markdown`)return void r.push(`${i}: type must be metric, table, chart or markdown`);let o=dr(e,ur[a],i);if(o)return void r.push(o);let s=r.length;(typeof e.id!=`string`||!lr.test(e.id))&&r.push(`${i}: id must be 1–40 letters, digits, - or _`),e.title!==void 0&&(typeof e.title!=`string`||e.title.length>Z.titleChars)&&r.push(`${i}: title must be at most ${Z.titleChars} characters`),e.width!==void 0&&e.width!==1&&e.width!==2&&e.width!==3&&r.push(`${i}: width must be 1, 2 or 3`);let c={id:e.id,...e.title===void 0?{}:{title:e.title},width:e.width??1};if(a===`markdown`){e.text!==void 0&&e.source!==void 0?r.push(`${i}: a markdown widget has either text or a source`):e.text===void 0&&e.source===void 0&&r.push(`${i}: a markdown widget needs text or a source`),e.text!==void 0&&(typeof e.text!=`string`||e.text.length>Z.markdownChars)&&r.push(`${i}: text must be at most ${Z.markdownChars} characters`);let t=e.source===void 0?void 0:pr(e.source,i,n,r);return r.length>s?void 0:{...c,type:a,...e.text===void 0?{}:{text:e.text},...t?{source:t}:{}}}let l=pr(e.source,i,n,r);if(a===`metric`)return e.unit!==void 0&&(typeof e.unit!=`string`||e.unit.length>16)&&r.push(`${i}: unit must be at most 16 characters`),e.precision!==void 0&&!ar(e.precision,0,6)&&r.push(`${i}: precision must be 0–6`),r.length>s||!l?void 0:{...c,type:a,source:l,...e.unit===void 0?{}:{unit:e.unit},...e.precision===void 0?{}:{precision:e.precision}};if(a===`table`)return e.columns!==void 0&&(!Array.isArray(e.columns)||e.columns.length>50||!e.columns.every(or))&&r.push(`${i}: columns must be at most 50 column names`),e.limit!==void 0&&!ar(e.limit,1,Z.tableRows)&&r.push(`${i}: limit must be 1–${Z.tableRows}`),r.length>s||!l?void 0:{...c,type:a,source:l,...e.columns===void 0?{}:{columns:e.columns},limit:e.limit??Z.defaultTableRows};let u=hr(e,i,r);if(!(r.length>s||!l||!u))return{...c,type:a,source:l,...u}}function hr(e,t,n){let r=n.length;return e.chart!==`line`&&e.chart!==`bar`&&n.push(`${t}: chart must be line or bar`),or(e.x)||n.push(`${t}: x must be a column name`),(!Array.isArray(e.y)||e.y.length<1||e.y.length>Z.chartSeries||!e.y.every(or))&&n.push(`${t}: y must be 1–${Z.chartSeries} column names`),n.length>r?void 0:{chart:e.chart,x:e.x,y:e.y}}function gr(e,t={}){if(!ir(e))return{ok:!1,problems:[`A dashboard must be a JSON object`]};if(e.v!==1)return{ok:!1,problems:[`v must be 1 (this console reads dashboard schema v1)`]};let n=dr(e,ur.dashboard,`The dashboard`);if(n)return{ok:!1,problems:[n]};let r=[];if(e.title!==void 0&&(typeof e.title!=`string`||e.title.length>Z.titleChars)&&r.push(`title must be at most ${Z.titleChars} characters`),e.refreshSeconds!==void 0&&!ar(e.refreshSeconds,Z.refreshMinSeconds,Z.refreshMaxSeconds)&&r.push(`refreshSeconds must be ${Z.refreshMinSeconds}–${Z.refreshMaxSeconds}`),!Array.isArray(e.widgets))return{ok:!1,problems:[...r,`widgets must be a list`]};if(e.widgets.length>Z.widgets)return{ok:!1,problems:[`A dashboard has at most ${Z.widgets} widgets`,...r]};let i=e.widgets.flatMap((e,n)=>mr(e,n,t.selfID,r)??[]);return new Set(i.map(e=>e.id)).size!==i.length&&r.unshift(`widget ids must be unique`),new Set(i.flatMap(e=>e.source?[fr(e.source)]:[])).size>Z.sources&&r.unshift(`A dashboard reads at most ${Z.sources} data sources (artifact + file)`),r.length?{ok:!1,problems:r}:{ok:!0,spec:{v:1,...e.title===void 0?{}:{title:e.title},refreshSeconds:e.refreshSeconds??Z.defaultRefreshSeconds,widgets:i}}}function _r(e,t,n){let r=e.columns.indexOf(t);if(r<0)return{ok:!1,error:`No column "${t}"`};let i=n.map(t=>e.columns.indexOf(t)),a=n.find((e,t)=>i[t]<0);if(a!==void 0)return{ok:!1,error:`No column "${a}"`};let o=e.rows.slice(0,Z.chartPoints);return{ok:!0,chart:{labels:o.map(e=>String(e[r]??``)),series:n.map((e,t)=>({name:e,values:o.map(e=>tr(e[i[t]])??null)})),truncated:e.truncated||e.rows.length>o.length}}}function vr(e){if(!ir(e))return{ok:!1,error:`A chart must be a JSON object`};if(e.v!==1)return{ok:!1,error:`v must be 1`};let t=dr(e,ur.chartSpec,`The chart`);if(t)return{ok:!1,error:t};let n=[],r=hr(e,`The chart`,n);if(!r)return{ok:!1,error:n[0]};if(e.title!==void 0&&(typeof e.title!=`string`||e.title.length>Z.titleChars))return{ok:!1,error:`title is too long`};let i=$n(e.data);if(!i)return{ok:!1,error:`data must be a table (a list of objects, a list of lists or {columns, rows})`};let a=_r(i,r.x,r.y);return a.ok?{ok:!0,kind:r.chart,...e.title===void 0?{}:{title:e.title},chart:a.chart}:a}function yr(e){let t=e&&typeof e==`object`?e:{},n=typeof t.status==`number`?t.status:0;return t.name===`NetworkError`||n===503||t.code===`offline`?{kind:`offline`,text:`Can't reach the hub; showing the last data loaded.`}:n===404||t.code===`not_found`?{kind:`not_found`,text:`The source artifact doesn't exist or you can't see it.`}:n===401||n===403?{kind:`forbidden`,text:`This device isn't allowed to read the source artifact.`}:n===422||t.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub.`}:t.name===`TooLargeError`||t.code===`too_large`?{kind:`too_large`,text:`The source file is larger than ${Z.sourceBytes/1024} KiB.`}:{kind:`error`,text:`Could not read the source: ${typeof t.message==`string`&&t.message?t.message:`HTTP ${n}`}`}}function br(e){let t=new Map;for(let n of e.widgets)n.source&&!t.has(fr(n.source))&&t.set(fr(n.source),{artifact:n.source.artifact,...n.source.path?{path:n.source.path}:{}});return[...t.values()]}function xr(e,t,n){let r=br(e),i=new Map(r.map(e=>[fr(e),{status:`loading`}])),a,o=!1,s=(e,t)=>{o||(i.set(e,t),n.onChange())},c=(e,t)=>{let r=i.get(e),a=n.now();s(e,r?.status===`ready`?{...r,error:t,failedAt:a}:{status:`error`,error:t,failedAt:a})};async function l(e){let r=fr(e);try{let{data:i,revisionNumber:a}=await t.read(e);i.ok?s(r,{status:`ready`,data:i,revisionNumber:a,loadedAt:n.now()}):c(r,{kind:`invalid`,text:i.error})}catch(e){c(r,yr(e))}}function u(){if(o)return Promise.resolve();if(a)return a;let e=[...r];return a=Promise.all(Array.from({length:Math.min(Z.concurrent,e.length)},async()=>{for(let t=e.shift();t;t=e.shift())await l(t)})).then(()=>{a=void 0}),a}return{refresh:u,bindings:()=>r,state:e=>i.get(e),get refreshing(){return a!==void 0},dispose(){o=!0}}}function Sr(e){if(!e.ok||e.format===`text`)return;if(e.format===`json`)return e.value;let{columns:t,rows:n}=e.value;return n.map(e=>Object.fromEntries(t.map((t,n)=>[t,e[n]??null])))}function Cr(e,t){return t===void 0?rr(e):$n(er(Sr(e),t))}function wr(e,t){let n=tr(e);if(n!==void 0)return t===void 0?String(Math.round(n*1e6)/1e6):n.toFixed(t);if(typeof e==`string`||typeof e==`boolean`)return String(e)}function Tr(e,t){switch(e.type){case`markdown`:return t.ok&&t.format===`text`?{kind:`markdown`,text:t.value.slice(0,Z.markdownChars)}:`This widget needs a Markdown or text source.`;case`metric`:{if(!t.ok||t.format===`text`)return`This widget needs JSON or CSV data.`;let n=wr(er(Sr(t),e.source.select??``),e.precision);return n===void 0?`No single value at "${e.source.select??``}".`:{kind:`metric`,text:n,...e.unit?{unit:e.unit}:{}}}case`table`:{let n=Cr(t,e.source.select);if(!n)return`This widget needs table data (CSV or a JSON list).`;let r=e.columns?e.columns.map(e=>n.columns.indexOf(e)).filter(e=>e>=0):n.columns.map((e,t)=>t);if(!r.length)return`None of the widget's columns are in the data.`;let i=n.rows.slice(0,e.limit).map(e=>r.map(t=>e[t]??null));return{kind:`table`,table:{columns:r.map(e=>n.columns[e]),rows:i,truncated:n.truncated||n.rows.length>i.length}}}case`chart`:{let n=Cr(t,e.source.select);if(!n)return`This widget needs table data (CSV or a JSON list).`;let r=_r(n,e.x,e.y);return r.ok?{kind:`chart`,chart:r.chart,type:e.chart}:r.error}}}function Er(e,t,n,r){if(e.type===`markdown`&&e.text!==void 0)return{status:`ready`,stale:!1,content:{kind:`markdown`,text:e.text}};if(!t||t.status===`loading`)return{status:`loading`};if(t.status===`error`)return{status:`error`,text:t.error.text};let i=Tr(e,t.data);return typeof i==`string`?{status:`error`,text:i}:{status:`ready`,stale:t.error!==void 0||n-t.loadedAt>Z.staleFactor*r,updatedAt:t.loadedAt,revisionNumber:t.revisionNumber,...t.error?{error:t.error.text}:{},content:i}}var Dr=y(`<a class="av-download btn small"rel=noopener> <span class=faint>(<!>)`),Or=y(`<div class=cv><div class=cv-head><span class=cv-name></span><span class=cv-lang></span><span class=cv-count> line</span></div><div class=cv-scroll tabindex=0 role=region><pre class=cv-code><code>`),kr=y(`<span class=cv-line><span class=cv-ln aria-hidden=true></span><span class=cv-tx>`),Ar=y(`<span>`),jr=y(`<pre class=av-text>`),Mr=y(`<div class=av-image-wrap><img class=av-image decoding=async referrerpolicy=no-referrer>`),Nr=y(`<p class=av-note>Only part of the data is shown (limits: rows, columns or cell length).`),Pr=y(`<div class=av-table-wrap><table class=av-table><thead><tr></tr></thead><tbody>`),Fr=y(`<th scope=col>`),Ir=y(`<tr>`),Lr=y(`<td>`),Rr=y(`<figure class=av-chart><svg viewBox="0 0 600 240"role=img preserveAspectRatio=none><line class=av-axis></line><text class=av-tick text-anchor=end></text><text class=av-tick text-anchor=end></text></svg><figcaption class=av-legend><button type=button class="btn small">`),zr=y(`<svg><text class=av-tick y=232 text-anchor=middle></svg>`,!1,!0,!1),Br=y(`<svg><rect class=av-bar></svg>`,!1,!0,!1),Vr=y(`<svg><polyline class=av-line fill=none stroke-width=2></svg>`,!1,!0,!1),Hr=y(`<span><i></i> `),Ur=y(`<div class=av-isolated role=note><p>This <!> artifact opens in the isolated viewer. It isn't shown inside the console, so its scripts and styles can't reach your hub session.`);function Wr(e){return e.path??`${e.mediaType} file`}var Gr=e=>e<1024?`${e} B`:`${Math.ceil(e/1024)} KiB`;function Kr(e){return(()=>{var t=Dr(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling;return i.nextSibling,T(t,()=>e.label??`Download ${Wr(e.file)}`,n),T(r,()=>Gr(e.file.bytes),i),C(n=>{var r=Je(e.artifactID,e.revisionID,e.file.hash),i=e.file.path?.split(`/`).pop()??``;return r!==n.e&&v(t,`href`,n.e=r),i!==n.t&&v(t,`download`,n.t=i),n},{e:void 0,t:void 0}),t})()}function qr(e){let[n,a]=s(!1),[o,c]=s(!1),l;P(()=>clearTimeout(l));let u=t(()=>St(F(e.lang,e.text))),d=()=>wt(e.file,e.lang),f=async()=>{await te(e.text)&&(c(!0),clearTimeout(l),l=setTimeout(()=>c(!1),1500))};return(()=>{var t=Or(),s=t.firstChild,c=s.firstChild,l=c.nextSibling,p=l.nextSibling,m=p.firstChild,h=s.nextSibling,g=h.firstChild,_=g.firstChild;return T(s,i(O,{name:`code`}),c),T(c,()=>d().name),T(l,()=>d().language),T(p,()=>u().length,m),T(p,()=>u().length===1?``:`s`,null),T(s,i(x,{icon:`wrap`,get label(){return n()?`Scroll long lines`:`Wrap long lines`},get"aria-pressed"(){return n()},onClick:()=>a(!n())}),null),T(s,i(x,{get icon(){return o()?`check`:`copy`},get label(){return o()?`Copied`:`Copy code`},onClick:()=>void f()}),null),T(_,i(N,{get each(){return u()},children:(e,t)=>(()=>{var n=kr(),a=n.firstChild,o=a.nextSibling;return v(a,`data-n`,t+1),T(o,i(N,{get each(){return e()},children:e=>i(r,{get when(){return e().kind},get fallback(){return e().text},get children(){return(()=>{var t=Ar();return T(t,()=>e().text),C(()=>k(t,`tok-${e().kind}`)),t})()}})})),n})()})),C(r=>{var i=!!n(),a=String(String(u().length).length),o=e.file?.path,s=`${d().name} source`,l=e.lang||void 0;return i!==r.e&&t.classList.toggle(`wrap`,r.e=i),a!==r.t&&D(t,`--cv-digits`,r.t=a),o!==r.a&&v(c,`title`,r.a=o),s!==r.o&&v(h,`aria-label`,r.o=s),l!==r.i&&v(g,`data-lang`,r.i=l),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t})()}function Jr(e){return(()=>{var t=jr();return T(t,()=>e.text),t})()}function Yr(e){let n=t(t=>(t&&URL.revokeObjectURL(t),URL.createObjectURL(new Blob([e.bytes],{type:e.mediaType}))));return P(()=>URL.revokeObjectURL(n())),(()=>{var t=Mr(),r=t.firstChild;return C(t=>{var i=n(),a=e.alt;return i!==t.e&&v(r,`src`,t.e=i),a!==t.t&&v(r,`alt`,t.t=a),t},{e:void 0,t:void 0}),t})()}var Xr=e=>e==null?``:String(e);function Zr(e){return(()=>{var t=Pr(),n=t.firstChild,a=n.firstChild,o=a.firstChild,s=a.nextSibling;return T(o,i(g,{get each(){return e.table.columns},children:e=>(()=>{var t=Fr();return T(t,e),t})()})),T(s,i(N,{get each(){return e.table.rows},children:e=>(()=>{var t=Ir();return T(t,i(N,{get each(){return e()},children:e=>(()=>{var t=Lr();return T(t,()=>Xr(e())),C(()=>k(t,typeof e()==`number`?`num`:void 0)),t})()})),t})()})),T(t,i(r,{get when(){return e.table.truncated},get children(){return Nr()}}),null),C(()=>v(n,`aria-label`,e.label)),t})()}var Qr=600,$r=240,Q={l:44,r:8,t:10,b:28},ei=[`var(--accent)`,`#c26b1a`,`#6b5bd6`,`#2f8f4e`];function ti(e){let n=t(()=>e.chart.series.flatMap(e=>e.values.filter(e=>e!==null))),a=t(()=>Math.min(0,...n())),o=t(()=>{let e=Math.max(0,...n());return e===a()?a()+1:e}),c=e=>Q.t+($r-Q.t-Q.b)*(1-(e-a())/(o()-a())),l=()=>Math.max(1,e.chart.labels.length),u=()=>(Qr-Q.l-Q.r)/l(),d=e=>Q.l+u()*e+u()/2,f=()=>Math.max(1,Math.ceil(l()/10)),p=()=>`${e.type===`bar`?`Bar`:`Line`} chart${e.title?` of ${e.title}`:``}: ${e.chart.series.map(e=>e.name).join(`, `)} by ${e.chart.labels.length} points`,[m,h]=s(!1),_=()=>({columns:[``,...e.chart.series.map(e=>e.name)],rows:e.chart.labels.map((t,n)=>[t,...e.chart.series.map(e=>e.values[n]??null)]),truncated:e.chart.truncated});return(()=>{var t=Rr(),n=t.firstChild,s=n.firstChild,l=s.nextSibling,y=l.nextSibling,b=n.nextSibling,x=b.firstChild;return T(l,()=>ni(o())),T(y,()=>ni(a())),T(n,i(N,{get each(){return e.chart.labels},children:(e,t)=>i(r,{get when(){return t%f()===0},get children(){var n=zr();return T(n,()=>e().slice(0,12)),C(()=>v(n,`x`,d(t))),n}})}),null),T(n,i(N,{get each(){return e.chart.series},children:(t,n)=>e.type===`bar`?i(N,{get each(){return t().values},children:(t,a)=>{let o=()=>u()*.8/e.chart.series.length;return i(r,{get when(){return t()!==null},get children(){var e=Br();return C(r=>{var i=Q.l+u()*a+u()*.1+o()*n,s=Math.min(c(t()),c(0)),l=Math.max(1,o()-1),d=Math.max(1,Math.abs(c(0)-c(t()))),f=ei[n%ei.length];return i!==r.e&&v(e,`x`,r.e=i),s!==r.t&&v(e,`y`,r.t=s),l!==r.a&&v(e,`width`,r.a=l),d!==r.o&&v(e,`height`,r.o=d),f!==r.i&&v(e,`fill`,r.i=f),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),e}})}}):(()=>{var e=Vr();return C(r=>{var i=ei[n%ei.length],a=t().values.flatMap((e,t)=>e===null?[]:[`${d(t)},${c(e)}`]).join(` `);return i!==r.e&&v(e,`stroke`,r.e=i),a!==r.t&&v(e,`points`,r.t=a),r},{e:void 0,t:void 0}),e})()}),null),T(b,i(g,{get each(){return e.chart.series},children:(e,t)=>(()=>{var n=Hr(),r=n.firstChild;return r.nextSibling,T(n,()=>e.name,null),C(e=>D(r,`background`,ei[t()%ei.length])),n})()}),x),x.$$click=()=>h(!m()),T(x,()=>m()?`Hide data`:`Show data`),T(t,i(r,{get when(){return m()},get children(){return i(Zr,{get table(){return _()}})}}),null),C(e=>{var t=p(),r=Q.l,i=Qr-Q.r,u=c(0),d=c(0),f=Q.l-6,h=c(o())+4,g=Q.l-6,_=c(a())+4,b=m();return t!==e.e&&v(n,`aria-label`,e.e=t),r!==e.t&&v(s,`x1`,e.t=r),i!==e.a&&v(s,`x2`,e.a=i),u!==e.o&&v(s,`y1`,e.o=u),d!==e.i&&v(s,`y2`,e.i=d),f!==e.n&&v(l,`x`,e.n=f),h!==e.s&&v(l,`y`,e.s=h),g!==e.h&&v(y,`x`,e.h=g),_!==e.r&&v(y,`y`,e.r=_),b!==e.d&&v(x,`aria-expanded`,e.d=b),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0}),t})()}function ni(e){let t=Math.abs(e);return t>=1e6?`${Math.round(e/1e5)/10}M`:t>=1e3?`${Math.round(e/100)/10}k`:String(Math.round(e*100)/100)}function ri(e){return(()=>{var t=Ur(),n=t.firstChild,r=n.firstChild.nextSibling;return r.nextSibling,T(n,()=>e.kind===`app`?`app`:`HTML`,r),T(t,()=>e.children,null),t})()}_([`click`]);var ii=y(`<div class="av-note err"role=alert><p>This dashboard can't be shown:</p><ul>`),ai=y(`<li>`),oi=y(`<h2 class=dash-title>`),si=y(`<section class=dash><div class=dash-bar><span class=faint>Refreshes every <!> while open · <!> of at most <!> sources</span><button type=button class="btn small dash-refresh">Refresh</button></div><div class=dash-grid>`),ci=y(`<article><header class=dash-head><h3>`),li=y(`<span class=dash-stale>Stale · updated `),ui=y(`<span class="dash-rev faint">rev `),di=y(`<p class=faint role=status>Loading…`),fi=y(`<p class=dash-error>`),pi=y(`<small> `),mi=y(`<p class=dash-metric><span>`);function hi(e){let n=t(()=>{try{return gr(JSON.parse(e.text),{selfID:e.artifactID})}catch{return{ok:!1,problems:[`The dashboard is not valid JSON.`]}}});return i(r,{get when(){return M(()=>!!n().ok)()&&n()},keyed:!0,get fallback(){return(()=>{var e=ii(),t=e.firstChild.nextSibling;return T(t,i(g,{get each(){return n().problems.slice(0,8)},children:e=>(()=>{var t=ai();return T(t,e),t})()})),e})()},children:t=>i(gi,{get spec(){return t.spec},get source(){return e.source}})})}function gi(e){let[t,a]=s(0),[o,c]=s(Date.now()),[l,u]=s(!1),d=xr(e.spec,e.source,{now:Date.now,onChange:()=>a(e=>e+1)}),f=e.spec.refreshSeconds*1e3,p=async()=>{u(!0),await d.refresh(),c(Date.now()),u(!1)},m=()=>typeof document>`u`||document.visibilityState===`visible`;n(()=>{p();let e=setInterval(()=>m()&&void p(),f),t=setInterval(()=>c(Date.now()),15e3),n=()=>m()&&void p();document.addEventListener(`visibilitychange`,n),P(()=>{clearInterval(e),clearInterval(t),document.removeEventListener(`visibilitychange`,n),d.dispose()})});let h=e=>(t(),Er(e,e.source?d.state(fr(e.source)):void 0,o(),f));return(()=>{var t=si(),n=t.firstChild,a=n.firstChild,s=a.firstChild.nextSibling,c=s.nextSibling.nextSibling,u=c.nextSibling.nextSibling;u.nextSibling;var f=a.nextSibling,m=n.nextSibling;return T(n,i(r,{get when(){return e.spec.title},get children(){var t=oi();return T(t,()=>e.spec.title),t}}),a),T(a,(()=>{var t=M(()=>e.spec.refreshSeconds<120);return()=>t()?`${e.spec.refreshSeconds} s`:`${Math.round(e.spec.refreshSeconds/60)} min`})(),s),T(a,()=>d.bindings().length,c),T(a,()=>Z.sources,u),f.$$click=()=>void p(),T(m,i(g,{get each(){return e.spec.widgets},children:e=>(()=>{var t=ci(),n=t.firstChild,r=n.firstChild;return T(r,()=>e.title??``),T(n,i(_i,{get view(){return h(e)},get now(){return o()}}),null),T(t,i(vi,{get view(){return h(e)},get title(){return e.title}}),null),C(n=>{var r=`dash-widget span-${e.width}`,i=e.id,a=e.title??e.id;return r!==n.e&&k(t,n.e=r),i!==n.t&&v(t,`data-widget`,n.t=i),a!==n.a&&v(t,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})),C(n=>{var r=e.spec.title??`Dashboard`,i=l(),a=l();return r!==n.e&&v(t,`aria-label`,n.e=r),i!==n.t&&v(f,`aria-busy`,n.t=i),a!==n.a&&(f.disabled=n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}function _i(e){let t=()=>e.view.status===`ready`?e.view:void 0;return i(r,{get when(){return M(()=>t()?.updatedAt!==void 0)()&&t()},children:t=>i(r,{get when(){return t().stale},get fallback(){return(()=>{var e=ui();return e.firstChild,T(e,()=>t().revisionNumber,null),e})()},get children(){var n=li();return n.firstChild,T(n,()=>j(t().updatedAt,e.now),null),C(()=>v(n,`title`,t().error??`The data is older than two refresh intervals.`)),n}})})}function vi(e){return i(d,{get children(){return[i(u,{get when(){return e.view.status===`loading`},get children(){return di()}}),i(u,{get when(){return M(()=>e.view.status===`error`)()&&e.view},children:e=>(()=>{var t=fi();return T(t,()=>e().text),t})()}),i(u,{get when(){return M(()=>e.view.status===`ready`)()&&e.view},children:t=>{let n=()=>t().content;return i(d,{get children(){return[i(u,{get when(){return M(()=>n().kind===`metric`)()&&n()},children:e=>(()=>{var t=mi(),n=t.firstChild;return T(n,()=>e().text),T(t,i(r,{get when(){return e().unit},get children(){var t=pi();return t.firstChild,T(t,()=>e().unit,null),t}}),null),t})()}),i(u,{get when(){return M(()=>n().kind===`table`)()&&n()},children:t=>i(Zr,{get table(){return t().table},get label(){return e.title}})}),i(u,{get when(){return M(()=>n().kind===`chart`)()&&n()},children:t=>i(ti,{get chart(){return t().chart},get type(){return t().type},get title(){return e.title}})}),i(u,{get when(){return M(()=>n().kind===`markdown`)()&&n()},children:e=>i(I,{get text(){return e().text}})})]}})}})]}})}_([`click`]);var yi=()=>new p(404,`No such artifact`),bi={async artifact(e){let t=$e(await A(Ge(e)));if(!t)throw yi();return t},async revisions(e,t){return nt(await A(Ke(e,t)))},async revision(e,t){let n=tt(await A(qe(e,t)));if(!n)throw yi();return n},async bytes(e,t,n,r){return pt(await c(Je(e,t,n.hash)),r)},async revise(e,t,n){let r=tt(await(await c(`${Ge(e)}/revisions`,{method:`POST`,json:t,headers:{"idempotency-key":n}})).json());if(!r)throw new p(500,`The hub answered without a revision`);return r},async archive(e,t,n){let r=$e(await(await c(`${Ge(e)}/${n?`archive`:`unarchive`}`,{method:`POST`,json:{expectedRevision:t}})).json());if(!r)throw new p(500,`The hub answered without an artifact`);return r}},xi=[`application/json`,`text/csv`,`text/markdown`,`text/plain`];function Si(e,t){return t===void 0?(e.entry===void 0?void 0:e.blobs.find(t=>t.path===e.entry))??e.blobs.find(e=>xi.includes(e.mediaType))??e.blobs[0]:e.blobs.find(e=>e.path===t)}function Ci(e=bi){return{async read(t){let n=await e.artifact(t.artifact),r=await e.revision(n.id,n.latestRevisionID),i=Si(r,t.path);if(!i)return{data:{ok:!1,error:t.path?`The source has no file "${t.path}"`:`The source has no files`},revisionNumber:r.number};if(!xi.includes(i.mediaType))return{data:{ok:!1,error:`A ${i.mediaType} file isn't data`},revisionNumber:r.number};let a=await e.bytes(n.id,r.id,i,Z.sourceBytes);return{data:nr(new TextDecoder().decode(a),i.mediaType),revisionNumber:r.number}}}}var wi=y(`<p class=faint>`),Ti=y(`<p class=faint>Nothing else in this workspace yet.`),Ei=y(`<button type=button class="btn small">Load more`),Di=y(`<aside class=av-outputs><h2>More in </h2><ul></ul><a class=av-outputs-all>All in the library`),Oi=y(`<li><a></a> <button type=button class="btn small">Pane</button><span class=faint> · `);function ki(e){let[t,a]=s({status:`loading`}),o=oe(e.source??ue,a),c={workspace:e.workspaceID,type:``};n(()=>o.load(c));let l=()=>{let n=t();return n.status===`ready`?n.items.filter(t=>t.id!==e.excludeID):[]};return(()=>{var n=Di(),a=n.firstChild;a.firstChild;var s=a.nextSibling,c=s.nextSibling;return T(a,()=>e.workspaceName,null),T(n,i(r,{get when(){return t().status===`error`},get children(){var e=wi();return T(e,()=>t().error.text),e}}),s),T(n,i(r,{get when(){return M(()=>t().status===`ready`)()&&!l().length},get children(){return Ti()}}),s),T(s,i(g,{get each(){return l()},children:e=>(()=>{var t=Oi(),n=t.firstChild,r=n.nextSibling.nextSibling,i=r.nextSibling,a=i.firstChild;return T(n,()=>e.title||`Untitled`),r.$$click=()=>ne(e.id),T(i,()=>xt[e.kind],a),T(i,()=>j(e.updatedAt),null),C(t=>{var i=le(e.id),a=`Open ${e.title||`Untitled`} in a pane`;return i!==t.e&&v(n,`href`,t.e=i),a!==t.t&&v(r,`aria-label`,t.t=a),t},{e:void 0,t:void 0}),t})()})),T(n,i(r,{get when(){return M(()=>t().status===`ready`)()&&t().more},get children(){var e=Ei();return e.$$click=()=>o.more(),e}}),c),C(t=>{var r=`More in ${e.workspaceName}`,i=`/artifacts?workspace=${encodeURIComponent(e.workspaceID)}`;return r!==t.e&&v(n,`aria-label`,t.e=r),i!==t.t&&v(c,`href`,t.t=i),t},{e:void 0,t:void 0}),n})()}_([`click`]);var Ai=y(`<header class=av-bar><span class=av-bar-gap>`),ji=y(`<div><div class=av-empty><p class=muted role=status>Loading…`),Mi=y(`<button type=button class="btn small">Retry`),Ni=y(`<div><div class=av-empty><p class=av-note role=alert> `),Pi=y(`<span class=av-chip>Archived`),Fi=y(`<a class="icon-btn av-wide"rel=noopener aria-label=Download>`),Ii=y(`<div class=av-old role=status><span>You're viewing revision <!>.</span><button type=button class="btn small">Back to latest`),Li=y(`<span class=av-draft>You have an unsaved draft of this artifact<!>.`),Ri=y(`<div class=av-status>`),zi=y(`<p class=av-desc>`),Bi=y(`<div><header class=av-bar><span class=av-kind role=img></span><span class=av-bar-gap></span><div class=av-tools></div></header><div class=av-split><div class=av-stage><div class="av-card av-body">`),Vi=y(`<span>`),Hi=y(`<div class=av-conflict role=alert><p>Someone changed this artifact since you opened it<!>. Your draft is kept; the latest revision is shown below. Save over it, or discard your draft.</p><button type=button class="btn small primary">Save over latest</button> <button type=button class="btn small">Discard draft`),Ui=y(`<section class=av-latest aria-label="Latest revision"><p class=av-latest-head>Latest revision`),Wi=y(`<form class=av-edit><div class=av-edit-head><span class=av-edit-name>Editing </span><span class="faint av-wide">New revision on revision </span><span class=av-bar-gap></span><button type=button class="btn small"title="Close the editor; the draft stays on this device">Close</button><button type=button class="btn small">Discard</button><button type=submit class="btn small primary">Save</button></div><textarea>`),Gi=y(`<p class="av-note err av-edit-err"role=alert>`),Ki=y(`<div class=av-files><h4>Files in revision </h4><ul>`),qi=y(`<section class=av-details role=dialog aria-label=Details><div class=av-details-head><h3>Details</h3><button type=button class=icon-btn aria-label="Close details"title="Close details"></button></div><dl class=av-facts>`),Ji=y(`<dt>`),Yi=y(`<dd>`),Xi=y(`<li>`),Zi=y(`<p class="av-note av-pad">This revision has no files.`),Qi=y(`<div class=av-download-card><p class=av-note>`),$i=y(`<p class="muted av-pad"role=status>Loading…`),ea=y(`<article class=av-prose>`),ta=y(`<div class=av-pad>`),na=y(`<p class="muted av-pad">Loading…`),ra=y(`<p class="av-note av-pad"role=alert>`),ia=y(`<p class="av-note err av-pad"role=alert>`),aa=y(`<p class="av-note err av-pad">This file isn't a table (CSV or a JSON list).`),oa=y(`<p class="av-note err av-pad">This chart can't be shown: `),sa=new Set([`markdown`,`text`,`code`,`table`,`chart`,`dashboard`]),ca={markdown:`doc`,code:`code`,image:`image`,table:`table`,chart:`chart`,dashboard:`grid`,html:`app`,app:`app`,file:`file`};function la(){try{return window.localStorage}catch{return}}function ua(){return`console-${[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function da(e){let a=e.source??bi,o=Ci(a),[c,l]=s(),[f,p]=s(),[m,g]=s([]),[_,y]=s(),[b,w]=s(),[E,D]=s(),[A,j]=s({status:`loading`}),[N,F]=s(),[I,ee]=s(new Map),[L,R]=s(),[ne,ie]=s(0),[ae,oe]=s(!1),[se,le]=s(!1),[ue,de]=s(!1),fe;P(()=>clearTimeout(fe));let pe=0,z=t(()=>{let e=c(),t=E();return e&&t?ut(e.kind,t):void 0}),me=()=>m()[0]?.number,he=()=>E()!==void 0&&E().id===c()?.latestRevisionID,ge=()=>oe(!!la()?.getItem(vt(e.id))),B=()=>{let e=A();return e.status===`ready`?e.text:void 0};async function V(t,n){let r=++pe;j({status:`loading`});try{let i=await a.revision(t.id,n);if(r!==pe)return;D(i),e.onRevision?.(i);let o=ut(t.kind,i);if(!o.file||!sa.has(o.mode)&&o.mode!==`image`)return void j({status:`none`});let s=await a.bytes(t.id,i.id,o.file,o.mode===`image`?K.imageBytes:K.textBytes);if(r!==pe)return;j({status:`ready`,bytes:s,...o.mode===`image`?{}:{text:new TextDecoder().decode(s)}})}catch(e){r===pe&&j({status:`error`,error:mt(e)})}}async function _e(e,t){try{let n=await a.revisions(e,t);g(e=>{let r=t?[...e,...n.items]:n.items,i=new Set;return r.filter(e=>!i.has(e.id)&&i.add(e.id))}),y(n.cursor)}catch{}}async function H(){try{let t=await a.artifact(e.id);l(t),p(void 0),e.onArtifact?.(t),await Promise.all([_e(t.id),V(t,b()??t.latestRevisionID)])}catch(e){p(mt(e))}}n(()=>{ge(),ce().then(e=>ee(new Map(e.map(e=>[e.id,e.title])))),H(),e.control?.({view:e=>ve(e===c()?.latestRevisionID?void 0:e),reload:()=>{w(void 0),H()}})});let ve=e=>{w(e),F(void 0);let t=c();t&&V(t,e??t.latestRevisionID)};function ye(){let e=c(),t=E(),n=z(),r=A();e&&t&&n?.file&&r.status===`ready`&&r.text!==void 0&&(F(void 0),R(bt({artifactID:e.id,baseRevisionID:t.id,file:n.file,original:r.text},{revise:a.revise,storage:la(),newKey:ua,onChange:()=>ie(e=>e+1)})))}let be=()=>(ne(),L()?.state());async function xe(e=!1){let t=L();if(!t)return;if(e){let e=c()?.latestRevisionID;e&&t.rebase(e)}let n=await t.save();n?(R(void 0),w(void 0),await H(),F({text:`Saved revision ${n.number}.`})):t.state().status===`conflict`&&(w(void 0),await H()),ge()}let Se=e=>{e&&L()?.discard(),R(void 0),ge()};async function Ce(){let e=B();e!==void 0&&await te(e)&&(de(!0),clearTimeout(fe),fe=setTimeout(()=>de(!1),1500))}function U(){let e=c(),t=E(),n=z()?.file;if(!e||!t||!n)return;let r=document.createElement(`a`);r.href=Je(e.id,t.id,n.hash),r.download=n.path?.split(`/`).pop()??``,r.rel=`noopener`,document.body.append(r),r.click(),r.remove()}async function W(t){let n=c();if(n&&a.archive)try{let r=await a.archive(n.id,n.revision,t);l(r),e.onArtifact?.(r),F({text:t?`Archived: read only until you unarchive it.`:`Unarchived.`})}catch(e){F({text:mt(e).text,error:!0}),H()}}let we=e=>e.workspaceID?I().get(e.workspaceID)??re(e.workspaceID,I()):`Private`,Te=()=>{let e=c(),t=E(),n=A();return!!e&&!!t&&he()&&!L()&&n.status===`ready`&&n.text!==void 0&&gt(e,t)},Ee=()=>{let e=c(),t=[{label:`Details`,run:()=>le(!0)}];return B()!==void 0&&t.push({label:`Copy contents`,run:()=>void Ce()}),z()?.file&&t.push({label:`Download ${Wr(z().file)}`,run:U}),e&&a.archive&&t.push(`sep`,e.state===`archived`?{label:`Unarchive`,run:()=>void W(!1)}:{label:`Archive`,hint:`read only, reversible`,run:()=>void W(!0)}),t},De=()=>(()=>{var t=Ai(),n=t.firstChild;return T(t,()=>e.lead,n),T(t,i(S,{get component(){return e.variant===`pane`?`h2`:`h1`},class:`av-title`,children:`Artifact`}),n),T(t,()=>e.trailing,null),t})();return i(d,{get children(){return[i(u,{get when(){return f()},children:t=>(()=>{var n=Ni(),a=n.firstChild,o=a.firstChild,s=o.firstChild;return T(n,De,a),T(o,()=>t().text,s),T(o,i(r,{get when(){return t().kind===`offline`||t().kind===`error`},get children(){var e=Mi();return e.$$click=()=>void H(),e}}),null),C(()=>k(n,`av ${e.variant??`page`}`)),n})()}),i(u,{get when(){return!c()},get children(){var t=ji(),n=t.firstChild;return T(t,De,n),C(()=>k(t,`av ${e.variant??`page`}`)),t}}),i(u,{get when(){return c()},children:t=>(()=>{var n=Bi(),a=n.firstChild,s=a.firstChild,c=s.nextSibling,l=c.nextSibling,u=a.nextSibling,d=u.firstChild,f=d.firstChild;return T(a,()=>e.lead,s),T(s,i(O,{get name(){return ca[t().kind]}})),T(a,i(S,{get component(){return e.variant===`pane`?`h2`:`h1`},class:`av-title`,get title(){return t().title||`Untitled`},get children(){return t().title||`Untitled`}}),c),T(a,i(fa,{get revs(){return m()},get current(){return E()},get latestID(){return t().latestRevisionID},get more(){return _()!==void 0},onMore:()=>void _e(t().id,_()),onView:e=>ve(e===t().latestRevisionID?void 0:e)}),c),T(a,i(r,{get when(){return t().state===`archived`},get children(){return Pi()}}),c),T(l,i(r,{get when(){return B()!==void 0},get children(){return i(x,{class:`av-wide`,get icon(){return ue()?`check`:`copy`},get label(){return ue()?`Copied`:`Copy`},onClick:()=>void Ce()})}}),null),T(l,i(r,{get when(){return M(()=>!!E())()&&z()?.file},get children(){var e=Fi();return T(e,i(O,{name:`download`})),C(n=>{var r=Je(t().id,E().id,z().file.hash),i=z().file.path?.split(`/`).pop()??``,a=`Download ${Wr(z().file)}`;return r!==n.e&&v(e,`href`,n.e=r),i!==n.t&&v(e,`download`,n.t=i),a!==n.a&&v(e,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}}),null),T(l,i(r,{get when(){return Te()},get children(){return i(x,{icon:`edit`,label:`Edit`,onClick:ye})}}),null),T(l,()=>e.actions,null),T(l,i(h,{label:`Artifact actions`,items:Ee}),null),T(l,()=>e.trailing,null),T(n,i(r,{get when(){return se()},get children(){return i(pa,{get artifact(){return t()},get revision(){return E()},get plan(){return z()},get where(){return we(t())},onClose:()=>le(!1)})}}),u),T(d,i(r,{get when(){return M(()=>!!E())()&&!he()},get children(){var e=Ii(),t=e.firstChild,n=t.firstChild.nextSibling;n.nextSibling;var r=t.nextSibling;return T(e,i(O,{name:`info`}),t),T(t,()=>E().number,n),T(t,(()=>{var e=M(()=>!!me());return()=>e()?` of ${Math.max(me(),E().number)}`:``})(),n),r.$$click=()=>ve(void 0),e}}),f),T(d,i(r,{get when(){return M(()=>!!ae())()&&!L()||N()},get children(){var e=Ri();return T(e,i(r,{get when(){return M(()=>!!ae())()&&!L()},get children(){var e=Li(),t=e.firstChild.nextSibling;return t.nextSibling,T(e,()=>Te()?`; Edit to continue it`:``,t),e}}),null),T(e,i(r,{get when(){return N()},children:e=>(()=>{var t=Vi();return T(t,()=>e().text),C(n=>{var r=e().error?`av-note err`:`av-saved`,i=e().error?`alert`:`status`;return r!==n.e&&k(t,n.e=r),i!==n.t&&v(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e}}),f),T(d,i(r,{get when(){return t().description},get children(){var e=zi();return T(e,()=>t().description),e}}),f),T(f,i(r,{get when(){return M(()=>!!L())()&&be()},get fallback(){return i(ma,{get artifact(){return t()},get revision(){return E()},get plan(){return z()},get content(){return A()},get isolated(){return e.isolated},dash:o})},children:n=>(()=>{var a=Wi(),s=a.firstChild,c=s.firstChild;c.firstChild;var l=c.nextSibling;l.firstChild;var u=l.nextSibling.nextSibling,d=u.nextSibling,f=d.nextSibling,p=s.nextSibling;return a.addEventListener(`submit`,e=>{e.preventDefault(),xe()}),T(s,i(O,{name:`edit`}),c),T(c,(()=>{var e=M(()=>!!z()?.file);return()=>e()?Wr(z().file):t().title})(),null),T(l,()=>m().find(e=>e.id===n().baseRevisionID)?.number??`?`,null),u.$$click=()=>Se(!1),d.$$click=()=>Se(!0),T(a,i(r,{get when(){return n().status===`conflict`},get children(){var e=Hi(),t=e.firstChild,r=t.firstChild.nextSibling;r.nextSibling;var i=t.nextSibling,a=i.nextSibling.nextSibling;return T(t,()=>n().restored?` (your draft was saved on an older revision)`:``,r),i.$$click=()=>void xe(!0),a.$$click=()=>Se(!0),e}}),p),T(a,i(r,{get when(){return M(()=>n().status===`error`)()&&n().error},children:e=>(()=>{var t=Gi();return T(t,()=>e().text),t})()}),p),p.$$keydown=e=>{e.key===`s`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),xe())},p.$$input=e=>L()?.setDraft(e.currentTarget.value),v(p,`spellcheck`,!1),T(a,i(r,{get when(){return n().status===`conflict`},get children(){var n=Ui();return n.firstChild,T(n,i(ma,{get artifact(){return t()},get revision(){return E()},get plan(){return z()},get content(){return A()},get isolated(){return e.isolated},dash:o}),null),n}}),null),C(e=>{var r=n().status===`saving`||n().status===`conflict`,i=n().status===`saving`,a=`Edit ${t().title||`artifact`}`;return r!==e.e&&(f.disabled=e.e=r),i!==e.t&&v(f,`aria-busy`,e.t=i),a!==e.a&&v(p,`aria-label`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),C(()=>p.value=n().draft),a})()})),T(u,()=>e.side,null),C(r=>{var i=`av ${e.variant??`page`}`,a=t().kind,o=xt[t().kind],c=xt[t().kind],l=L()?`edit`:z()?.mode;return i!==r.e&&k(n,r.e=i),a!==r.t&&v(n,`data-kind`,r.t=a),o!==r.a&&v(s,`aria-label`,r.a=o),c!==r.o&&v(s,`title`,r.o=c),l!==r.i&&v(f,`data-mode`,r.i=l),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),n})()})]}})}function fa(e){let t=()=>[{section:`Versions`},...e.revs.map(t=>({label:`Revision ${t.number}${t.id===e.latestID?` (latest)`:``}`,hint:`${rt(t.author)} · ${j(t.createdAt)}`,checked:t.id===e.current?.id,run:()=>e.onView(t.id)})),...e.more?[`sep`,{label:`Older revisions…`,run:()=>e.onMore()}]:[]];return i(r,{get when(){return e.current},children:n=>i(h,{get label(){return`Version: revision ${n().number}${n().id===e.latestID?` (latest)`:``}. Show versions`},get class(){return`av-ver${n().id===e.latestID?``:` old`}`},align:`left`,get text(){return[`v`,M(()=>n().number),i(O,{name:`down`})]},items:t})})}function pa(e){let t,a,o=t=>{t.key===`Escape`&&(t.preventDefault(),e.onClose())},s=n=>{!t.contains(n.target)&&!n.target.closest?.(`.menu`)&&e.onClose()};n(()=>{document.addEventListener(`keydown`,o),setTimeout(()=>document.addEventListener(`mousedown`,s),0),a.focus()}),P(()=>{document.removeEventListener(`keydown`,o),document.removeEventListener(`mousedown`,s)});let c=()=>Tt(e.artifact,{...e.artifact.workspaceID?{workspaceName:e.where}:{},when:j});return(()=>{var n=qi(),o=n.firstChild,s=o.firstChild.nextSibling,l=o.nextSibling,u=t;typeof u==`function`?m(u,n):t=n,s.$$click=()=>e.onClose();var d=a;return typeof d==`function`?m(d,s):a=s,T(s,i(O,{name:`close`})),T(n,i(r,{get when(){return e.artifact.description},get children(){var t=zi();return T(t,()=>e.artifact.description),t}}),l),T(l,i(g,{get each(){return c()},children:e=>[(()=>{var t=Ji();return T(t,()=>e.label),t})(),(()=>{var t=Yi();return T(t,()=>e.value),t})()]})),T(n,i(r,{get when(){return M(()=>!!e.revision)()&&e.plan?.files.length},get children(){var t=Ki(),n=t.firstChild;n.firstChild;var r=n.nextSibling;return T(n,()=>e.revision.number,null),T(r,i(g,{get each(){return e.plan.files},children:t=>(()=>{var n=Xi();return T(n,i(Kr,{get artifactID(){return e.artifact.id},get revisionID(){return e.revision.id},file:t,get label(){return Wr(t)}})),n})()})),t}}),null),T(n,i(r,{get when(){return e.artifact.workspaceID},children:t=>i(ki,{get workspaceID(){return t()},get workspaceName(){return e.where},get excludeID(){return e.artifact.id}})}),null),n})()}function ma(e){let n=()=>e.content.status===`ready`?e.content.text??``:``,a=t(()=>e.plan?.mode===`table`&&e.plan.file?rr(nr(n(),e.plan.file.mediaType)):void 0),s=t(()=>{if(e.plan?.mode===`chart`)try{return vr(JSON.parse(n()))}catch{return{ok:!1,error:`The chart is not valid JSON.`}}});return i(d,{get children(){return[i(u,{get when(){return!e.plan||!e.revision},get children(){return i(r,{get when(){return M(()=>e.content.status===`error`)()&&e.content},get fallback(){return na()},children:e=>(()=>{var t=ra();return T(t,()=>e().error.text),t})()})}}),i(u,{get when(){return e.plan.mode===`isolated`},get children(){return i(r,{get when(){return e.isolated},get fallback(){return i(ri,{get kind(){return e.artifact.kind}})},children:t=>i(r,{get when(){return e.revision?.id},keyed:!0,children:n=>t()(e.artifact,e.revision)})})}}),i(u,{get when(){return e.plan.mode===`empty`},get children(){return Zi()}}),i(u,{get when(){return e.plan.mode===`download`},get children(){var t=Qi(),n=t.firstChild;return T(t,i(O,{name:`file`}),n),T(n,()=>e.plan.note),T(t,i(Kr,{get artifactID(){return e.artifact.id},get revisionID(){return e.revision.id},get file(){return e.plan.file}}),null),t}}),i(u,{get when(){return e.content.status===`loading`},get children(){return $i()}}),i(u,{get when(){return M(()=>e.content.status===`error`)()&&e.content},children:e=>(()=>{var t=ia();return T(t,()=>e().error.text),t})()}),i(u,{get when(){return e.plan.mode===`markdown`},get children(){var e=ea();return T(e,i(I,{get text(){return n()}})),e}}),i(u,{get when(){return e.plan.mode===`text`},get children(){var e=ea();return T(e,i(Jr,{get text(){return n()}})),e}}),i(u,{get when(){return e.plan.mode===`code`},get children(){return i(qr,o({get lang(){return e.plan.lang??``},get text(){return n()}},()=>e.plan.file?{file:e.plan.file}:{}))}}),i(u,{get when(){return M(()=>e.plan.mode===`image`&&e.content.status===`ready`)()&&e.content},children:t=>i(Yr,{get bytes(){return t().bytes},get mediaType(){return e.plan.file.mediaType},get alt(){return e.artifact.title}})}),i(u,{get when(){return e.plan.mode===`table`},get children(){return i(r,{get when(){return a()},get fallback(){return aa()},children:t=>i(Zr,{get table(){return t()},get label(){return e.artifact.title}})})}}),i(u,{get when(){return M(()=>e.plan.mode===`chart`)()&&s()},children:t=>i(r,{get when(){return M(()=>!!t().ok)()&&t()},get fallback(){return(()=>{var e=oa();return e.firstChild,T(e,()=>t().error,null),e})()},children:t=>(()=>{var n=ta();return T(n,i(ti,{get chart(){return t().chart},get type(){return t().kind},get title(){return t().title??e.artifact.title}})),n})()})}),i(u,{get when(){return e.plan.mode===`dashboard`},get children(){var t=ta();return T(t,i(hi,{get artifactID(){return e.artifact.id},get text(){return n()},get source(){return e.dash}})),t}})]}})}_([`click`,`input`,`keydown`]);var ha=y(`<section class=cmp-consent aria-label="Requests from this artifact">`),ga=y(`<p role=status><span><span class=cmp-quote>“<!>”</span> `),_a=y(`<p class="cmp-note err"role=status>`),va=y(`<select class=aai-action aria-label="Declared action"><option value>Choose an action…`),ya=y(`<p class=cmp-note role=status>`),ba=y(`<p class="cmp-note err"role=alert>`),xa=y(`<form class=cmp-card role=group aria-label="AI request from the artifact"><p class=cmp-card-head><span class=cmp-card-icon aria-hidden=true></span><span><strong></strong> <span class=faint>(<!>)</span> asks for AI help</span></p><blockquote class=cmp-instruction></blockquote><p class=cmp-note>Written by the artifact, not by you. Nothing is sent unless you send it. The handler you choose gets this text and a read-only copy of <!>; the artifact gets back only the answer, or that an edit awaits your review. Edits still need your Accept under AI requests.</p><div class=cmp-row><div class=aai-seg role=radiogroup aria-label="Request type"></div></div><div class=cmp-actions><button type=button class="btn small">Decline</button><button type=submit class="btn primary small">`),Sa=y(`<label class=aai-seg-item><input type=radio>`),Ca=y(`<option>`),wa={ask:`Ask`,"propose-edit":`Edit`,"run-action":`Action`},Ta={ask:`Ask (answer only)`,"propose-edit":`Propose an edit (you review it)`,"run-action":`Run a declared action`},Ea={sending:`Sending…`,running:`Sent: the answer goes back to the artifact when the handler finishes (see AI requests).`,answered:`Answered: the artifact received the answer.`,proposed:`Proposed: review and Accept it under AI requests; the artifact only knows an edit awaits review.`,declined:`Declined: the artifact was told no.`,revoked:`Withdrawn: this view of the artifact ended.`,conflict:`Not sent: the artifact changed since this view opened. Reload the artifact to ask again.`,failed:`Not completed: see AI requests for why.`,cancelled:`Cancelled.`};function Da(e){let t=e.handler;return t.session?L().find(e=>e.id===t.session)?.machineOnline??!1:t.launch?.machine?(R.machines??[]).some(e=>e.id===t.launch.machine&&e.online):e.online}function Oa(e){let t=()=>e.feed.requests().filter(e=>e.status===`awaiting`),n=()=>e.feed.requests().filter(e=>e.status!==`awaiting`).slice(-3);return i(r,{get when(){return t().length||n().length},get children(){var r=ha();return T(r,i(g,{get each(){return n()},children:e=>(()=>{var t=ga(),n=t.firstChild,r=n.firstChild,a=r.firstChild.nextSibling;return a.nextSibling,r.nextSibling,T(t,i(O,{name:`app`}),n),T(r,(()=>{var t=M(()=>e.instruction.length>80);return()=>t()?`${e.instruction.slice(0,80)}…`:e.instruction})(),a),T(n,()=>Ea[e.status],null),C(n=>{var r=`cmp-done ${e.status}`,i=e.status;return r!==n.e&&k(t,n.e=r),i!==n.t&&v(t,`data-status`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),T(r,i(g,{get each(){return t()},children:t=>i(ka,{request:t,get title(){return e.feed.title},get revName(){return e.feed.revName()},get state(){return e.state},onPick:()=>e.feed.reloadHandlers(),onApprove:n=>e.feed.approve(t.id,n),onDecline:()=>e.feed.decline(t.id)})}),null),r}})}function ka(e){let[n,a]=s(`ask`),[o,c]=s(``),[l,u]=s(``),[d,f]=s(!1),[p,m]=s(),h=()=>e.state()?.handlers??[],_=()=>e.state()?.actions??[],y=t(()=>h().find(e=>e.key===o())),b=()=>!!o()&&(n()!==`run-action`||!!l()),x=`cmp-kind-${e.request.id}`;async function S(t){if(t.preventDefault(),!b()||d())return;f(!0),m(void 0);let r=o(),i=await e.onApprove({kind:n(),handlerKey:r,...n()===`run-action`?{action:l()}:{}});f(!1),i?kt(Ht(),r):m(e.state()?.sendError?.text??`Not sent.`)}return(()=>{var t=xa(),s=t.firstChild,f=s.firstChild,m=f.nextSibling.firstChild,w=m.nextSibling.nextSibling,E=w.firstChild.nextSibling;E.nextSibling;var D=s.nextSibling,k=D.nextSibling,A=k.firstChild.nextSibling;A.nextSibling;var j=k.nextSibling,N=j.firstChild,P=j.nextSibling,F=P.firstChild,I=F.nextSibling;return t.addEventListener(`submit`,S),T(f,i(O,{name:`app`})),T(m,()=>e.title),T(w,()=>e.revName,E),T(D,()=>e.request.instruction),T(k,()=>e.revName,A),T(t,i(r,{get when(){return e.state()?.status===`error`},get children(){var t=_a();return T(t,()=>e.state()?.error?.text??`AI requests aren't available.`),t}}),j),T(N,i(g,{each:[`ask`,`propose-edit`,`run-action`],children:e=>{let t=()=>e===`run-action`&&!_().length;return(()=>{var r=Sa(),i=r.firstChild;return i.addEventListener(`change`,()=>a(e)),v(i,`name`,x),i.value=e,T(r,()=>wa[e],null),C(a=>{var o=n()===e,s=!!t(),c=Ta[e],l=Ta[e],u=t();return o!==a.e&&r.classList.toggle(`on`,a.e=o),s!==a.t&&r.classList.toggle(`disabled`,a.t=s),c!==a.a&&v(r,`title`,a.a=c),l!==a.o&&v(i,`aria-label`,a.o=l),u!==a.i&&(i.disabled=a.i=u),a},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),C(()=>i.checked=n()===e),r})()}})),T(j,i(r,{get when(){return n()===`run-action`},get children(){var e=va();return e.firstChild,e.addEventListener(`change`,e=>u(e.currentTarget.value)),T(e,i(g,{get each(){return _()},children:e=>(()=>{var t=Ca();return t.value=e,T(t,e),t})()}),null),C(()=>e.value=l()),e}}),null),T(t,i(Ut,{get handlers(){return h()},get value(){return o()},get onPick(){return e.onPick},onChange:c}),P),T(t,i(r,{get when(){return M(()=>!!y())()&&!Da(y())},get children(){var e=ya();return T(e,()=>y().kind===`session`?`That session is offline: the request is queued and delivered when it reconnects.`:`That machine is offline: the new session starts when it's back.`),e}}),P),F.$$click=()=>e.onDecline(),T(I,()=>d()?`Sending…`:`Send request`),T(t,i(r,{get when(){return p()},get children(){var e=ba();return T(e,p),e}}),null),C(t=>{var n=d(),r=!b()||d()||e.state()?.status!==`ready`,i=d();return n!==t.e&&(F.disabled=t.e=n),r!==t.t&&(I.disabled=t.t=r),i!==t.a&&v(I,`aria-busy`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),t})()}_([`click`]);var Aa={waiting:2,answerChars:8e3},ja=class extends Error{code;constructor(e,t){super(t),this.code=e,this.name=`ConsentRefusal`}},Ma={denied:`The user declined this request`,revoked:`This view ended; the request was withdrawn`,conflict:`The artifact changed since this view opened; reload it to ask again`,cancelled:`The request was cancelled`,failed:`The AI request failed`,rate_limited:`At most ${Aa.waiting} requests can wait for the user at once`},Na=e=>new ja(e,Ma[e]),Pa=new Set([`succeeded`,`failed`,`cancelled`]);function Fa(e){let t=e.now??Date.now,n=[],r=new Map,i=!1,a=0,o=()=>e.onChange(n),s=e=>n.find(t=>t.id===e),c=(e,t)=>{n=n.map(n=>n.id===e?{...n,...t}:n),o()},l=(e,t,n)=>{let i=r.get(e);r.delete(e),c(e,{status:t}),i&&(n instanceof ja?i.reject(n):i.resolve(n))},u=e=>e.status===`awaiting`||e.status===`sending`||e.status===`running`;function d(e){if(e.state===`cancelled`)return{status:`cancelled`,result:Na(`cancelled`)};if(e.state!==`succeeded`)return{status:`failed`,result:Na(`failed`)};if(e.kind===`propose-edit`)return{status:`proposed`,result:{status:`proposed`}};let t=e.answer??``,n=t.length>Aa.answerChars;return{status:`answered`,result:{status:`answered`,answer:n?t.slice(0,Aa.answerChars):t,...n?{truncated:!0}:{}}}}return{ask(s){if(i)return Promise.reject(Na(`revoked`));if(n.filter(e=>e.status===`awaiting`).length>=Aa.waiting)return Promise.reject(Na(`rate_limited`));let c=`req_${++a}`;return new Promise((i,a)=>{r.set(c,{resolve:i,reject:a}),n=[...n,{id:c,instruction:s,revisionID:e.revisionID,status:`awaiting`,at:t()}],o()})},requests:()=>n,async approve(t,n){let r=s(t);if(i||!r||r.status!==`awaiting`||!n.handlerKey||n.kind===`run-action`&&(!n.action||!e.actions().includes(n.action))||n.kind!==`run-action`&&n.action!==void 0)return!1;if(e.latestRevisionID()!==e.revisionID)return l(t,`conflict`,Na(`conflict`)),!1;c(t,{status:`sending`,kind:n.kind});let a;try{a=await e.submit({kind:n.kind,instruction:r.instruction,handlerKey:n.handlerKey,...n.action?{action:n.action}:{},baseRevisionID:e.revisionID})}catch{a=void 0}if(s(t)?.status!==`sending`)return!1;if(!a)return l(t,`failed`,Na(`failed`)),!1;if(c(t,{status:`running`,jobID:a.id}),Pa.has(a.state)){let e=d(a);l(t,e.status,e.result)}return!0},decline(e){s(e)?.status===`awaiting`&&l(e,`declined`,Na(`denied`))},jobs(e){if(!i)for(let t of n){if(t.status!==`running`||!t.jobID)continue;let n=e.find(e=>e.id===t.jobID);if(!n||!Pa.has(n.state))continue;let r=d(n);l(t.id,r.status,r.result)}},revoke(){if(!i){i=!0;for(let e of n)u(e)&&l(e.id,`revoked`,Na(`revoked`))}}}}var Ia=`hub.artifact-bridge`,La=[`resize`,`askAI`],$={messageChars:16384,instructionChars:2e3,idChars:64,ratePerSecond:10,burst:20,pendingAsks:2,minHeight:0,maxHeight:2e4,errorChars:200};function Ra(){let e=new Uint8Array(16);return globalThis.crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}var za=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype,Ba=[`p`,`v`,`channel`,`type`],Va={resize:[`height`],askAI:[`id`,`instruction`]},Ha=/^[A-Za-z0-9_-]+$/,Ua=new Set([`denied`,`revoked`,`conflict`,`cancelled`,`rate_limited`,`unsupported`]);function Wa(e,t){if(!za(e))return{ok:!1,reason:`malformed`};let n;try{n=JSON.stringify(e).length}catch{return{ok:!1,reason:`malformed`}}if(n>$.messageChars)return{ok:!1,reason:`too_large`};if(e.p!==`hub.artifact-bridge`)return{ok:!1,reason:`protocol`};if(e.v!==1)return{ok:!1,reason:`version`};if(e.channel!==t)return{ok:!1,reason:`channel`};let r=e.type;if(r!==`resize`&&r!==`askAI`)return{ok:!1,reason:`type`};let i=new Set([...Ba,...Va[r]]);if(Object.keys(e).some(e=>!i.has(e)))return{ok:!1,reason:`invalid`};if(r===`resize`){let t=e.height;return typeof t!=`number`||!Number.isFinite(t)||t<0?{ok:!1,reason:`invalid`}:{ok:!0,message:{type:r,height:t}}}let{id:a,instruction:o}=e;return typeof a!=`string`||a.length<1||a.length>$.idChars||!Ha.test(a)||typeof o!=`string`||o.trim()===``||o.length>$.instructionChars?{ok:!1,reason:`invalid`}:{ok:!0,message:{type:r,id:a,instruction:o}}}function Ga(e){let t=e.now??Date.now,n=e.origins??[`null`],r=new Set,i=$.burst,a=t(),o=!0,s={p:Ia,v:1,channel:e.channel},c=t=>{o&&e.post({...s,...t})},l=(e,t)=>c(t.ok?{type:`reply`,id:e,ok:!0,result:t.result}:{type:`reply`,id:e,ok:!1,error:{code:t.code,message:t.message.slice(0,$.errorChars)}}),u=t=>(e.onReject?.(t),!1),d=()=>{let e=t();return i=Math.min($.burst,i+(e-a)/1e3*$.ratePerSecond),a=e,i<1?!1:(--i,!0)},f=(t,n)=>{if(r.has(t))return l(t,{ok:!1,code:`invalid`,message:`That request ID is already in flight`});if(r.size>=$.pendingAsks)return l(t,{ok:!1,code:`rate_limited`,message:`At most ${$.pendingAsks} requests at once`});let i=e.onAskAI;if(!i)return l(t,{ok:!1,code:`unsupported`,message:`Ask AI isn't available for this artifact view`});r.add(t),Promise.resolve().then(()=>i(n)).then(e=>l(t,{ok:!0,result:e}),e=>{let n=e?.code;l(t,{ok:!1,code:typeof n==`string`&&Ua.has(n)?n:`failed`,message:e instanceof Error?e.message:`The request failed`})}).finally(()=>r.delete(t))};return{receive(t){if(!o)return!1;let r=e.source();if(r==null||t.source!==r)return u(`source`);if(!n.includes(t.origin))return u(`origin`);if(!d())return u(`rate`);let i=Wa(t.data,e.channel);if(!i.ok)return u(i.reason);let a=i.message;return a.type===`resize`?e.onResize?.(Math.min($.maxHeight,Math.max($.minHeight,Math.ceil(a.height)))):f(a.id,a.instruction),!0},init(e){c({type:`init`,artifactID:e.artifactID,revisionID:e.revisionID,files:e.files.map(e=>({...e.path===void 0?{}:{path:e.path},mediaType:e.mediaType,bytes:e.bytes})),capabilities:[...La]})},dispose(){o=!1,r.clear()}}}var Ka=`allow-scripts`,qa=[`camera`,`microphone`,`geolocation`,`display-capture`,`clipboard-read`,`clipboard-write`,`fullscreen`,`payment`,`usb`,`serial`,`hid`,`midi`,`publickey-credentials-get`].map(e=>`${e} 'none'`).join(`; `),Ja=`/artifact-host/v1/`,Ya=/^\/artifact-host\/v1\/[A-Za-z0-9._-]+\/[A-Za-z0-9._/-]*$/;function Xa(e){let t=e;if(t&&typeof t==`object`&&t.capability&&typeof t.capability.id==`string`&&typeof t.capability.expiresAt==`number`&&typeof t.base==`string`&&typeof t.url==`string`&&t.base.startsWith(Ja)&&t.url.startsWith(t.base)&&Ya.test(t.url)&&Array.isArray(t.files))return{capability:t.capability,base:t.base,url:t.url,files:t.files.filter(e=>e&&typeof e.mediaType==`string`&&typeof e.bytes==`number`)}}function Za(e,t){let n=t?.error?.message,r=typeof n==`string`?n:void 0;return e===0?{kind:`error`,message:`The hub can't be reached. Check your connection and try again.`}:e===404?{kind:`error`,message:`This artifact or revision isn't available to you.`}:e===422?{kind:`error`,message:`This hub can't run interactive artifacts.`,unsupported:!0}:e===429?{kind:`error`,message:r??`Too many artifact views are open. Close some and try again.`}:e===400?{kind:`error`,message:r??`This artifact can't run in the artifact host.`}:{kind:`error`,message:r??`The artifact view failed (${e}).`}}function Qa(e,t){let n=t.fetch??globalThis.fetch.bind(globalThis),r=e=>t.onState?.(e),i=encodeURIComponent,a=!1,o,s,c,l=e=>void s?.receive(e),u=()=>{let e=c;c=void 0,e&&n(`/api/agent/artifact-host/${i(e)}`,{method:`DELETE`,credentials:`same-origin`,keepalive:!0}).catch(()=>{})},d=()=>{s?.dispose(),s=void 0,window.removeEventListener(`message`,l),o?.remove(),o=void 0,u()};return r({kind:`loading`}),(async()=>{let f;try{f=await n(`/api/agent/artifacts/${i(t.artifactID)}/revisions/${i(t.revisionID)}/host`,{method:`POST`,credentials:`same-origin`,headers:{"content-type":`application/json`},body:JSON.stringify({ttlSeconds:t.ttlSeconds??1800})})}catch{a||r(Za(0,void 0));return}let p=await f.json().catch(()=>void 0),m=f.status===201?Xa(p):void 0;if(a){m&&(c=m.capability.id,u());return}if(!m)return r(f.status===201?{kind:`error`,message:`The hub's answer wasn't an artifact view.`}:Za(f.status,p));c=m.capability.id;let h=document.createElement(`iframe`);h.setAttribute(`sandbox`,Ka),h.setAttribute(`credentialless`,``),h.setAttribute(`referrerpolicy`,`no-referrer`),h.setAttribute(`allow`,qa),h.title=t.title,h.className=`artifact-host-frame`,o=h,s=Ga({channel:Ra(),source:()=>h.contentWindow,...t.origins?{origins:t.origins}:{},post:e=>h.contentWindow?.postMessage(e,`*`),onResize:e=>h.style.height=`${Math.max(120,Math.min($.maxHeight,e))}px`,...t.onAskAI?{onAskAI:t.onAskAI}:{},...t.onReject?{onReject:t.onReject}:{}});let g=0;h.addEventListener(`load`,()=>{g++,g===1?(s?.init({artifactID:t.artifactID,revisionID:t.revisionID,files:m.files}),r({kind:`ready`})):(d(),r({kind:`stopped`,message:`The artifact tried to navigate away, so it was stopped. Reload to run it again.`}))}),window.addEventListener(`message`,l),h.src=m.url,e.append(h)})(),{iframe:()=>o,dispose(){a=!0,d()}}}var $a=y(`<p class=artifact-host-status role=status>Starting the artifact…`),eo=y(`<section class=artifact-host><p class=artifact-host-note>Runs isolated: no access to your hub session, cookies or the network.</p><div class=artifact-host-box>`),to=y(`<button type=button class=artifact-host-retry>Reload`),no=y(`<div class=artifact-host-status role=alert><p>`);function ro(e){let[t,a]=s({kind:`loading`}),[o,c]=s(0),l,u,d=()=>{u?.dispose(),u=Qa(l,{artifactID:e.artifactID,revisionID:e.revisionID,title:e.title,onState:a,...e.onAskAI?{onAskAI:e.onAskAI}:{}})};n(d),P(()=>u?.dispose());let f=()=>{let e=t();return e.kind===`error`?{message:e.message,unsupported:e.unsupported===!0}:e.kind===`stopped`?{message:e.message,unsupported:!1}:void 0},p=()=>{c(o()+1),d()};return(()=>{var n=eo(),a=n.firstChild.nextSibling;T(n,i(r,{get when(){return t().kind===`loading`},get children(){return $a()}}),a),T(n,i(r,{get when(){return f()},keyed:!0,children:e=>(()=>{var t=no(),n=t.firstChild;return T(n,()=>e.message),T(t,i(r,{get when(){return!e.unsupported},get children(){var e=to();return e.$$click=p,e}}),null),t})()}),a);var s=l;return typeof s==`function`?m(s,a):l=a,C(r=>{var i=`${e.title} (interactive, isolated)`,s=t().kind===`loading`,c=o();return i!==r.e&&v(n,`aria-label`,r.e=i),s!==r.t&&v(n,`aria-busy`,r.t=s),c!==r.a&&v(a,`data-attempt`,r.a=c),r},{e:void 0,t:void 0,a:void 0}),n})()}_([`click`]);var io=y(`<div class=cmp-interactive><p class=cmp-disclose aria-label="What this artifact may do"><span><strong>Sandboxed.</strong> This artifact may: resize its frame; ask for AI help on <!> — each request waits for your consent in the AI panel, and you choose who handles it. It can't read your hub, sessions, cookies or other artifacts, or apply changes.`),ao=()=>Object.assign(Error(`Ask AI isn't available for this artifact`),{code:`unsupported`});function oo(e){let[t,n]=s([]),r=()=>e.state(),a=e.artifact.id,o=e.revision.id,c=Fa({artifactID:a,revisionID:o,latestRevisionID:()=>r()?.artifact?.latestRevisionID,actions:()=>r()?.actions??[],submit:({kind:t,instruction:n,handlerKey:r,action:i,baseRevisionID:a})=>e.ai.requestJob({kind:t,instruction:n,handlerKey:r,...i?{action:i}:{},baseRevisionID:a}),onChange:n});w(()=>c.jobs(r()?.jobs??[]));let l=()=>Ee(o,r()?.revisionNumbers??new Map),u={title:e.artifact.title||`This artifact`,requests:t,revName:l,approve:(e,t)=>c.approve(e,t),decline:e=>c.decline(e),reloadHandlers:()=>void e.ai.reloadHandlers()};e.onConsent(u,!0),P(()=>{c.revoke(`closed`),e.onConsent(u,!1)});let d=e=>r()?.status===`error`?Promise.reject(ao()):c.ask(e);return(()=>{var t=io(),n=t.firstChild,r=n.firstChild,s=r.firstChild.nextSibling.nextSibling;return s.nextSibling,T(t,i(ro,{artifactID:a,revisionID:o,get title(){return e.artifact.title||`Interactive artifact`},onAskAI:d}),n),T(n,i(O,{name:`lock`}),r),T(r,l,s),t})()}var so=y(`<div class=awb-scrim aria-hidden=true>`),co=y(`<div class=awb-resize role=separator aria-orientation=vertical aria-label="Resize AI panel"tabindex=0>`),lo=y(`<div class=awb-grab aria-hidden=true>`),uo=y(`<div class=awb-side>`),fo=y(`<button type=button class=icon-btn aria-label="Close AI panel"title="Close AI panel">`),po=y(`<div>`),mo=y(`<span class=awb-badge aria-hidden=true>`),ho=y(`<button type=button class=awb-ai-toggle aria-label="AI panel"><span class=awb-ai-text>AI`),go=720;function _o(e){let[t,a]=s(),c=He({source:Kn(),artifactID:e.id,onState:a});n(()=>void c.load()),P(()=>c.dispose());let[u,d]=s(),[f,p]=s(),h,g,_=Pt(Ht()),[y,x]=s(!1),[S,E]=s(!1),[D,A]=s(_.width??J.default),j=()=>!y()&&Ft(Ht(),{open:S(),width:D()}),N=(e=!S())=>{E(e),j()};n(()=>{let e=!1,t=()=>{let t=g.clientWidth;if(!t)return;let n=y(),r=t<go;(r!==n||!e)&&(x(r),E(r?!1:Pt(Ht()).open??!0)),e=!0,r||A(e=>Nt(e,t))};t();let n=new ResizeObserver(t);n.observe(g),P(()=>n.disconnect())});let F=()=>f()?.requests().filter(e=>e.status===`awaiting`).length??0;w(l(F,(e,t)=>e>(t??0)&&E(!0)));let I=()=>F()+(t()?.jobs.filter(e=>U(e)).length??0);function L(e){if(e.button!==0)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId);let n=g.getBoundingClientRect().right,r=g.clientWidth,i=e=>A(Nt(n-e.clientX,r)),a=()=>{t.removeEventListener(`pointermove`,i),t.removeEventListener(`pointerup`,a),t.removeEventListener(`pointercancel`,a),g.classList.remove(`resizing`),j()};g.classList.add(`resizing`),t.addEventListener(`pointermove`,i),t.addEventListener(`pointerup`,a),t.addEventListener(`pointercancel`,a)}function R(e){let t=g.clientWidth,n=e.shiftKey?64:24,r=e.key===`ArrowLeft`?D()+n:e.key===`ArrowRight`?D()-n:e.key===`Home`?J.min:e.key===`End`?J.max:void 0;r!==void 0&&(e.preventDefault(),A(Nt(r,t)),j())}let te=[i(r,{get when(){return M(()=>!!y())()&&S()},get children(){var e=so();return e.$$click=()=>N(!1),e}}),(()=>{var n=uo();return n.$$keydown=e=>{e.key===`Escape`&&y()&&!e.defaultPrevented&&(e.preventDefault(),N(!1))},T(n,i(r,{get when(){return!y()},get children(){var e=co();return e.$$keydown=R,e.$$pointerdown=L,C(t=>{var n=J.min,r=J.max,i=D();return n!==t.e&&v(e,`aria-valuemin`,t.e=n),r!==t.t&&v(e,`aria-valuemax`,t.t=r),i!==t.a&&v(e,`aria-valuenow`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),e}}),null),T(n,i(r,{get when(){return y()},get children(){return lo()}}),null),T(n,i(qn,{get artifactID(){return e.id},controller:{ai:c,state:t},get revisionID(){return u()},onShowRevision:e=>h?.view(e),onRevised:()=>h?.reload(),onContinueInSideChat:e=>e.handler.sessionID&&ee(e.handler.sessionID),get headerActions(){return(()=>{var e=fo();return e.$$click=()=>N(!1),T(e,i(O,{name:`close`})),e})()},get threadTail(){return i(r,{get when(){return f()},children:e=>i(Oa,{get feed(){return e()},state:t})})},get tailCount(){return f()?.requests().length??0}}),null),C(e=>{var t=!!y(),r=!S(),i=y()?void 0:{width:`${D()}px`};return t!==e.e&&n.classList.toggle(`sheet`,e.e=t),r!==e.t&&(n.hidden=e.t=r),e.a=b(n,i,e.a),e},{e:void 0,t:void 0,a:void 0}),n})()];return(()=>{var n=po(),a=g;return typeof a==`function`?m(a,n):g=n,T(n,i(da,o({get id(){return e.id},get variant(){return e.layout},control:e=>h=e,onRevision:e=>d(e.id),onArtifact:t=>e.onArtifact?.(t),isolated:(e,n)=>i(oo,{artifact:e,revision:n,ai:c,state:t,onConsent:(e,t)=>p(n=>t?e:n===e?void 0:n)})},()=>e.lead?{lead:e.lead}:{},{get actions(){return[M(()=>e.actions),(()=>{var e=ho(),t=e.firstChild;return e.$$click=()=>N(),T(e,i(O,{name:`spark`}),t),T(e,i(r,{get when(){return I()},get children(){var e=mo();return T(e,I),e}}),null),C(t=>{var n=S(),r=S()?`Hide the AI panel`:`Ask AI about this artifact`;return n!==t.e&&v(e,`aria-pressed`,t.e=n),r!==t.t&&v(e,`title`,t.t=r),t},{e:void 0,t:void 0}),e})()]}},()=>e.trailing?{trailing:e.trailing}:{},{side:te}))),C(t=>{var r=`awb ${e.layout}`,i=!!y(),a=e.id;return r!==t.e&&k(n,t.e=r),i!==t.t&&n.classList.toggle(`narrow`,t.t=i),a!==t.a&&v(n,`data-artifact`,t.a=a),t},{e:void 0,t:void 0,a:void 0}),n})()}_([`click`,`keydown`,`pointerdown`]);export{_o as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ArtifactPage-BS0gVkfu.js","assets/ui-C9Igxzjm.js","assets/index-DaH5GUdV.js","assets/pane-layout-CKC4I00k.js","assets/plural-Bspvoqfq.js","assets/index-WWuKfWxL.css","assets/ArtifactWorkbench-LkDyJ5Dv.js","assets/source-CvUHTc3O.js","assets/ArtifactWorkbench-9eTj1CeW.css"])))=>i.map(i=>d[i]);
2
- import{At as e,Bt as t,Ct as n,Dt as r,It as i,Pt as a,St as o,Tt as s,b as c,bt as l,ct as u,ft as d,gt as f,jt as p,kt as m,lt as h,ot as g,u as _,ut as v,y}from"./ui-C9Igxzjm.js";import{F as b,I as x,L as S,j as C,t as w,z as T}from"./index-DaH5GUdV.js";import{a as E,c as D,i as O,l as k,n as A,o as j,r as M,s as N,t as P}from"./source-CvUHTc3O.js";var F=f(`<p class="lib-intro muted">Everything your sessions made, across workspaces.`),I=f(`<div class=lib-filters><label><span>Workspace</span><select aria-label=Workspace><option value>All workspaces</option><option value=none>No workspace</option></select></label><label><span>Type</span><select aria-label=Type><option value>All types`),L=f(`<p class=muted role=status>Loading artifacts…`),R=f(`<option>`),z=f(`<p class="lib-note err"role=alert> <button type=button class="btn small">Retry`),B=f(`<p class=lib-note>`),V=f(`<ul class=lib-list aria-label=Artifacts>`),H=f(`<p class="lib-note err"role=alert>`),U=f(`<button type=button class="btn lib-more">Load more`),W=f(`<p class=lib-desc>`),G=f(`<li class=lib-row><a class=lib-title></a><button type=button class="btn small lib-pane">Open in pane</button><span class=lib-meta><span class=lib-kind></span><span></span><span>`),K=i(()=>C(()=>import(`./ArtifactPage-BS0gVkfu.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),q={markdown:`Markdown`,code:`Code`,image:`Image`,table:`Table`,chart:`Chart`,dashboard:`Dashboard`,html:`HTML`,app:`App`,file:`File`};function J(e){return r(n,{get when(){return e.rest[0]},keyed:!0,get fallback(){return r(X,{})},children:e=>r(K,{id:e})})}var Y=(e,t)=>e.workspace===t.workspace&&e.type===t.type;function X(){let i=e(()=>N(y().search),void 0,{equals:Y}),[u,f]=a({status:`loading`}),g=O(P,f);m(()=>g.load(i()));let[_,b]=a(new Map);t(()=>void A().then(e=>b(new Map(e.map(e=>[e.id,e.title])))));let x=e=>c(`/artifacts${j({...i(),...e})}`),S=e(()=>{let e=new Set(_().keys()),t=u();if(t.status===`ready`)for(let n of t.items)n.workspaceID&&e.add(n.workspaceID);let n=i().workspace;return n&&n!==`none`&&e.add(n),[...e].map(e=>({id:e,label:D(e,_())}))}),C=()=>{let e=u();return e.status===`error`&&e.error.kind!==`error`};return r(w,{title:`Artifacts`,get children(){return[F(),r(n,{get when(){return!C()},get children(){var e=I(),t=e.firstChild,n=t.firstChild.nextSibling,a=n.firstChild,o=a.nextSibling,s=t.nextSibling.firstChild.nextSibling,c=s.firstChild;return n.addEventListener(`change`,e=>x({workspace:e.currentTarget.value})),h(n,r(l,{get each(){return S()},children:e=>(()=>{var t=R();return h(t,()=>e.label),p(()=>t.selected=i().workspace===e.id),p(()=>t.value=e.id),t})()}),null),s.addEventListener(`change`,e=>x({type:e.currentTarget.value})),h(s,r(l,{get each(){return[...k]},children:e=>(()=>{var t=R();return t.value=e,h(t,()=>q[e]),p(()=>t.selected=i().type===e),t})()}),null),p(e=>{var t=i().workspace===``,n=i().workspace===`none`,r=i().type===``;return t!==e.e&&(a.selected=e.e=t),n!==e.t&&(o.selected=e.t=n),r!==e.a&&(c.selected=e.a=r),e},{e:void 0,t:void 0,a:void 0}),e}}),r(s,{get children(){return[r(o,{get when(){return u().status===`loading`},get children(){return L()}}),r(o,{get when(){return v(()=>u().status===`error`)()&&u()},children:e=>{let t=()=>e().error;return r(n,{get when(){return t().kind===`error`},get fallback(){return(()=>{var e=B();return h(e,()=>t().text),e})()},get children(){var e=z(),n=e.firstChild,r=n.nextSibling;return h(e,()=>t().text,n),r.$$click=()=>g.reload(),e}})}}),r(o,{get when(){return v(()=>u().status===`ready`)()&&u()},children:e=>{let t=()=>e();return[r(n,{get when(){return t().items.length},get fallback(){return(()=>{var e=B();return h(e,()=>E(i(),t().more)),e})()},get children(){var e=V();return h(e,r(l,{get each(){return t().items},children:e=>r(Q,{item:e,get names(){return _()}})})),e}}),r(n,{get when(){return t().moreError},get children(){var e=H();return h(e,()=>t().moreError),e}}),r(n,{get when(){return t().more},get children(){var e=U();return e.$$click=()=>g.more(),p(n=>{var r=t().loadingMore,i=t().loadingMore;return r!==n.e&&(e.disabled=n.e=r),i!==n.t&&d(e,`aria-busy`,n.t=i),n},{e:void 0,t:void 0}),e}})]}})]}})]}})}function Z(e,t){return e.workspaceID?D(e.workspaceID,t):`Private`}function Q(e){let t=()=>e.item;return(()=>{var i=G(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling.firstChild,c=s.nextSibling,l=c.nextSibling;return g(i,`dragend`,b),i.addEventListener(`dragstart`,e=>x(e,{target:{artifactID:t().id},label:t().title||`Untitled`})),h(a,()=>t().title||`Untitled`),o.$$click=()=>T(t().id),h(s,()=>q[t().kind]),h(c,()=>Z(t(),e.names)),h(l,()=>_(t().updatedAt)),h(i,r(n,{get when(){return t().description},get children(){var e=W();return h(e,()=>t().description),e}}),null),p(e=>{var n=t().id,r=!S(),s=M(t().id),c=`Open ${t().title||`Untitled`} in a pane`;return n!==e.e&&d(i,`data-artifact`,e.e=n),r!==e.t&&d(i,`draggable`,e.t=r),s!==e.a&&d(a,`href`,e.a=s),c!==e.o&&d(o,`aria-label`,e.o=c),e},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}u([`click`]);export{J as default};