@kaitranntt/ccs 7.56.0-dev.4 → 7.56.0-dev.6

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 (67) hide show
  1. package/README.md +23 -17
  2. package/dist/config/unified-config-loader.d.ts +16 -0
  3. package/dist/config/unified-config-loader.d.ts.map +1 -1
  4. package/dist/config/unified-config-loader.js +56 -12
  5. package/dist/config/unified-config-loader.js.map +1 -1
  6. package/dist/config/unified-config-types.d.ts +56 -10
  7. package/dist/config/unified-config-types.d.ts.map +1 -1
  8. package/dist/config/unified-config-types.js +20 -2
  9. package/dist/config/unified-config-types.js.map +1 -1
  10. package/dist/ui/assets/{accounts-BSknYWh4.js → accounts-DD2Lodv2.js} +1 -1
  11. package/dist/ui/assets/{alert-dialog-BsXoK0Gt.js → alert-dialog-D21M1jKW.js} +1 -1
  12. package/dist/ui/assets/{api-C-ZXD7TW.js → api-0PqftiRh.js} +1 -1
  13. package/dist/ui/assets/{auth-section-CjGg1fit.js → auth-section-DEfVaTF2.js} +1 -1
  14. package/dist/ui/assets/{backups-section-fHW6gGBE.js → backups-section-7CMRUK1w.js} +1 -1
  15. package/dist/ui/assets/{checkbox-K93r237H.js → checkbox-qsMNLxyT.js} +1 -1
  16. package/dist/ui/assets/{claude-extension-feiyhDgC.js → claude-extension-QCVnlD5g.js} +1 -1
  17. package/dist/ui/assets/{cliproxy-CVv_-PsP.js → cliproxy-B4Ndh1vO.js} +2 -2
  18. package/dist/ui/assets/{cliproxy-ai-providers-0JQCQ6YS.js → cliproxy-ai-providers-D09jj99_.js} +1 -1
  19. package/dist/ui/assets/{cliproxy-control-panel-CrHA_sjo.js → cliproxy-control-panel-CJZ3OH7x.js} +1 -1
  20. package/dist/ui/assets/{confirm-dialog-_wN3tR_n.js → confirm-dialog-DDPaIGt-.js} +1 -1
  21. package/dist/ui/assets/{copilot-Cao_05p3.js → copilot-CZ5-TuDW.js} +1 -1
  22. package/dist/ui/assets/{cursor-Cbe1L5vq.js → cursor-CLCJ8JwP.js} +1 -1
  23. package/dist/ui/assets/{droid-Cu3rERcX.js → droid-C4ndg4ND.js} +1 -1
  24. package/dist/ui/assets/{globalenv-section-CtzXlKoL.js → globalenv-section-u25Fhfko.js} +1 -1
  25. package/dist/ui/assets/{health-CjuQlQLu.js → health-S3_uVEZI.js} +1 -1
  26. package/dist/ui/assets/{icons-DR-ORtNe.js → icons-BwsSbo2z.js} +1 -1
  27. package/dist/ui/assets/{index-gjtWXRc2.js → index-BIWNdVva.js} +3 -3
  28. package/dist/ui/assets/index-Bp4s-Led.css +1 -0
  29. package/dist/ui/assets/{index-CtS8lmbp.js → index-DW1sWpmn.js} +1 -1
  30. package/dist/ui/assets/index-DgtKMxaq.js +1 -0
  31. package/dist/ui/assets/{index-B4MTOnn6.js → index-DjUsD3ce.js} +1 -1
  32. package/dist/ui/assets/{index-17YWpyV1.js → index-ainA13O4.js} +1 -1
  33. package/dist/ui/assets/{proxy-status-widget-9CJglirI.js → proxy-status-widget-D65cBYFv.js} +1 -1
  34. package/dist/ui/assets/{searchable-select-CGOND84a.js → searchable-select-C2HgCDJL.js} +1 -1
  35. package/dist/ui/assets/{separator-2e8ySql0.js → separator-BlhCtc9l.js} +1 -1
  36. package/dist/ui/assets/{shared-598yR3xg.js → shared-DZkW1mRU.js} +1 -1
  37. package/dist/ui/assets/{switch-BUqDuRxm.js → switch-JdcUdtbh.js} +1 -1
  38. package/dist/ui/assets/{updates-CQW2-eYw.js → updates-DtnC6jcH.js} +1 -1
  39. package/dist/ui/index.html +3 -3
  40. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  41. package/dist/utils/websearch/hook-env.js +17 -1
  42. package/dist/utils/websearch/hook-env.js.map +1 -1
  43. package/dist/utils/websearch/status.d.ts +5 -12
  44. package/dist/utils/websearch/status.d.ts.map +1 -1
  45. package/dist/utils/websearch/status.js +128 -87
  46. package/dist/utils/websearch/status.js.map +1 -1
  47. package/dist/utils/websearch/types.d.ts +37 -23
  48. package/dist/utils/websearch/types.d.ts.map +1 -1
  49. package/dist/utils/websearch/types.js +1 -1
  50. package/dist/utils/websearch-manager.d.ts +5 -4
  51. package/dist/utils/websearch-manager.d.ts.map +1 -1
  52. package/dist/utils/websearch-manager.js +5 -4
  53. package/dist/utils/websearch-manager.js.map +1 -1
  54. package/dist/web-server/health/websearch-checks.d.ts +2 -2
  55. package/dist/web-server/health/websearch-checks.d.ts.map +1 -1
  56. package/dist/web-server/health/websearch-checks.js +9 -11
  57. package/dist/web-server/health/websearch-checks.js.map +1 -1
  58. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  59. package/dist/web-server/routes/cliproxy-auth-routes.js +106 -0
  60. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  61. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  62. package/dist/web-server/routes/websearch-routes.js +33 -22
  63. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  64. package/lib/hooks/websearch-transformer.cjs +488 -462
  65. package/package.json +1 -1
  66. package/dist/ui/assets/index-CKpdevWy.css +0 -1
  67. package/dist/ui/assets/index-DRuiCZZ-.js +0 -1
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-Dt3edmE5.js";import{L as P,r as o}from"./react-vendor-CNOkPC89.js";import{a as p,B as y,c as k,d as x,x as E,bd as M,C as g,j,k as N,_ as w,b as v,n as b,be as U,bf as z,I as B,bg as L}from"./index-gjtWXRc2.js";import{Y as $,Q,aW as Y,v as q,E as G,I as J,a4 as V,C as F,aX as H,ak as K}from"./icons-DR-ORtNe.js";import"./tanstack-B8i0evp-.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const W={new:"border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900/50 dark:bg-blue-900/20 dark:text-blue-300",stable:"border-green-200 bg-green-50 text-green-700 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-300",planned:"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/50 dark:bg-amber-900/20 dark:text-amber-300"};function X({status:s,className:a}){const{t}=p(),d={new:t("updates.statusNew"),stable:t("updates.statusStable"),planned:t("updates.statusPlanned")};return e.jsx(y,{variant:"outline",className:k("font-medium",W[s],a),children:d[s]})}const I="ccs:updates:notice-progress:v1";function Z(s){return s==="new"?"new":"seen"}function u(s,a){return a[s.id]??Z(s.status)}function A(s){return s!=="done"&&s!=="dismissed"}function ee(){if(typeof window>"u")return{};try{const s=window.localStorage.getItem(I);if(!s)return{};const a=JSON.parse(s);if(!a||typeof a!="object"||Array.isArray(a))return{};const t={};for(const[d,l]of Object.entries(a))typeof d=="string"&&(l==="new"||l==="seen"||l==="done"||l==="dismissed")&&(t[d]=l);return t}catch{return{}}}function se(s){typeof window>"u"||window.localStorage.setItem(I,JSON.stringify(s))}function R({state:s,className:a}){const{t}=p(),d={new:{label:t("updates.progressNeedsAction"),className:"border-amber-300/70 bg-amber-100/70 text-amber-800 dark:border-amber-500/40 dark:bg-amber-500/15 dark:text-amber-300",showDot:!0},seen:{label:t("updates.progressInReview"),className:"border-blue-300/70 bg-blue-100/70 text-blue-800 dark:border-blue-500/40 dark:bg-blue-500/15 dark:text-blue-300"},done:{label:t("updates.progressDone"),className:"border-emerald-300/70 bg-emerald-100/70 text-emerald-800 dark:border-emerald-500/40 dark:bg-emerald-500/15 dark:text-emerald-300"},dismissed:{label:t("updates.progressDismissed"),className:"border-muted-foreground/20 bg-muted text-muted-foreground dark:border-muted-foreground/30"}}[s];return e.jsxs(y,{variant:"outline",className:k("gap-1.5 border text-[10px] font-medium",d.className,a),children:[d.showDot&&e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-current"}),d.label]})}function ae({action:s}){const{t:a}=p();return e.jsxs("div",{className:"rounded-md border bg-muted/20 p-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsx("p",{className:"text-sm font-medium",children:s.label}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.description})]}),s.type==="route"&&s.path&&e.jsx(x,{size:"sm",asChild:!0,children:e.jsxs(P,{to:s.path,children:[a("updates.open"),e.jsx($,{className:"h-3.5 w-3.5"})]})})]}),s.type==="command"&&s.command&&e.jsxs("div",{className:"mt-2 flex items-center gap-2 rounded-md border bg-background px-2 py-1.5",children:[e.jsx(Q,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("code",{className:"min-w-0 flex-1 truncate text-[11px]",children:s.command}),e.jsx(E,{value:s.command})]})]})}function re({notice:s,progress:a,relatedEntries:t,onUpdateProgress:d}){const{t:l}=p();return s?e.jsxs("div",{className:"flex-1 min-w-0 bg-background grid grid-rows-[auto_minmax(0,1fr)] overflow-hidden",children:[e.jsxs("div",{className:"border-b bg-background px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("h2",{className:"text-base font-semibold leading-tight",children:s.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s.summary})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsx(R,{state:a}),e.jsx(X,{status:s.status})]})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(Y,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:l("updates.published",{date:M(s.publishedAt)})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs(x,{size:"sm",onClick:()=>d("done"),children:[e.jsx(q,{className:"h-4 w-4"}),l("updates.markDone")]}),e.jsxs(x,{size:"sm",variant:"outline",onClick:()=>d("dismissed"),children:[e.jsx(G,{className:"h-4 w-4"}),l("updates.dismiss")]}),e.jsxs(x,{size:"sm",variant:"ghost",onClick:()=>d("new"),children:[e.jsx(J,{className:"h-4 w-4"}),l("updates.reopen")]})]})]}),e.jsx("div",{className:"min-h-0 p-4",children:e.jsxs("div",{className:"grid h-full gap-4 xl:grid-cols-[minmax(0,1.5fr)_minmax(320px,1fr)] overflow-hidden",children:[e.jsxs(g,{className:"h-full overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(V,{className:"h-4 w-4 text-primary"}),e.jsx(N,{className:"text-base",children:l("updates.doNext")})]}),e.jsx(w,{children:s.primaryAction})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-3",children:s.actions.map(n=>e.jsx(ae,{action:n},`${s.id}-${n.id}`))})})})]}),e.jsxs("div",{className:"grid h-full grid-rows-[minmax(0,1fr)_minmax(0,1fr)] gap-4 overflow-hidden",children:[e.jsxs(g,{className:"overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:l("updates.impactedIntegrations")}),e.jsx(w,{children:l("updates.impactedDesc")})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-2",children:t.map(n=>e.jsxs("div",{className:"rounded-md border bg-muted/20 p-2.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:"min-w-0 truncate text-sm font-medium",children:n.name}),e.jsx(y,{variant:"outline",className:"h-5 px-1.5 text-[10px]",children:U[n.scope]})]}),e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[n.routes[0]&&e.jsx(x,{size:"sm",variant:"outline",asChild:!0,children:e.jsx(P,{to:n.routes[0].path,children:n.routes[0].label})}),n.commands[0]&&e.jsxs("div",{className:"ml-auto flex min-w-0 items-center gap-1.5",children:[e.jsx("code",{className:"truncate rounded bg-background px-1.5 py-0.5 text-[11px]",children:n.commands[0]}),e.jsx(E,{value:n.commands[0]})]})]})]},n.id))})})})]}),e.jsxs(g,{className:"overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:l("updates.whyMatters")}),e.jsx(w,{children:l("updates.whyMattersDesc")})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("ul",{className:"space-y-2 text-sm text-muted-foreground",children:s.highlights.map(n=>e.jsxs("li",{children:["- ",n]},`${s.id}-${n}`))})})})]})]})]})})]}):e.jsx("div",{className:"flex h-full items-center justify-center rounded-lg border border-dashed bg-muted/20 p-6",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:l("updates.noUpdates")})})}function te({notice:s,progress:a,selected:t,onSelect:d}){return e.jsxs("button",{type:"button",onClick:d,className:k("w-full rounded-lg border px-3 py-3 text-left transition-colors",t?"border-primary/30 bg-primary/10":"border-transparent bg-background/40 hover:border-border hover:bg-muted/70"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:s.title}),e.jsx("p",{className:"line-clamp-2 text-xs text-muted-foreground",children:s.primaryAction})]}),e.jsx(F,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground",children:M(s.publishedAt)}),e.jsx(R,{state:a})]})]})}function de(s,a){return a?[s.title,s.summary,s.primaryAction,...s.highlights,...s.commands,...s.actions.map(d=>`${d.label} ${d.description} ${d.command||""}`),...s.routes.map(d=>d.label)].join(" ").toLowerCase().includes(a):!0}function be(){const{t:s}=p(),a=o.useMemo(()=>[...z].sort((r,i)=>i.publishedAt.localeCompare(r.publishedAt)),[]),[t,d]=o.useState("inbox"),[l,n]=o.useState(""),[c,C]=o.useState(()=>ee()),[S,T]=o.useState(null);o.useEffect(()=>{se(c)},[c]);const h=o.useMemo(()=>{const r=l.trim().toLowerCase();return a.filter(i=>{const f=u(i,c);return de(i,r)?t==="done"?f==="done":t==="inbox"?A(f):!0:!1})},[a,c,l,t]),m=o.useMemo(()=>{const r=t==="all"?a:h;return r.find(i=>i.id===S)??r[0]??null},[a,S,t,h]),D=r=>{T(r.id),C(i=>u(r,i)!=="new"?i:{...i,[r.id]:"seen"})},O=o.useMemo(()=>a.filter(r=>A(u(r,c))).length,[a,c]),_=o.useMemo(()=>a.filter(r=>u(r,c)==="done").length,[a,c]);return e.jsxs("div",{className:"flex h-full min-h-0 overflow-hidden",children:[e.jsxs("div",{className:"w-80 border-r bg-muted/30 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"p-4 border-b bg-background space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(H,{className:"h-5 w-5 text-primary"}),e.jsx("h1",{className:"font-semibold",children:s("updates.inboxTitle")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("updates.inboxSubtitle")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.needsAction")}),e.jsx("p",{className:"text-base font-semibold",children:O})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.doneCount")}),e.jsx("p",{className:"text-base font-semibold",children:_})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(K,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(B,{value:l,onChange:r=>n(r.target.value),placeholder:s("updates.searchPlaceholder"),className:"h-9 pl-8"})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:[{id:"inbox",label:s("updates.actionRequired")},{id:"done",label:s("updates.done")},{id:"all",label:s("updates.all")}].map(r=>e.jsx(x,{size:"sm",variant:t===r.id?"default":"outline",onClick:()=>d(r.id),children:r.label},r.id))})]}),e.jsx(b,{className:"flex-1",children:e.jsx("div",{className:"space-y-2 p-2",children:h.length===0?e.jsx("div",{className:"rounded-md border border-dashed p-3 text-xs text-muted-foreground",children:s("updates.noNotices")}):h.map(r=>e.jsx(te,{notice:r,progress:u(r,c),selected:m?.id===r.id,onSelect:()=>D(r)},r.id))})})]}),e.jsx(re,{notice:m,progress:m?u(m,c):null,relatedEntries:m?L(m):[],onUpdateProgress:r=>{m&&C(i=>({...i,[m.id]:r}))}})]})}export{be as UpdatesPage};
1
+ import{j as e}from"./radix-ui-Dt3edmE5.js";import{L as P,r as o}from"./react-vendor-CNOkPC89.js";import{a as p,B as y,c as k,d as x,x as E,bd as M,C as g,j,k as N,_ as w,b as v,n as b,be as U,bf as z,I as B,bg as L}from"./index-BIWNdVva.js";import{Y as $,Q,aW as Y,v as q,E as G,I as J,a4 as V,C as F,aX as H,ak as K}from"./icons-BwsSbo2z.js";import"./tanstack-B8i0evp-.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const W={new:"border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900/50 dark:bg-blue-900/20 dark:text-blue-300",stable:"border-green-200 bg-green-50 text-green-700 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-300",planned:"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/50 dark:bg-amber-900/20 dark:text-amber-300"};function X({status:s,className:a}){const{t}=p(),d={new:t("updates.statusNew"),stable:t("updates.statusStable"),planned:t("updates.statusPlanned")};return e.jsx(y,{variant:"outline",className:k("font-medium",W[s],a),children:d[s]})}const I="ccs:updates:notice-progress:v1";function Z(s){return s==="new"?"new":"seen"}function u(s,a){return a[s.id]??Z(s.status)}function A(s){return s!=="done"&&s!=="dismissed"}function ee(){if(typeof window>"u")return{};try{const s=window.localStorage.getItem(I);if(!s)return{};const a=JSON.parse(s);if(!a||typeof a!="object"||Array.isArray(a))return{};const t={};for(const[d,l]of Object.entries(a))typeof d=="string"&&(l==="new"||l==="seen"||l==="done"||l==="dismissed")&&(t[d]=l);return t}catch{return{}}}function se(s){typeof window>"u"||window.localStorage.setItem(I,JSON.stringify(s))}function R({state:s,className:a}){const{t}=p(),d={new:{label:t("updates.progressNeedsAction"),className:"border-amber-300/70 bg-amber-100/70 text-amber-800 dark:border-amber-500/40 dark:bg-amber-500/15 dark:text-amber-300",showDot:!0},seen:{label:t("updates.progressInReview"),className:"border-blue-300/70 bg-blue-100/70 text-blue-800 dark:border-blue-500/40 dark:bg-blue-500/15 dark:text-blue-300"},done:{label:t("updates.progressDone"),className:"border-emerald-300/70 bg-emerald-100/70 text-emerald-800 dark:border-emerald-500/40 dark:bg-emerald-500/15 dark:text-emerald-300"},dismissed:{label:t("updates.progressDismissed"),className:"border-muted-foreground/20 bg-muted text-muted-foreground dark:border-muted-foreground/30"}}[s];return e.jsxs(y,{variant:"outline",className:k("gap-1.5 border text-[10px] font-medium",d.className,a),children:[d.showDot&&e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-current"}),d.label]})}function ae({action:s}){const{t:a}=p();return e.jsxs("div",{className:"rounded-md border bg-muted/20 p-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsx("p",{className:"text-sm font-medium",children:s.label}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.description})]}),s.type==="route"&&s.path&&e.jsx(x,{size:"sm",asChild:!0,children:e.jsxs(P,{to:s.path,children:[a("updates.open"),e.jsx($,{className:"h-3.5 w-3.5"})]})})]}),s.type==="command"&&s.command&&e.jsxs("div",{className:"mt-2 flex items-center gap-2 rounded-md border bg-background px-2 py-1.5",children:[e.jsx(Q,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("code",{className:"min-w-0 flex-1 truncate text-[11px]",children:s.command}),e.jsx(E,{value:s.command})]})]})}function re({notice:s,progress:a,relatedEntries:t,onUpdateProgress:d}){const{t:l}=p();return s?e.jsxs("div",{className:"flex-1 min-w-0 bg-background grid grid-rows-[auto_minmax(0,1fr)] overflow-hidden",children:[e.jsxs("div",{className:"border-b bg-background px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("h2",{className:"text-base font-semibold leading-tight",children:s.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s.summary})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsx(R,{state:a}),e.jsx(X,{status:s.status})]})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(Y,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:l("updates.published",{date:M(s.publishedAt)})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs(x,{size:"sm",onClick:()=>d("done"),children:[e.jsx(q,{className:"h-4 w-4"}),l("updates.markDone")]}),e.jsxs(x,{size:"sm",variant:"outline",onClick:()=>d("dismissed"),children:[e.jsx(G,{className:"h-4 w-4"}),l("updates.dismiss")]}),e.jsxs(x,{size:"sm",variant:"ghost",onClick:()=>d("new"),children:[e.jsx(J,{className:"h-4 w-4"}),l("updates.reopen")]})]})]}),e.jsx("div",{className:"min-h-0 p-4",children:e.jsxs("div",{className:"grid h-full gap-4 xl:grid-cols-[minmax(0,1.5fr)_minmax(320px,1fr)] overflow-hidden",children:[e.jsxs(g,{className:"h-full overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(V,{className:"h-4 w-4 text-primary"}),e.jsx(N,{className:"text-base",children:l("updates.doNext")})]}),e.jsx(w,{children:s.primaryAction})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-3",children:s.actions.map(n=>e.jsx(ae,{action:n},`${s.id}-${n.id}`))})})})]}),e.jsxs("div",{className:"grid h-full grid-rows-[minmax(0,1fr)_minmax(0,1fr)] gap-4 overflow-hidden",children:[e.jsxs(g,{className:"overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:l("updates.impactedIntegrations")}),e.jsx(w,{children:l("updates.impactedDesc")})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-2",children:t.map(n=>e.jsxs("div",{className:"rounded-md border bg-muted/20 p-2.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:"min-w-0 truncate text-sm font-medium",children:n.name}),e.jsx(y,{variant:"outline",className:"h-5 px-1.5 text-[10px]",children:U[n.scope]})]}),e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[n.routes[0]&&e.jsx(x,{size:"sm",variant:"outline",asChild:!0,children:e.jsx(P,{to:n.routes[0].path,children:n.routes[0].label})}),n.commands[0]&&e.jsxs("div",{className:"ml-auto flex min-w-0 items-center gap-1.5",children:[e.jsx("code",{className:"truncate rounded bg-background px-1.5 py-0.5 text-[11px]",children:n.commands[0]}),e.jsx(E,{value:n.commands[0]})]})]})]},n.id))})})})]}),e.jsxs(g,{className:"overflow-hidden",children:[e.jsxs(j,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:l("updates.whyMatters")}),e.jsx(w,{children:l("updates.whyMattersDesc")})]}),e.jsx(v,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("ul",{className:"space-y-2 text-sm text-muted-foreground",children:s.highlights.map(n=>e.jsxs("li",{children:["- ",n]},`${s.id}-${n}`))})})})]})]})]})})]}):e.jsx("div",{className:"flex h-full items-center justify-center rounded-lg border border-dashed bg-muted/20 p-6",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:l("updates.noUpdates")})})}function te({notice:s,progress:a,selected:t,onSelect:d}){return e.jsxs("button",{type:"button",onClick:d,className:k("w-full rounded-lg border px-3 py-3 text-left transition-colors",t?"border-primary/30 bg-primary/10":"border-transparent bg-background/40 hover:border-border hover:bg-muted/70"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:s.title}),e.jsx("p",{className:"line-clamp-2 text-xs text-muted-foreground",children:s.primaryAction})]}),e.jsx(F,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground",children:M(s.publishedAt)}),e.jsx(R,{state:a})]})]})}function de(s,a){return a?[s.title,s.summary,s.primaryAction,...s.highlights,...s.commands,...s.actions.map(d=>`${d.label} ${d.description} ${d.command||""}`),...s.routes.map(d=>d.label)].join(" ").toLowerCase().includes(a):!0}function be(){const{t:s}=p(),a=o.useMemo(()=>[...z].sort((r,i)=>i.publishedAt.localeCompare(r.publishedAt)),[]),[t,d]=o.useState("inbox"),[l,n]=o.useState(""),[c,C]=o.useState(()=>ee()),[S,T]=o.useState(null);o.useEffect(()=>{se(c)},[c]);const h=o.useMemo(()=>{const r=l.trim().toLowerCase();return a.filter(i=>{const f=u(i,c);return de(i,r)?t==="done"?f==="done":t==="inbox"?A(f):!0:!1})},[a,c,l,t]),m=o.useMemo(()=>{const r=t==="all"?a:h;return r.find(i=>i.id===S)??r[0]??null},[a,S,t,h]),D=r=>{T(r.id),C(i=>u(r,i)!=="new"?i:{...i,[r.id]:"seen"})},O=o.useMemo(()=>a.filter(r=>A(u(r,c))).length,[a,c]),_=o.useMemo(()=>a.filter(r=>u(r,c)==="done").length,[a,c]);return e.jsxs("div",{className:"flex h-full min-h-0 overflow-hidden",children:[e.jsxs("div",{className:"w-80 border-r bg-muted/30 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"p-4 border-b bg-background space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(H,{className:"h-5 w-5 text-primary"}),e.jsx("h1",{className:"font-semibold",children:s("updates.inboxTitle")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("updates.inboxSubtitle")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.needsAction")}),e.jsx("p",{className:"text-base font-semibold",children:O})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.doneCount")}),e.jsx("p",{className:"text-base font-semibold",children:_})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(K,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(B,{value:l,onChange:r=>n(r.target.value),placeholder:s("updates.searchPlaceholder"),className:"h-9 pl-8"})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:[{id:"inbox",label:s("updates.actionRequired")},{id:"done",label:s("updates.done")},{id:"all",label:s("updates.all")}].map(r=>e.jsx(x,{size:"sm",variant:t===r.id?"default":"outline",onClick:()=>d(r.id),children:r.label},r.id))})]}),e.jsx(b,{className:"flex-1",children:e.jsx("div",{className:"space-y-2 p-2",children:h.length===0?e.jsx("div",{className:"rounded-md border border-dashed p-3 text-xs text-muted-foreground",children:s("updates.noNotices")}):h.map(r=>e.jsx(te,{notice:r,progress:u(r,c),selected:m?.id===r.id,onSelect:()=>D(r)},r.id))})})]}),e.jsx(re,{notice:m,progress:m?u(m,c):null,relatedEntries:m?L(m):[],onUpdateProgress:r=>{m&&C(i=>({...i,[m.id]:r}))}})]})}export{be as UpdatesPage};
@@ -24,16 +24,16 @@
24
24
  href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap"
