dorkos 0.82.0 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/cli.js +8195 -2918
  3. package/dist/client/assets/{AboutPage-WmtNTKyp.js → AboutPage-BCPZr0Kt.js} +1 -1
  4. package/dist/client/assets/{AppearancePage-D7ZHuThu.js → AppearancePage-CJfCCSBv.js} +1 -1
  5. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-wUJCR3vL.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-Rg6hvlIh.js} +1 -1
  6. package/dist/client/assets/{BlintzCanvas-BXKUjnNQ.js → BlintzCanvas-CUSuHP_Q.js} +23 -23
  7. package/dist/client/assets/{CanvasCsvContent-BLAtnhdQ.js → CanvasCsvContent-B3gnlTxe.js} +1 -1
  8. package/dist/client/assets/{CanvasFileContent-VogEwZeM.js → CanvasFileContent-C2PyVniO.js} +2 -2
  9. package/dist/client/assets/{CanvasModel3dContent-DCTC7eOc.js → CanvasModel3dContent-BU77_Cf0.js} +2 -2
  10. package/dist/client/assets/{CodeMirrorDiff-Cpi43Atp.js → CodeMirrorDiff-Dsell_F0.js} +1 -1
  11. package/dist/client/assets/{CodeMirrorEditor-CviERH82.js → CodeMirrorEditor-DW4-Dilh.js} +1 -1
  12. package/dist/client/assets/ConnectionAccessLists-C6PZsSaI.js +1 -0
  13. package/dist/client/assets/ConnectionsPage-d1mpye9j.js +1 -0
  14. package/dist/client/assets/{ConventionPage-Coim_h2z.js → ConventionPage-Dto1Cfs1.js} +3 -3
  15. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-lqp1rgj8.js → FloatingTanStackRouterDevtools-CqogiFob-B8JWq1xE.js} +1 -1
  16. package/dist/client/assets/HandlePage-D9x_OTks.js +1 -0
  17. package/dist/client/assets/{LexicalField-DPe-aAXb.js → LexicalField-BymSjNLW.js} +1 -1
  18. package/dist/client/assets/{ManagesPage-BZS2TdZL.js → ManagesPage-D0ykMsYy.js} +1 -1
  19. package/dist/client/assets/{Model3dViewer-qs0tZlVU.js → Model3dViewer-DpzkRmRI.js} +1 -1
  20. package/dist/client/assets/NamePage-zm23PjaF.js +1 -0
  21. package/dist/client/assets/{NotificationsPage-gmiItsT0.js → NotificationsPage-C4Ol8NO6.js} +1 -1
  22. package/dist/client/assets/PermissionsPage-BEtP78wl.js +1 -0
  23. package/dist/client/assets/{PersonalityPopover-Dej6dI7y.js → PersonalityPopover-xJuTkLLJ.js} +1 -1
  24. package/dist/client/assets/PhotoPage-DlqgNQWM.js +1 -0
  25. package/dist/client/assets/{RoomsPage-3_HuXajd.js → RoomsPage-CeB_8k-m.js} +1 -1
  26. package/dist/client/assets/{RunsOnPopover-DbSoBFaL.js → RunsOnPopover-DT6aWGUP.js} +1 -1
  27. package/dist/client/assets/{SessionsPage-Dc_lqBom.js → SessionsPage-CoZhOOr9.js} +2 -2
  28. package/dist/client/assets/SkillsPage-C8bahTTW.js +1 -0
  29. package/dist/client/assets/{TasksPage-DvzTPDnw.js → TasksPage-CuFN--Cj.js} +1 -1
  30. package/dist/client/assets/ToolsPage-C5cJiedq.js +2 -0
  31. package/dist/client/assets/{TopologyGraph-C-BTnRXU.js → TopologyGraph-3rXK5QTB.js} +1 -1
  32. package/dist/client/assets/{agent-browser-DT3ABR4l.js → agent-browser-DaDOSH9H.js} +1 -1
  33. package/dist/client/assets/{highlighted-body-KPVGNVTW-CVFODbIg.js → highlighted-body-KPVGNVTW-CGXZGdzv.js} +1 -1
  34. package/dist/client/assets/{index-Dh-3NGE9.js → index-3xtUyFwf.js} +1 -1
  35. package/dist/client/assets/{index-CN1plkKF.js → index-4zzP7Qsj.js} +1 -1
  36. package/dist/client/assets/{index-DN8DYUEX.js → index-B2AJ6tkg.js} +1 -1
  37. package/dist/client/assets/{index-PRwgIfzy.js → index-B9qRpVKa.js} +3 -3
  38. package/dist/client/assets/{index-DDXrdlj0.js → index-BMR65QI4.js} +435 -425
  39. package/dist/client/assets/{index-BrgOWbRQ.js → index-BabO0TEf.js} +2 -2
  40. package/dist/client/assets/{index-BZaMgVdg.js → index-Bco5PCIk.js} +1 -1
  41. package/dist/client/assets/{index-CaZw0EC7.js → index-Bg2WUou4.js} +1 -1
  42. package/dist/client/assets/{index-B8oHvyN5.js → index-BiKxY3b6.js} +1 -1
  43. package/dist/client/assets/{index-ClnyhFUL.js → index-C4yxotik.js} +1 -1
  44. package/dist/client/assets/index-C9o2w5d_.js +1 -0
  45. package/dist/client/assets/{index-DiFc1nSZ.js → index-CUDguphz.js} +1 -1
  46. package/dist/client/assets/{index-DGr90Ygi.js → index-CUXXDUxt.js} +1 -1
  47. package/dist/client/assets/{index-DbsvSNI-.js → index-CXeb3CZh.js} +1 -1
  48. package/dist/client/assets/{index-D_gnDrw3.js → index-Cc8vG2jf.js} +1 -1
  49. package/dist/client/assets/{index-PrqHZbD1.js → index-Ce4ArSsI.js} +1 -1
  50. package/dist/client/assets/{index-ByCzVYkU.js → index-CemK6fUn.js} +1 -1
  51. package/dist/client/assets/{index-nEQI8fB2.js → index-Ck1VEXu0.js} +1 -1
  52. package/dist/client/assets/{index-W25uMuZA.js → index-D4OPDslu.js} +1 -1
  53. package/dist/client/assets/index-D9vFzXJR.js +1 -0
  54. package/dist/client/assets/{index-DjY4p5H5.js → index-DPpw-DKV.js} +1 -1
  55. package/dist/client/assets/{index-DiFG9bwF.js → index-DQdV5YDl.js} +1 -1
  56. package/dist/client/assets/{index-Cca_q1vW.js → index-DT376l6b.js} +3 -3
  57. package/dist/client/assets/index-DZ-SO2sz.css +1 -0
  58. package/dist/client/assets/{index-DIkpB_1y.js → index-DdpxcyXN.js} +1 -1
  59. package/dist/client/assets/{index-lciid4H8.js → index-FOgsYoCt.js} +1 -1
  60. package/dist/client/assets/{index-CgakJfik.js → index-MUbvQBCQ.js} +1 -1
  61. package/dist/client/assets/{index-DEA1uIWn.js → index-Rf5Yz119.js} +1 -1
  62. package/dist/client/assets/index-Ygg0URfB.js +1 -0
  63. package/dist/client/assets/{index-J8BMKg6y.js → index-bR1UztQC.js} +1 -1
  64. package/dist/client/assets/{index-Dm6W0lml.js → index-dDcguWyg.js} +1 -1
  65. package/dist/client/assets/{index-BuU7EEtP.js → index-i6WvrE1p.js} +1 -1
  66. package/dist/client/assets/{index-B3P6TTvD.js → index-oU5xA1N3.js} +3 -3
  67. package/dist/client/assets/{index-DF5k9E7k.js → index-pBoKYStL.js} +1 -1
  68. package/dist/client/assets/{index-ClmokM0M.js → index-rJuQe7Pl.js} +1 -1
  69. package/dist/client/assets/{index-DgjZhEr3.js → index-z0vAkUHY.js} +1 -1
  70. package/dist/client/assets/{index-kzr7_3di.js → index-zrZDQvuW.js} +11 -11
  71. package/dist/client/assets/{room-files-source-CSKgcbkn.js → room-files-source-BXF5daqI.js} +2 -2
  72. package/dist/client/assets/{soul-file-BHeAw6R9.js → soul-file-C1wnpxhH.js} +1 -1
  73. package/dist/client/assets/{use-mesh-update-BP_UXq60.js → use-mesh-update-CZIA8V07.js} +1 -1
  74. package/dist/client/assets/{use-personality-commit-DyJAMzzb.js → use-personality-commit-OViAsTwD.js} +1 -1
  75. package/dist/client/index.html +5 -4
  76. package/dist/drizzle/0107_productive_peter_parker.sql +5 -0
  77. package/dist/drizzle/0108_magical_morph.sql +2 -0
  78. package/dist/drizzle/0109_aspiring_union_jack.sql +5 -0
  79. package/dist/drizzle/0110_ambiguous_wendigo.sql +1 -0
  80. package/dist/drizzle/meta/0107_snapshot.json +8966 -0
  81. package/dist/drizzle/meta/0108_snapshot.json +8980 -0
  82. package/dist/drizzle/meta/0109_snapshot.json +8987 -0
  83. package/dist/drizzle/meta/0110_snapshot.json +8994 -0
  84. package/dist/drizzle/meta/_journal.json +28 -0
  85. package/dist/server/index.js +82622 -70829
  86. package/dist/server/index.js.map +2 -2
  87. package/package.json +1 -2
  88. package/dist/client/assets/ConnectionAccessLists-Be1b30nn.js +0 -1
  89. package/dist/client/assets/ConnectionsPage-BVN7GiuC.js +0 -1
  90. package/dist/client/assets/HandlePage-DnzPN8N_.js +0 -1
  91. package/dist/client/assets/NamePage-DyWqRDIe.js +0 -1
  92. package/dist/client/assets/PhotoPage-GtCoB8dK.js +0 -1
  93. package/dist/client/assets/SkillsPage-C0qMUkgs.js +0 -1
  94. package/dist/client/assets/ToolsPage-Cwc96TTa.js +0 -2
  95. package/dist/client/assets/index-BUxNND2H.js +0 -1
  96. package/dist/client/assets/index-C08DUVQ4.css +0 -1
  97. package/dist/client/assets/index-CGqPFWQw.js +0 -1
  98. package/dist/client/assets/index-CXWMnEDK.js +0 -1
@@ -1 +0,0 @@
1
- import{bu as x,j as s,B as h,bv as m,bw as b,bx as g,ac as p,by as j,bz as f,bA as S,bB as t,ag as v,bC as N,bD as r,bE as k,bF as I,bG as C,bH as w,r as c,bI as y,aa as M}from"./index-DDXrdlj0.js";import{bJ as K,bK as V,bL as J,bM as W,bN as X,bO as Y,bP as Z,bQ as ee,bR as se,bS as te,bT as ne,bU as ae,bV as oe,bW as re,bX as ie,bY as le,bZ as ce,b_ as ue,b$ as de,c0 as xe,c1 as he,c2 as me,c3 as be,c4 as ge,c5 as pe,c6 as je,c7 as fe,c8 as Se,c9 as ve,ca as Ne,cb as ke,cc as Ie}from"./index-DDXrdlj0.js";import{S as P}from"./ConnectionAccessLists-Be1b30nn.js";const R="I need access to another service. Ask me which service and actions you need, then request only that access.";function T({sessionId:e}){const a=x(),o=s.jsx(h,{variant:"secondary",size:"sm","data-testid":`ask-agent-for-connection-${e}`,onClick:()=>m(R),children:"Ask your agent"});return s.jsx(P,{sessionId:e,onManage:()=>void a({to:"/connections"}),emptyAction:o,footer:s.jsx("div",{className:"pt-1",children:o})})}const D=1e3;function z(){const[e]=b(),a=g(e??""),o=p(n=>n.rightPanelOpen);return e?s.jsx(U,{diagnostics:a,live:o,connectors:s.jsx(T,{sessionId:e})}):s.jsx("div",{className:"text-muted-foreground flex h-full items-center justify-center p-6 text-center text-xs",children:"Open a session to see what it is doing."})}function U({diagnostics:e,live:a=!0,connectors:o}){return s.jsxs("div",{"data-slot":"session-inspector",className:"flex h-full min-w-0 flex-col gap-4 overflow-y-auto p-3",children:[s.jsx(A,{diagnostics:e,live:a}),s.jsx(E,{diagnostics:e}),s.jsx($,{diagnostics:e}),s.jsx(G,{diagnostics:e}),o,s.jsxs("div",{className:"mt-auto pt-2",children:[s.jsx(j,{className:"mb-2"}),s.jsx(f,{diagnostics:e,className:"w-full justify-center"})]})]})}function A({diagnostics:e,live:a}){const o=_(e.lastEventAt,a),n=S[e.connectionState];return s.jsxs(l,{label:"Live",children:[s.jsx(t,{label:"Live updates",children:s.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[s.jsx("span",{"aria-hidden":!0,className:v("inline-block size-1.5 rounded-full",n.color,n.tasks&&"animate-breath")}),n.shortLabel]})}),s.jsx(t,{label:"Turn",children:L(e)}),s.jsx(t,{label:"Last event",children:e.lastEventSeq===0?"none yet":`seq ${e.lastEventSeq}`}),s.jsx(t,{label:"Resumed from",children:e.snapshotCursor===null?"not hydrated":`cursor ${e.snapshotCursor}`}),s.jsx(t,{label:"Last update",children:o===null?"—":`${N(o)} ago`}),s.jsx(t,{label:"Queued messages",children:String(e.queueDepth)})]})}function E({diagnostics:e}){return s.jsxs(l,{label:"Resolved",children:[s.jsx(t,{label:"Directory",wrap:!0,children:e.cwd??"—"}),s.jsx(t,{label:"Git",children:B(e.git)}),s.jsx(t,{label:"Runtime",children:e.runtime??"—"}),s.jsx(t,{label:"Model",wrap:!0,children:e.model??"—"}),e.selectedModel!==null&&e.selectedModel!==e.model&&s.jsx(t,{label:"Model selected",children:e.selectedModel}),s.jsx(t,{label:"Effort",children:e.effort??"—"}),s.jsx(t,{label:"Fast mode",children:e.fastMode?"on":"off"}),s.jsx(t,{label:"Permissions",children:e.permissionMode}),s.jsx(t,{label:"Session id",wrap:!0,children:e.sessionId}),s.jsx(t,{label:"DorkOS version",children:e.clientVersion??"—"})]})}function $({diagnostics:e}){var o;const a=(((o=e.contextUsage)==null?void 0:o.categories)??[]).filter(n=>n.tokens>0).sort((n,i)=>i.tokens-n.tokens);return s.jsxs(l,{label:"Usage",children:[s.jsx(t,{label:"Context",children:e.contextPercent===null?"—":`${e.contextPercent}% full`}),e.contextUsage&&s.jsxs(t,{label:"Tokens",children:[r(e.contextUsage.totalTokens)," / ",r(e.contextUsage.maxTokens)]}),a.map(n=>s.jsx(t,{label:n.name,indent:!0,swatch:n.color,"data-testid":`context-category-${n.name}`,children:r(n.tokens)},n.name)),e.cache===null?s.jsx(t,{label:"Cache",children:"nothing cached yet"}):s.jsxs(s.Fragment,{children:[s.jsx(t,{label:"Cache hit",children:`${k(e.cache)}%`}),s.jsx(t,{label:"Cache read",indent:!0,children:r(e.cache.readTokens)}),s.jsx(t,{label:"Cache written",indent:!0,children:r(e.cache.creationTokens)})]}),e.usage!==null&&I(e.usage)?s.jsx("div",{className:"pt-1",children:s.jsx(C,{usage:e.usage})}):s.jsx(t,{label:"Usage & cost",children:"no usage reported"})]})}function G({diagnostics:e}){const{running:a,finished:o}=w(e.activeSubagents);return s.jsxs(l,{label:"Subagents",children:[s.jsx(t,{label:"Running",children:O(a.length,e.runningSubagentCount)}),a.map(n=>s.jsx(u,{subagent:n},n.taskId)),o.length>0&&s.jsxs(s.Fragment,{children:[s.jsx(t,{label:"Finished this turn",children:String(o.length)}),o.map(n=>s.jsx(u,{subagent:n},n.taskId))]}),s.jsx(t,{label:"Available",children:e.subagents.length===0?"none":e.subagents.map(n=>n.name).join(", ")})]})}function u({subagent:e}){return s.jsxs("div",{"data-testid":`active-subagent-${e.taskId}`,"data-status":e.status,className:"space-y-0.5 py-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(y,{className:"text-muted-foreground size-3.5 shrink-0","aria-hidden":!0}),s.jsx("span",{className:"min-w-0 flex-1 truncate",children:e.description??e.taskId}),s.jsx(M,{size:"xs",variant:"secondary",className:"shrink-0",children:e.status})]}),s.jsxs("p",{className:"text-muted-foreground text-3xs pl-5 leading-tight",children:[e.toolUses??0," tool",e.toolUses===1?"":"s",e.lastToolName?` · last ${e.lastToolName}`:""]})]})}function l({label:e,children:a}){return s.jsxs("section",{className:"min-w-0",children:[s.jsx("h3",{className:"text-muted-foreground px-1 pb-1 text-xs font-medium tracking-wide uppercase",children:e}),s.jsx("div",{className:"space-y-1 px-1 text-xs",children:a})]})}function L(e){return e.triggerPending?"sending":e.streaming?"streaming":e.lifecycle??"not hydrated"}function O(e,a){const o=e===0?"none":String(e);return a===null||a===e?o:`${o} · server says ${a}`}function B(e){return e.state==="unknown"?"—":e.state==="no-repo"?"no repo":e.dirty?`${e.branch} · changed`:`${e.branch} · clean`}function _(e,a){const[o,n]=c.useState(()=>Date.now());return c.useEffect(()=>{if(e===null||!a)return;const i=()=>n(Date.now());i();const d=setInterval(i,D);return()=>clearInterval(d)},[e,a]),e===null?null:Math.max(0,o-e)}export{K as AutoModeConfirmDialog,V as AutonomyConfirmDialog,J as ConnectionItem,W as ContextItem,X as CwdItem,Y as GitStatusItem,Z as MakeDefaultStopLine,ee as ModelConfigPopover,se as PermissionModeItem,te as PlanModeItem,ne as ReadOnlyModeNotice,ae as RuntimeItem,z as SessionInspector,oe as SessionPopover,U as SessionReadout,re as StatusLine,ie as SubagentsItem,le as UsageRevealPopover,ce as UsageStatusItem,ue as applyStatusBudget,de as formatDiagnostics,xe as gitPromotionState,I as hasRenderableUsage,he as isGitStatusOk,w as partitionSubagents,me as resolveStatusBudget,be as selectPromotedItems,ge as useGitStatus,pe as useMakeDefaultStop,je as useReadOnlyModeHint,fe as useResolvedSessionRuntime,Se as useRuntimeChip,g as useSessionDiagnostics,ve as useSessionPermissionPicker,Ne as useSessionPopoverShortcut,ke as useStatusBarPins,Ie as useStatusBudget};
@@ -1 +0,0 @@
1
- import{r as T,j as e,aJ as R,aK as $,aG as A,aL as I,aM as z,ag as S,aN as O,B as C,aa as w,aO as P,aP as M,aQ as B,aR as L,aS as _,aT as k,aU as q,aV as h}from"./index-DDXrdlj0.js";import{aW as G,aX as J,aY as K,aZ as Q,a_ as W,a$ as Z}from"./index-DDXrdlj0.js";const H=new Set(["disabled","discovered","incompatible","invalid"]);function U({extension:t,onToggle:b,isToggling:m,onSetRunApproval:c,isSettingApproval:x}){const{manifest:n,status:i,scope:j,error:o,serverError:p,origin:g,approvedToRun:N}=t,[d,f]=T.useState(!1),u=!H.has(i),s=i==="incompatible",a=i==="invalid",r=i==="compile_error"||i==="activate_error",l=!s&&!a,v=!(g==="core"&&n.canDisable===!1),D=t.hasServerEntry||t.hasDataProxy,y=r?"Error":s?"Incompatible":a?"Invalid":null;return e.jsx(R,{"data-slot":"extension-card","data-testid":`extension-card-${t.id}`,radius:"lg",gap:"none",className:S(r&&"border-amber-500/50",(s||a)&&"opacity-70"),children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1 space-y-1.5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[r&&e.jsx($,{className:"size-4 shrink-0 text-amber-500","aria-hidden":"true"}),(s||a)&&!r&&e.jsx(A,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),!r&&!s&&!a&&e.jsx(I,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"font-medium",children:n.name}),e.jsxs("span",{className:"text-muted-foreground text-sm",children:["v",n.version]})]}),n.description&&e.jsx("p",{className:"text-muted-foreground text-sm",children:n.description}),s&&n.minHostVersion&&e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Requires DorkOS >= ",n.minHostVersion]}),r&&o&&e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:[i==="compile_error"?"Compilation error: ":"Activation failed: ",o.message]}),o.details&&e.jsxs("button",{type:"button",onClick:()=>f(E=>!E),className:"text-muted-foreground hover:text-foreground flex items-center gap-1 text-xs transition-colors","aria-expanded":d,children:[e.jsx(z,{className:S("size-3 transition-transform",d&&"rotate-180")}),d?"Hide details":"Show details"]}),d&&o.details&&e.jsx("pre",{className:"bg-muted mt-1 max-h-32 overflow-auto rounded-md p-2 text-xs",children:o.details})]}),p&&e.jsxs("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:["Server side failed to rebuild: ",p.message,". The previous version is still running."]}),g==="user"&&(N?e.jsxs("div",{className:"text-muted-foreground flex flex-wrap items-center gap-2 text-xs","data-testid":`extension-run-allowed-${t.id}`,children:[e.jsx(O,{className:"size-3.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:"You allowed this to run inside DorkOS."}),e.jsx("button",{type:"button",onClick:()=>c(t.id,!1),disabled:x,className:"hover:text-foreground underline underline-offset-2 disabled:opacity-50",children:"Stop it"})]}):e.jsxs("div",{className:"space-y-2 rounded-lg border border-amber-500/40 bg-amber-500/5 p-3","data-testid":`extension-needs-approval-${t.id}`,children:[e.jsx("p",{className:"text-sm font-medium",children:"This extension is waiting for you"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:D?"None of it has run yet. Allowing it lets its code run inside DorkOS, both on this machine, where it can reach anything DorkOS can, and on this page, signed in as you. Allow it only if you trust where it came from.":"None of it has run yet. Allowing it lets its code run on this page, signed in as you, so it can do anything you can do in DorkOS. Allow it only if you trust where it came from."}),e.jsx(C,{size:"sm",onClick:()=>c(t.id,!0),disabled:x,"data-testid":`extension-approve-run-${t.id}`,children:"Allow it to run"})]})),e.jsxs("div",{className:"text-muted-foreground flex flex-wrap items-center gap-2 text-xs",children:[e.jsx(w,{variant:"outline",children:j}),y&&e.jsx(w,{variant:y==="Error"?"destructive":"secondary","data-testid":`extension-health-${t.id}`,children:y}),n.author&&e.jsx("span",{children:n.author})]})]}),e.jsx("div",{className:"flex shrink-0 items-center pt-0.5",children:v?e.jsx(P,{checked:u,onCheckedChange:E=>b(t.id,E),disabled:!l||m,"aria-label":`${u?"Disable":"Enable"} ${n.name}`}):e.jsx(w,{variant:"secondary",title:"This extension is required and is always on","data-testid":`extension-required-${t.id}`,children:"Required"})})]})})}function X(){const{data:t=[],isLoading:b}=M(),m=B(),c=L(),x=_(),n=k(!0),i=k(!1),j=new Set([...m.variables?[m.variables]:[],...c.variables?[c.variables]:[]]),o=new Set([...n.isPending&&n.variables?[n.variables]:[],...i.isPending&&i.variables?[i.variables]:[]]);function p(s,a){(a?n:i).mutate(s,{onSuccess:l=>{const v=l.extension.manifest.name;h.success(a?`${v} can now run inside DorkOS`:`${v} has stopped running inside DorkOS`)},onError:l=>{h.error(a?"Couldn’t let it run.":"Couldn’t stop it running.",{description:l.message})}})}async function g(s,a){(a?m:c).mutate(s,{onError:l=>{h.error(a?"Couldn’t turn that on.":"Couldn’t turn that off.",{description:l.message})}})}function N(){x.mutate(void 0,{onSuccess:s=>{h.success(`Reloaded ${s.length} extension${s.length===1?"":"s"}`)},onError:s=>{h.error("Couldn’t reload your extensions.",{description:s.message})}})}if(b)return e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm",children:"Loading extensions…"});const d=t.filter(s=>s.origin==="core"),f=t.filter(s=>s.origin==="user"),u=s=>e.jsx(U,{extension:s,onToggle:g,isToggling:j.has(s.id),onSetRunApproval:p,isSettingApproval:o.has(s.id)},s.id);return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Extensions add new UI and capabilities to DorkOS. Core extensions ship with DorkOS; installed extensions live in"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:"~/.dork/extensions/"})," or"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:".dork/extensions/"})," in your project."]}),t.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"no-extensions",children:e.jsx("p",{children:"No extensions installed."})}):e.jsxs(e.Fragment,{children:[d.length>0&&e.jsxs("section",{className:"space-y-3","data-testid":"core-extensions-section",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Core extensions"}),e.jsx("div",{className:"space-y-3",children:d.map(u)})]}),e.jsxs("section",{className:"space-y-3","data-testid":"installed-extensions-section",children:[e.jsx("h3",{className:"text-sm font-semibold",children:"Installed extensions"}),f.length>0?e.jsx("div",{className:"space-y-3",children:f.map(u)}):e.jsxs("div",{className:"text-muted-foreground rounded-xl border border-dashed p-4 text-sm","data-testid":"no-installed-extensions",children:["No extensions installed yet. Browse"," ",e.jsx("span",{className:"text-foreground font-medium",children:"Marketplace"})," to add some."]})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(C,{variant:"outline",size:"sm",onClick:N,disabled:x.isPending,"data-testid":"reload-extensions-button",children:[e.jsx(q,{className:S("mr-2 size-4",x.isPending&&"animate-spin")}),"Reload extensions"]})})]})}export{G as ExtensionEventBridge,J as ExtensionLoader,K as ExtensionProvider,X as ExtensionsSettingsTab,Q as createExtensionAPI,W as createExtensionEventBridge,Z as useExtensions};