25
25
  rel="stylesheet"
26
26
  />
27
- <script type="module" crossorigin src="/assets/index-gjtWXRc2.js"></script>
27
+ <script type="module" crossorigin src="/assets/index-BIWNdVva.js"></script>
28
28
  <link rel="modulepreload" crossorigin href="/assets/react-vendor-CNOkPC89.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/radix-ui-Dt3edmE5.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/tanstack-B8i0evp-.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/notifications-B2HqRBj7.js">
32
- <link rel="modulepreload" crossorigin href="/assets/icons-DR-ORtNe.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/icons-BwsSbo2z.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/utils-CzKF5WmX.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/form-utils-Bcoyqxpq.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/code-highlight-BRUf_pqB.js">
36
- <link rel="stylesheet" crossorigin href="/assets/index-CKpdevWy.css">
36
+ <link rel="stylesheet" crossorigin href="/assets/index-Bp4s-Led.css">
37
37
  </head>
38
38
  <body>
39
39
  <div id="root"></div>
@@ -1 +1 @@
1
- {"version":3,"file":"hook-env.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgD5D"}
1
+ {"version":3,"file":"hook-env.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsE5D"}
@@ -27,7 +27,23 @@ function getWebSearchHookEnv() {
27
27
  // Pass master switch
28
28
  env.CCS_WEBSEARCH_ENABLED = '1';
29
29
  // Pass individual provider enabled states
30
- // Hook will only use providers that are BOTH enabled AND installed
30
+ // Hook will only use providers that are BOTH enabled AND ready.
31
+ if (wsConfig.providers?.exa?.enabled) {
32
+ env.CCS_WEBSEARCH_EXA = '1';
33
+ env.CCS_WEBSEARCH_EXA_MAX_RESULTS = String(wsConfig.providers.exa.max_results || 5);
34
+ }
35
+ if (wsConfig.providers?.tavily?.enabled) {
36
+ env.CCS_WEBSEARCH_TAVILY = '1';
37
+ env.CCS_WEBSEARCH_TAVILY_MAX_RESULTS = String(wsConfig.providers.tavily.max_results || 5);
38
+ }
39
+ if (wsConfig.providers?.duckduckgo?.enabled) {
40
+ env.CCS_WEBSEARCH_DUCKDUCKGO = '1';
41
+ env.CCS_WEBSEARCH_DUCKDUCKGO_MAX_RESULTS = String(wsConfig.providers.duckduckgo.max_results || 5);
42
+ }
43
+ if (wsConfig.providers?.brave?.enabled) {
44
+ env.CCS_WEBSEARCH_BRAVE = '1';
45
+ env.CCS_WEBSEARCH_BRAVE_MAX_RESULTS = String(wsConfig.providers.brave.max_results || 5);
46
+ }
31
47
  if (wsConfig.providers?.gemini?.enabled) {
32
48
  env.CCS_WEBSEARCH_GEMINI = '1';
33
49
  if (wsConfig.providers.gemini.model) {
@@ -1 +1 @@
1
- {"version":3,"file":"hook-env.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,8EAAwE;AAExE;;;;;;GAMG;AACH,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAA,0CAAkB,GAAE,CAAC;IACtC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,iCAAiC;IACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qBAAqB;IACrB,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IAEhC,0CAA0C;IAC1C,mEAAmE;IACnE,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACxC,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAC/B,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,GAAG,CAAC,0BAA0B,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QACnE,CAAC;QACD,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC1C,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;QACjC,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtC,GAAG,CAAC,4BAA4B,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvE,CAAC;QACD,gDAAgD;QAChD,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/B,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACtC,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAC7B,2CAA2C;QAC3C,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC/B,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC/B,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAhDD,kDAgDC"}
1
+ {"version":3,"file":"hook-env.js","sourceRoot":"","sources":["../../../src/utils/websearch/hook-env.ts"],"names":[],"mappings":"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"}
@@ -7,30 +7,23 @@
7
7
  */
8
8
  import type { WebSearchCliInfo, WebSearchStatus } from './types';
9
9
  /**
10
- * Get all WebSearch CLI providers with their status
10
+ * Get all WebSearch providers with their current status.
11
11
  */
12
12
  export declare function getWebSearchCliProviders(): WebSearchCliInfo[];
13
13
  /**
14
- * Check if any WebSearch CLI is available
14
+ * Check if any WebSearch provider is currently ready.
15
15
  */
16
16
  export declare function hasAnyWebSearchCli(): boolean;
17
17
  /**
18
- * Get install hints for CLI-only users when no WebSearch CLI is installed
19
- * Returns raw message strings (without indicator prefix) for display
18
+ * Get setup hints when no providers are ready.
20
19
  */
21
20
  export declare function getCliInstallHints(): string[];
22
21
  /**
23
- * Get WebSearch readiness status for display
24
- *
25
- * Called on third-party profile startup to inform user.
26
- * Checks both installation AND authentication status for Gemini CLI.
22
+ * Get WebSearch readiness status for display.
27
23
  */
28
24
  export declare function getWebSearchReadiness(): WebSearchStatus;
29
25
  /**
30
- * Display WebSearch status (single line, equilibrium UX)
31
- *
32
- * Only call for third-party profiles.
33
- * Shows detailed install hints when no CLI is installed.
26
+ * Display WebSearch status (single line, equilibrium UX).
34
27
  */
35
28
  export declare function displayWebSearchStatus(): void;
36
29
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,gBAAgB,EAAE,CA4C7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAW7C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAqEvD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAyB7C"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwEjE;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,gBAAgB,EAAE,CAqE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAW7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAsCvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAiB7C"}
@@ -13,154 +13,204 @@ const unified_config_loader_1 = require("../../config/unified-config-loader");
13
13
  const gemini_cli_1 = require("./gemini-cli");
14
14
  const grok_cli_1 = require("./grok-cli");
15
15
  const opencode_cli_1 = require("./opencode-cli");
16
- /**
17
- * Get all WebSearch CLI providers with their status
18
- */
19
- function getWebSearchCliProviders() {
16
+ function hasEnvValue(name) {
17
+ return (process.env[name] || '').trim().length > 0;
18
+ }
19
+ function hasAnyEnvValue(names) {
20
+ return names.some((name) => hasEnvValue(name));
21
+ }
22
+ function getLegacyProviderStatuses() {
23
+ const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
20
24
  const geminiStatus = (0, gemini_cli_1.getGeminiCliStatus)();
21
25
  const grokStatus = (0, grok_cli_1.getGrokCliStatus)();
22
26
  const opencodeStatus = (0, opencode_cli_1.getOpenCodeCliStatus)();
27
+ const geminiAuthed = geminiStatus.installed && (0, gemini_cli_1.isGeminiAuthenticated)();
23
28
  return [
24
29
  {
25
30
  id: 'gemini',
31
+ kind: 'legacy-cli',
26
32
  name: 'Gemini CLI',
27
33
  command: 'gemini',
28
- installed: geminiStatus.installed,
34
+ enabled: wsConfig.providers?.gemini?.enabled ?? false,
35
+ available: geminiAuthed,
29
36
  version: geminiStatus.version ?? null,
30
37
  installCommand: 'npm install -g @google/gemini-cli',
31
38
  docsUrl: 'https://github.com/google-gemini/gemini-cli',
32
39
  requiresApiKey: false,
33
- description: 'Google Gemini with web search (FREE tier: 1000 req/day)',
34
- freeTier: true,
40
+ description: 'Optional legacy LLM fallback with Google web search.',
41
+ detail: geminiStatus.installed
42
+ ? geminiAuthed
43
+ ? 'Authenticated'
44
+ : "Run 'gemini' to login"
45
+ : 'Not installed',
35
46
  },
36
47
  {
37
48
  id: 'opencode',
49
+ kind: 'legacy-cli',
38
50
  name: 'OpenCode',
39
51
  command: 'opencode',
40
- installed: opencodeStatus.installed,
52
+ enabled: wsConfig.providers?.opencode?.enabled ?? false,
53
+ available: opencodeStatus.installed,
41
54
  version: opencodeStatus.version ?? null,
42
55
  installCommand: 'curl -fsSL https://opencode.ai/install | bash',
43
56
  docsUrl: 'https://github.com/sst/opencode',
44
57
  requiresApiKey: false,
45
- description: 'OpenCode with built-in web search (FREE via Zen)',
46
- freeTier: true,
58
+ description: 'Optional legacy LLM fallback via OpenCode.',
59
+ detail: opencodeStatus.installed ? 'Installed' : 'Not installed',
47
60
  },
48
61
  {
49
62
  id: 'grok',
63
+ kind: 'legacy-cli',
50
64
  name: 'Grok CLI',
51
65
  command: 'grok',
52
- installed: grokStatus.installed,
66
+ enabled: wsConfig.providers?.grok?.enabled ?? false,
67
+ available: grokStatus.installed && hasEnvValue('GROK_API_KEY'),
53
68
  version: grokStatus.version ?? null,
54
69
  installCommand: 'npm install -g @vibe-kit/grok-cli',
55
70
  docsUrl: 'https://github.com/superagent-ai/grok-cli',
56
71
  requiresApiKey: true,
57
72
  apiKeyEnvVar: 'GROK_API_KEY',
58
- description: 'xAI Grok CLI with AI coding agent capabilities',
59
- freeTier: false,
73
+ description: 'Optional legacy LLM fallback with xAI Grok.',
74
+ detail: grokStatus.installed
75
+ ? hasEnvValue('GROK_API_KEY')
76
+ ? 'Ready'
77
+ : 'Set GROK_API_KEY'
78
+ : 'Not installed',
60
79
  },
61
80
  ];
62
81
  }
82
+ /**
83
+ * Get all WebSearch providers with their current status.
84
+ */
85
+ function getWebSearchCliProviders() {
86
+ const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
87
+ const providers = [
88
+ {
89
+ id: 'exa',
90
+ kind: 'backend',
91
+ name: 'Exa',
92
+ enabled: wsConfig.providers?.exa?.enabled ?? false,
93
+ available: (wsConfig.providers?.exa?.enabled ?? false) &&
94
+ hasAnyEnvValue(['EXA_API_KEY', 'CCS_WEBSEARCH_EXA_API_KEY']),
95
+ version: null,
96
+ docsUrl: 'https://docs.exa.ai/reference/search',
97
+ requiresApiKey: true,
98
+ apiKeyEnvVar: 'EXA_API_KEY',
99
+ description: 'API-backed search with strong relevance and content extraction.',
100
+ detail: hasAnyEnvValue(['EXA_API_KEY', 'CCS_WEBSEARCH_EXA_API_KEY'])
101
+ ? `API key detected (${wsConfig.providers?.exa?.max_results ?? 5} results)`
102
+ : 'Set EXA_API_KEY',
103
+ },
104
+ {
105
+ id: 'tavily',
106
+ kind: 'backend',
107
+ name: 'Tavily',
108
+ enabled: wsConfig.providers?.tavily?.enabled ?? false,
109
+ available: (wsConfig.providers?.tavily?.enabled ?? false) &&
110
+ hasAnyEnvValue(['TAVILY_API_KEY', 'CCS_WEBSEARCH_TAVILY_API_KEY']),
111
+ version: null,
112
+ docsUrl: 'https://docs.tavily.com/documentation/api-reference/endpoint/search',
113
+ requiresApiKey: true,
114
+ apiKeyEnvVar: 'TAVILY_API_KEY',
115
+ description: 'Search API optimized for agent workflows and concise web result synthesis.',
116
+ detail: hasAnyEnvValue(['TAVILY_API_KEY', 'CCS_WEBSEARCH_TAVILY_API_KEY'])
117
+ ? `API key detected (${wsConfig.providers?.tavily?.max_results ?? 5} results)`
118
+ : 'Set TAVILY_API_KEY',
119
+ },
120
+ {
121
+ id: 'duckduckgo',
122
+ kind: 'backend',
123
+ name: 'DuckDuckGo',
124
+ enabled: wsConfig.providers?.duckduckgo?.enabled ?? true,
125
+ available: wsConfig.providers?.duckduckgo?.enabled ?? true,
126
+ version: null,
127
+ docsUrl: 'https://duckduckgo.com',
128
+ requiresApiKey: false,
129
+ description: 'Default built-in HTML search backend. Zero setup.',
130
+ detail: `Built-in (${wsConfig.providers?.duckduckgo?.max_results ?? 5} results)`,
131
+ },
132
+ {
133
+ id: 'brave',
134
+ kind: 'backend',
135
+ name: 'Brave Search',
136
+ enabled: wsConfig.providers?.brave?.enabled ?? false,
137
+ available: (wsConfig.providers?.brave?.enabled ?? false) &&
138
+ hasAnyEnvValue(['BRAVE_API_KEY', 'CCS_WEBSEARCH_BRAVE_API_KEY']),
139
+ version: null,
140
+ docsUrl: 'https://brave.com/search/api/',
141
+ requiresApiKey: true,
142
+ apiKeyEnvVar: 'BRAVE_API_KEY',
143
+ description: 'API-backed web search with cleaner result metadata.',
144
+ detail: hasAnyEnvValue(['BRAVE_API_KEY', 'CCS_WEBSEARCH_BRAVE_API_KEY'])
145
+ ? `API key detected (${wsConfig.providers?.brave?.max_results ?? 5} results)`
146
+ : 'Set BRAVE_API_KEY',
147
+ },
148
+ ];
149
+ return [...providers, ...getLegacyProviderStatuses()];
150
+ }
63
151
  exports.getWebSearchCliProviders = getWebSearchCliProviders;
64
152
  /**
65
- * Check if any WebSearch CLI is available
153
+ * Check if any WebSearch provider is currently ready.
66
154
  */
67
155
  function hasAnyWebSearchCli() {
68
- return (0, gemini_cli_1.hasGeminiCli)() || (0, grok_cli_1.hasGrokCli)() || (0, opencode_cli_1.hasOpenCodeCli)();
156
+ return getWebSearchCliProviders().some((provider) => provider.enabled && provider.available);
69
157
  }
70
158
  exports.hasAnyWebSearchCli = hasAnyWebSearchCli;
71
159
  /**
72
- * Get install hints for CLI-only users when no WebSearch CLI is installed
73
- * Returns raw message strings (without indicator prefix) for display
160
+ * Get setup hints when no providers are ready.
74
161
  */
75
162
  function getCliInstallHints() {
76
163
  if (hasAnyWebSearchCli()) {
77
164
  return [];
78
165
  }
79
166
  return [
80
- 'WebSearch: No CLI tools installed',
81
- ' Gemini CLI (FREE): npm i -g @google/gemini-cli',
82
- ' OpenCode (FREE): curl -fsSL https://opencode.ai/install | bash',
83
- ' Grok CLI (paid): npm i -g @vibe-kit/grok-cli',
167
+ 'WebSearch: no ready providers',
168
+ ' Enable DuckDuckGo in Settings > WebSearch for zero-setup search',
169
+ ' Or export EXA_API_KEY, TAVILY_API_KEY, or BRAVE_API_KEY for API-backed search',
170
+ ' Optional legacy fallback: npm i -g @google/gemini-cli',
84
171
  ];
85
172
  }
86
173
  exports.getCliInstallHints = getCliInstallHints;
87
174
  /**
88
- * Get WebSearch readiness status for display
89
- *
90
- * Called on third-party profile startup to inform user.
91
- * Checks both installation AND authentication status for Gemini CLI.
175
+ * Get WebSearch readiness status for display.
92
176
  */
93
177
  function getWebSearchReadiness() {
94
178
  const wsConfig = (0, unified_config_loader_1.getWebSearchConfig)();
95
- // Check if WebSearch is disabled entirely
179
+ const providers = getWebSearchCliProviders();
96
180
  if (!wsConfig.enabled) {
97
181
  return {
98
182
  readiness: 'unavailable',
99
- geminiCli: false,
100
- geminiAuthenticated: false,
101
- grokCli: false,
102
- opencodeCli: false,
103
183
  message: 'Disabled in config',
184
+ providers,
104
185
  };
105
186
  }
106
- // Check all CLIs
107
- const geminiInstalled = (0, gemini_cli_1.hasGeminiCli)();
108
- const geminiAuthed = geminiInstalled && (0, gemini_cli_1.isGeminiAuthenticated)();
109
- const grokInstalled = (0, grok_cli_1.hasGrokCli)();
110
- const opencodeInstalled = (0, opencode_cli_1.hasOpenCodeCli)();
111
- // Build message based on installed + authenticated CLIs
112
- const readyClis = [];
113
- const needsAuthClis = [];
114
- // Gemini requires auth check
115
- if (geminiInstalled) {
116
- if (geminiAuthed) {
117
- readyClis.push('Gemini');
118
- }
119
- else {
120
- needsAuthClis.push('Gemini');
121
- }
122
- }
123
- // Other CLIs don't require auth check (for now)
124
- if (grokInstalled)
125
- readyClis.push('Grok');
126
- if (opencodeInstalled)
127
- readyClis.push('OpenCode');
128
- // Determine overall status
129
- if (readyClis.length > 0) {
187
+ const enabledProviders = providers.filter((provider) => provider.enabled);
188
+ const readyProviders = enabledProviders.filter((provider) => provider.available);
189
+ if (readyProviders.length > 0) {
130
190
  return {
131
191
  readiness: 'ready',
132
- geminiCli: geminiInstalled,
133
- geminiAuthenticated: geminiAuthed,
134
- grokCli: grokInstalled,
135
- opencodeCli: opencodeInstalled,
136
- message: `Ready (${readyClis.join(' + ')})`,
192
+ message: `Ready (${readyProviders.map((provider) => provider.name).join(' + ')})`,
193
+ providers,
137
194
  };
138
195
  }
139
- if (needsAuthClis.length > 0) {
196
+ if (enabledProviders.length > 0) {
140
197
  return {
141
- readiness: 'needs_auth',
142
- geminiCli: geminiInstalled,
143
- geminiAuthenticated: false,
144
- grokCli: grokInstalled,
145
- opencodeCli: opencodeInstalled,
146
- message: `Gemini: run 'gemini' to login`,
198
+ readiness: 'needs_setup',
199
+ message: enabledProviders
200
+ .map((provider) => `${provider.name}: ${provider.detail}`)
201
+ .join(' | '),
202
+ providers,
147
203
  };
148
204
  }
149
205
  return {
150
206
  readiness: 'unavailable',
151
- geminiCli: false,
152
- geminiAuthenticated: false,
153
- grokCli: false,
154
- opencodeCli: false,
155
- message: 'Install: npm i -g @google/gemini-cli',
207
+ message: 'Enable at least one provider in Settings > WebSearch',
208
+ providers,
156
209
  };
157
210
  }
158
211
  exports.getWebSearchReadiness = getWebSearchReadiness;
159
212
  /**
160
- * Display WebSearch status (single line, equilibrium UX)
161
- *
162
- * Only call for third-party profiles.
163
- * Shows detailed install hints when no CLI is installed.
213
+ * Display WebSearch status (single line, equilibrium UX).
164
214
  */
165
215
  function displayWebSearchStatus() {
166
216
  const status = getWebSearchReadiness();
@@ -168,22 +218,13 @@ function displayWebSearchStatus() {
168
218
  case 'ready':
169
219
  console.error((0, ui_1.ok)(`WebSearch: ${status.message}`));
170
220
  break;
171
- case 'needs_auth':
221
+ case 'needs_setup':
172
222
  console.error((0, ui_1.warn)(`WebSearch: ${status.message}`));
173
223
  break;
174
224
  case 'unavailable':
175
225
  console.error((0, ui_1.fail)(`WebSearch: ${status.message}`));
176
- const hints = getCliInstallHints();
177
- if (hints.length > 0) {
178
- // First line gets [i] prefix, rest are continuation (indented, no prefix)
179
- for (let i = 0; i < hints.length; i++) {
180
- if (i === 0) {
181
- console.error((0, ui_1.info)(hints[i]));
182
- }
183
- else {
184
- console.error(hints[i]);
185
- }
186
- }
226
+ for (const [index, hint] of getCliInstallHints().entries()) {
227
+ console.error(index === 0 ? (0, ui_1.info)(hint) : hint);
187
228
  }
188
229
  break;
189
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/utils/websearch/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/utils/websearch/status.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WebSearch Type Definitions
3
3
  *
4
- * Contains all type definitions for WebSearch CLI providers and status.
4
+ * Contains all type definitions for WebSearch providers and status.
5
5
  *
6
6
  * @module utils/websearch/types
7
7
  */
@@ -24,44 +24,53 @@ export type OpenCodeCliStatus = ComponentStatus;
24
24
  /**
25
25
  * WebSearch availability status for third-party profiles
26
26
  */
27
- export type WebSearchReadiness = 'ready' | 'needs_auth' | 'unavailable';
27
+ export type WebSearchReadiness = 'ready' | 'needs_setup' | 'unavailable';
28
28
  /**
29
- * WebSearch status for display
29
+ * WebSearch provider identifier
30
30
  */
31
- export interface WebSearchStatus {
32
- readiness: WebSearchReadiness;
33
- geminiCli: boolean;
34
- geminiAuthenticated: boolean;
35
- grokCli: boolean;
36
- opencodeCli: boolean;
37
- message: string;
38
- }
31
+ export type WebSearchProviderId = 'exa' | 'tavily' | 'duckduckgo' | 'brave' | 'gemini' | 'grok' | 'opencode';
32
+ /**
33
+ * Provider execution class.
34
+ */
35
+ export type WebSearchProviderKind = 'backend' | 'legacy-cli';
39
36
  /**
40
- * WebSearch CLI provider information for health checks and UI
37
+ * WebSearch provider information for health checks and UI
41
38
  */
42
39
  export interface WebSearchCliInfo {
43
40
  /** Provider ID */
44
- id: 'gemini' | 'grok' | 'opencode';
41
+ id: WebSearchProviderId;
42
+ /** Backend vs legacy CLI */
43
+ kind: WebSearchProviderKind;
45
44
  /** Display name */
46
45
  name: string;
47
- /** CLI command name */
48
- command: string;
49
- /** Whether CLI is installed */
50
- installed: boolean;
51
- /** CLI version if installed */
46
+ /** Command name for legacy providers */
47
+ command?: string;
48
+ /** Whether the provider is enabled in config */
49
+ enabled: boolean;
50
+ /** Whether the provider is ready right now */
51
+ available: boolean;
52
+ /** CLI version if applicable */
52
53
  version: string | null;
53
- /** Install command */
54
- installCommand: string;
54
+ /** Install or setup command when applicable */
55
+ installCommand?: string;
55
56
  /** Docs URL */
56
- docsUrl: string;
57
+ docsUrl?: string;
57
58
  /** Whether this provider requires an API key */
58
59
  requiresApiKey: boolean;
59
60
  /** API key environment variable name */
60
61
  apiKeyEnvVar?: string;
61
62
  /** Brief description */
62
63
  description: string;
63
- /** Free tier available? */
64
- freeTier: boolean;
64
+ /** Summary detail shown in status UIs */
65
+ detail: string;
66
+ }
67
+ /**
68
+ * WebSearch status for display
69
+ */
70
+ export interface WebSearchStatus {
71
+ readiness: WebSearchReadiness;
72
+ message: string;
73
+ providers: WebSearchCliInfo[];
65
74
  }
66
75
  /**
67
76
  * WebSearch provider configuration from config.yaml
@@ -70,6 +79,7 @@ export interface WebSearchProviderConfig {
70
79
  enabled?: boolean;
71
80
  model?: string;
72
81
  timeout?: number;
82
+ max_results?: number;
73
83
  }
74
84
  /**
75
85
  * WebSearch configuration from config.yaml
@@ -77,6 +87,10 @@ export interface WebSearchProviderConfig {
77
87
  export interface WebSearchConfig {
78
88
  enabled: boolean;
79
89
  providers?: {
90
+ exa?: WebSearchProviderConfig;
91
+ tavily?: WebSearchProviderConfig;
92
+ duckduckgo?: WebSearchProviderConfig;
93
+ brave?: WebSearchProviderConfig;
80
94
  gemini?: WebSearchProviderConfig;
81
95
  opencode?: WebSearchProviderConfig;
82
96
  grok?: WebSearchProviderConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;QACnC,IAAI,CAAC,EAAE,uBAAuB,CAAC;KAChC,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/websearch/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,QAAQ,GACR,MAAM,GACN,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,EAAE,EAAE,mBAAmB,CAAC;IACxB,4BAA4B;IAC5B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,uBAAuB,CAAC;QAC9B,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,UAAU,CAAC,EAAE,uBAAuB,CAAC;QACrC,KAAK,CAAC,EAAE,uBAAuB,CAAC;QAChC,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;QACnC,IAAI,CAAC,EAAE,uBAAuB,CAAC;KAChC,CAAC;CACH"}