@commandgarden/cli 2.14.0 → 2.14.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 (69) hide show
  1. package/dist/main.js +248 -278
  2. package/node_modules/@commandgarden/app/dist/client/assets/{Slides-DWQmJfkp.js → Slides-DMIm_HgI.js} +5 -5
  3. package/node_modules/@commandgarden/app/dist/client/assets/{index-C8yqRQk-.js → index-CupEN1w-.js} +53 -53
  4. package/node_modules/@commandgarden/app/dist/client/index.html +18 -18
  5. package/node_modules/@commandgarden/app/dist/server/daemon-client.test.js +47 -0
  6. package/node_modules/@commandgarden/app/dist/server/main.js +1 -1
  7. package/node_modules/@commandgarden/app/dist/server/routes/audit.js +16 -27
  8. package/node_modules/@commandgarden/app/dist/server/routes/config.js +2 -8
  9. package/node_modules/@commandgarden/app/dist/server/routes/connectors.js +26 -37
  10. package/node_modules/@commandgarden/app/dist/server/routes/routes.test.js +137 -0
  11. package/node_modules/@commandgarden/app/dist/server/routes/run.js +4 -3
  12. package/node_modules/@commandgarden/app/dist/server/routes/status.js +1 -2
  13. package/node_modules/@commandgarden/app/dist/server/store.js +53 -53
  14. package/node_modules/@commandgarden/app/dist/server/store.test.js +59 -0
  15. package/node_modules/@commandgarden/app/package.json +42 -42
  16. package/node_modules/@commandgarden/chrome/dist/content-script.js.map +1 -1
  17. package/node_modules/@commandgarden/chrome/dist/fetch-interceptor.js +44 -0
  18. package/node_modules/@commandgarden/chrome/dist/manifest.json +26 -26
  19. package/node_modules/@commandgarden/chrome/dist/popup.html +218 -218
  20. package/node_modules/@commandgarden/chrome/dist/popup.js.map +1 -1
  21. package/node_modules/@commandgarden/chrome/dist/service-worker.js +40 -40
  22. package/node_modules/@commandgarden/chrome/dist/service-worker.js.map +2 -2
  23. package/node_modules/@commandgarden/chrome/package.json +26 -26
  24. package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.eval.js +100 -100
  25. package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.yaml +71 -71
  26. package/node_modules/@commandgarden/daemon/connectors/gcs-kb-content.yaml +61 -61
  27. package/node_modules/@commandgarden/daemon/connectors/gcs-kb-pages.yaml +54 -54
  28. package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.eval.js +115 -115
  29. package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.yaml +54 -54
  30. package/node_modules/@commandgarden/daemon/connectors/lib/msal-token.js +20 -20
  31. package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.eval.js +204 -204
  32. package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.yaml +42 -42
  33. package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.eval.js +94 -94
  34. package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.yaml +34 -34
  35. package/node_modules/@commandgarden/daemon/connectors/socket-security-news.yaml +63 -63
  36. package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.eval.js +437 -437
  37. package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.yaml +53 -53
  38. package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.eval.js +547 -547
  39. package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.yaml +48 -48
  40. package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.eval.js +52 -52
  41. package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.yaml +42 -42
  42. package/node_modules/@commandgarden/daemon/connectors/timetracking-report.eval.js +81 -81
  43. package/node_modules/@commandgarden/daemon/connectors/timetracking-report.yaml +52 -52
  44. package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.eval.js +27 -27
  45. package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.yaml +38 -38
  46. package/node_modules/@commandgarden/daemon/connectors/tokenmaster-clients-list.yaml +55 -55
  47. package/node_modules/@commandgarden/daemon/dist/audit-store.js +8 -8
  48. package/node_modules/@commandgarden/daemon/dist/auth.d.ts +0 -1
  49. package/node_modules/@commandgarden/daemon/dist/auth.d.ts.map +1 -1
  50. package/node_modules/@commandgarden/daemon/dist/auth.js +0 -10
  51. package/node_modules/@commandgarden/daemon/dist/auth.js.map +1 -1
  52. package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts +24 -0
  53. package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts.map +1 -0
  54. package/node_modules/@commandgarden/daemon/dist/cdp-client.js +150 -0
  55. package/node_modules/@commandgarden/daemon/dist/cdp-client.js.map +1 -0
  56. package/node_modules/@commandgarden/daemon/dist/main.js +5 -12
  57. package/node_modules/@commandgarden/daemon/dist/main.js.map +1 -1
  58. package/node_modules/@commandgarden/daemon/dist/server.d.ts.map +1 -1
  59. package/node_modules/@commandgarden/daemon/dist/server.js +0 -10
  60. package/node_modules/@commandgarden/daemon/dist/server.js.map +1 -1
  61. package/node_modules/@commandgarden/daemon/package.json +32 -32
  62. package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts +1 -5
  63. package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts.map +1 -1
  64. package/node_modules/@commandgarden/shared/dist/daemon-client.js +14 -32
  65. package/node_modules/@commandgarden/shared/dist/daemon-client.js.map +1 -1
  66. package/node_modules/@commandgarden/shared/package.json +32 -32
  67. package/package.json +58 -58
  68. package/node_modules/@commandgarden/app/dist/server/routes/utils.d.ts +0 -2
  69. package/node_modules/@commandgarden/app/dist/server/routes/utils.js +0 -4
@@ -1,20 +1,20 @@
1
- import{c as h,r as l,u as y,j as e,C as f,a as k,G as b,b as w,L as g,d as v,T as j,S as N,P as S,F as A,B as M,D as L,e as T,f as E,E as I,g as C}from"./index-C8yqRQk-.js";/**
2
- * @license lucide-react v1.23.0 - ISC
1
+ import{c as h,r as l,u as y,j as e,C as f,a as k,G as b,b as w,L as g,d as v,T as j,S as N,P as S,F as A,B as M,D as L,e as T,f as E,E as I,g as C}from"./index-CupEN1w-.js";/**
2
+ * @license lucide-react v1.25.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const _=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],P=h("bot",_);/**
7
- * @license lucide-react v1.23.0 - ISC
7
+ * @license lucide-react v1.25.0 - ISC
8
8
  *
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const D=[["path",{d:"M13.744 17.736a6 6 0 1 1-7.48-7.48",key:"bq4yh3"}],["path",{d:"M15 6h1v4",key:"11y1tn"}],["path",{d:"m6.134 14.768.866-.5 2 3.464",key:"17snzx"}],["circle",{cx:"16",cy:"8",r:"6",key:"14bfc9"}]],O=h("coins",D);/**
12
- * @license lucide-react v1.23.0 - ISC
12
+ * @license lucide-react v1.25.0 - ISC
13
13
  *
14
14
  * This source code is licensed under the ISC license.
15
15
  * See the LICENSE file in the root directory of this source tree.
16
16
  */const $=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],B=h("eye-off",$);/**
17
- * @license lucide-react v1.23.0 - ISC
17
+ * @license lucide-react v1.25.0 - ISC
18
18
  *
19
19
  * This source code is licensed under the ISC license.
20
20
  * See the LICENSE file in the root directory of this source tree.
@@ -195,262 +195,262 @@ ${n.comment}`:n.comment}this.doc.range[2]=n.offset;break}default:this.errors.pus
195
195
  `,n)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(t){var s;const n=t.items[t.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,n.value){const r="end"in n.value?n.value.end:void 0,a=Array.isArray(r)?r[r.length-1]:void 0;(a==null?void 0:a.type)==="comment"?r==null||r.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else n.sep?n.sep.push(this.sourceToken):n.start.push(this.sourceToken);return;case"space":case"comment":if(n.value)t.items.push({start:[this.sourceToken]});else if(n.sep)n.sep.push(this.sourceToken);else{if(this.atIndentedComment(n.start,t.indent)){const r=t.items[t.items.length-2],a=(s=r==null?void 0:r.value)==null?void 0:s.end;if(Array.isArray(a)){ta(a,n.start),a.push(this.sourceToken),t.items.pop();return}}n.start.push(this.sourceToken)}return}if(this.indent>=t.indent){const r=!this.onKeyLine&&this.indent===t.indent,a=r&&(n.sep||n.explicitKey)&&this.type!=="seq-item-ind";let o=[];if(a&&n.sep&&!n.value){const l=[];for(let c=0;c<n.sep.length;++c){const u=n.sep[c];switch(u.type){case"newline":l.push(c);break;case"space":break;case"comment":u.indent>t.indent&&(l.length=0);break;default:l.length=0}}l.length>=2&&(o=n.sep.splice(l[1]))}switch(this.type){case"anchor":case"tag":a||n.value?(o.push(this.sourceToken),t.items.push({start:o}),this.onKeyLine=!0):n.sep?n.sep.push(this.sourceToken):n.start.push(this.sourceToken);return;case"explicit-key-ind":!n.sep&&!n.explicitKey?(n.start.push(this.sourceToken),n.explicitKey=!0):a||n.value?(o.push(this.sourceToken),t.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(n.explicitKey)if(n.sep)if(n.value)t.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Ft(n.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(Hm(n.key)&&!Ft(n.sep,"newline")){const l=Mn(n.start),c=n.key,u=n.sep;u.push(this.sourceToken),delete n.key,delete n.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:l,key:c,sep:u}]})}else o.length>0?n.sep=n.sep.concat(o,this.sourceToken):n.sep.push(this.sourceToken);else if(Ft(n.start,"newline"))Object.assign(n,{key:null,sep:[this.sourceToken]});else{const l=Mn(n.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:l,key:null,sep:[this.sourceToken]}]})}else n.sep?n.value||a?t.items.push({start:o,key:null,sep:[this.sourceToken]}):Ft(n.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):n.sep.push(this.sourceToken):Object.assign(n,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const l=this.flowScalar(this.type);a||n.value?(t.items.push({start:o,key:l,sep:[]}),this.onKeyLine=!0):n.sep?this.stack.push(l):(Object.assign(n,{key:l,sep:[]}),this.onKeyLine=!0);return}default:{const l=this.startBlockValue(t);if(l){if(l.type==="block-seq"){if(!n.explicitKey&&n.sep&&!Ft(n.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else r&&t.items.push({start:o});this.stack.push(l);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(t){var s;const n=t.items[t.items.length-1];switch(this.type){case"newline":if(n.value){const r="end"in n.value?n.value.end:void 0,a=Array.isArray(r)?r[r.length-1]:void 0;(a==null?void 0:a.type)==="comment"?r==null||r.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else n.start.push(this.sourceToken);return;case"space":case"comment":if(n.value)t.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(n.start,t.indent)){const r=t.items[t.items.length-2],a=(s=r==null?void 0:r.value)==null?void 0:s.end;if(Array.isArray(a)){ta(a,n.start),a.push(this.sourceToken),t.items.pop();return}}n.start.push(this.sourceToken)}return;case"anchor":case"tag":if(n.value||this.indent<=t.indent)break;n.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==t.indent)break;n.value||Ft(n.start,"seq-item-ind")?t.items.push({start:[this.sourceToken]}):n.start.push(this.sourceToken);return}if(this.indent>t.indent){const r=this.startBlockValue(t);if(r){this.stack.push(r);return}}yield*this.pop(),yield*this.step()}*flowCollection(t){const n=t.items[t.items.length-1];if(this.type==="flow-error-end"){let s;do yield*this.pop(),s=this.peek(1);while((s==null?void 0:s.type)==="flow-collection")}else if(t.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!n||n.sep?t.items.push({start:[this.sourceToken]}):n.start.push(this.sourceToken);return;case"map-value-ind":!n||n.value?t.items.push({start:[],key:null,sep:[this.sourceToken]}):n.sep?n.sep.push(this.sourceToken):Object.assign(n,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!n||n.value?t.items.push({start:[this.sourceToken]}):n.sep?n.sep.push(this.sourceToken):n.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const r=this.flowScalar(this.type);!n||n.value?t.items.push({start:[],key:r,sep:[]}):n.sep?this.stack.push(r):Object.assign(n,{key:r,sep:[]});return}case"flow-map-end":case"flow-seq-end":t.end.push(this.sourceToken);return}const s=this.startBlockValue(t);s?this.stack.push(s):(yield*this.pop(),yield*this.step())}else{const s=this.peek(2);if(s.type==="block-map"&&(this.type==="map-value-ind"&&s.indent===t.indent||this.type==="newline"&&!s.items[s.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&s.type!=="flow-collection"){const r=ai(s),a=Mn(r);fd(t);const o=t.end.splice(1,t.end.length);o.push(this.sourceToken);const l={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:a,key:t,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=l}else yield*this.lineEnd(t)}}flowScalar(t){if(this.onNewLine){let n=this.source.indexOf(`
196
196
  `)+1;for(;n!==0;)this.onNewLine(this.offset+n),n=this.source.indexOf(`
197
197
  `,n)+1}return{type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const n=ai(t),s=Mn(n);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const n=ai(t),s=Mn(n);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,n){return this.type!=="comment"||this.indent<=n?!1:t.every(s=>s.type==="newline"||s.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(t){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function m1(e){const t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new f1||null,prettyErrors:t}}function p1(e,t={}){const{lineCounter:n,prettyErrors:s}=m1(t),r=new h1(n==null?void 0:n.addNewLine),a=new o1(t);let o=null;for(const l of a.compose(r.parse(e),!0,e.length))if(!o)o=l;else if(o.options.logLevel!=="silent"){o.errors.push(new Ks(l.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return s&&n&&(o.errors.forEach(od(e,n)),o.warnings.forEach(od(e,n))),o}function g1(e,t,n){let s;const r=p1(e,n);if(!r)return null;if(r.warnings.forEach(a=>gm(r.options.logLevel,a)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:s},n))}function y1(e,t,n){let s=null;if(Array.isArray(t)&&(s=t),e===void 0){const{keepUndefined:r}={};if(!r)return}return Ir(e)&&!s?e.toString(n):new $r(e,s,n).toString(n)}const x1=new Set(["daemon.host","daemon.port","app.port"]),v1=["js_evaluate","cookie_write"];function hd(e){const t=e.daemon??{},n=e.security??{},s=e.connectors??{},r=e.audit??{},a=e.output??{},o=e.app??{};return{daemon:{host:String(t.host??"127.0.0.1"),port:Number(t.port??9091)},security:{extensionId:String(n.extensionId??""),highRiskCapabilities:n.highRiskCapabilities??[...v1],approvedHighRisk:n.approvedHighRisk??[],approvalRequired:n.approvalRequired??[],autoApproveConnectors:n.autoApproveConnectors??[],approvalTimeoutMs:Number(n.approvalTimeoutMs??12e4)},connectors:{paths:s.paths??["./connectors","~/.commandgarden/connectors"]},audit:{retentionDays:Number(r.retentionDays??90),dbPath:String(r.dbPath??"~/.commandgarden/audit.db")},output:{defaultFormat:String(a.defaultFormat??"table")},app:{port:Number(o.port??9092)}}}function b1(e){return{daemon:{...e.daemon},security:{...e.security},connectors:{...e.connectors},audit:{...e.audit},output:{...e.output},app:{...e.app}}}function j1(){const[e,t]=v.useState(null),[n,s]=v.useState(null),[r,a]=v.useState([]),[o,l]=v.useState(!0),[c,u]=v.useState(!1),[m,d]=v.useState(null),[p,y]=v.useState(!1),[b,x]=v.useState(""),[j,f]=v.useState(!1),[g,h]=v.useState("");v.useEffect(()=>{Promise.all([B.getConfig(),B.getConnectors()]).then(([E,$])=>{const I=hd(E.config);t(I),s(structuredClone(I)),a($.connectors)}).catch(()=>{t(null),s(null)}).finally(()=>l(!1))},[]);const w=v.useMemo(()=>!e||!n?!1:JSON.stringify(e)!==JSON.stringify(n),[e,n]),k=v.useMemo(()=>{if(!e||!n)return 0;let E=0;for(const $ of Object.keys(n)){const I=e[$],z=n[$];for(const L of Object.keys(z))JSON.stringify(I[L])!==JSON.stringify(z[L])&&E++}return E},[e,n]),C=v.useCallback(async()=>{if(!e||!n)return;if(!n.daemon.host.trim()){d({type:"error",msg:"Daemon host cannot be empty."});return}u(!0),d(null);let E=!1;try{for(const $ of Object.keys(n)){const I=e[$],z=n[$];for(const L of Object.keys(z)){const _=JSON.stringify(z[L]),R=JSON.stringify(I[L]??null);if(_!==R){const F=`${$}.${L}`,X=z[L];let ye;F==="security.approvalTimeoutMs"?ye=String(X):Array.isArray(X)?ye=JSON.stringify(X):ye=String(X),await B.setConfig(F,ye),x1.has(F)&&(E=!0)}}}t(structuredClone(n)),d({type:"success",msg:"Configuration saved."}),E&&y(!0)}catch($){d({type:"error",msg:$ instanceof Error?$.message:"Save failed"})}finally{u(!1),setTimeout(()=>d(null),3e3)}},[e,n]),S=v.useCallback(()=>{e&&s(structuredClone(e))},[e]),N=v.useCallback(()=>{!j&&n&&(x(y1(b1(n))),h("")),f(!j)},[j,n]),T=v.useCallback(()=>{try{const E=g1(b);if(!E||typeof E!="object")throw new Error("Invalid YAML");s(hd(E)),h("")}catch(E){h(E instanceof Error?E.message:"Invalid YAML")}},[b]),A=v.useCallback((E,$,I)=>{s(z=>z&&{...z,[E]:{...z[E],[$]:I}})},[]),M=v.useCallback((E,$,I)=>{s(z=>{if(!z)return z;const L=z[E],_=L[$]??[];return _.includes(I)?z:{...z,[E]:{...L,[$]:[..._,I]}}})},[]),U=v.useCallback((E,$,I)=>{s(z=>{if(!z)return z;const L=z[E],_=L[$]??[];return{...z,[E]:{...L,[$]:_.filter(R=>R!==I)}}})},[]),W=v.useMemo(()=>({updateField:A,addToArray:M,removeFromArray:U}),[A,M,U]);return o?i.jsx(wt,{label:"Loading configuration..."}):!n||!e?i.jsxs("div",{className:"max-w-3xl mx-auto",children:[i.jsx("h2",{className:"font-display text-xl font-bold uppercase tracking-[0.06em] mb-5",children:"Configuration"}),i.jsxs("div",{className:"border border-base-300 p-6 text-center",children:[i.jsx("p",{className:"text-sm opacity-50 mb-2",children:"No configuration found."}),i.jsx("p",{className:"font-mono text-xs opacity-30",children:"Make sure the daemon is running. Configuration will appear here automatically."})]})]}):i.jsxs("div",{className:"max-w-3xl mx-auto pb-20",children:[i.jsx("h2",{className:"font-display text-xl font-bold uppercase tracking-[0.06em] mb-5",children:"Configuration"}),p&&i.jsxs("div",{className:"alert alert-warning mb-6",children:[i.jsxs("span",{children:["Some changes require a daemon restart to take effect. Restart with: ",i.jsx("code",{className:"font-mono text-sm",children:"cg down && cg up"})]}),i.jsx("button",{className:"btn btn-sm btn-ghost",onClick:()=>y(!1),children:"Dismiss"})]}),i.jsxs("div",{className:"space-y-8",children:[i.jsx("div",{id:"cfg-server",className:"scroll-mt-4",children:i.jsx(w1,{config:n,actions:W})}),i.jsx("div",{id:"cfg-security",className:"scroll-mt-4",children:i.jsx(k1,{config:n,connectors:r,actions:W})}),i.jsx("div",{id:"cfg-sources",className:"scroll-mt-4",children:i.jsx(N1,{config:n,actions:W})}),i.jsx("div",{id:"cfg-audit",className:"scroll-mt-4",children:i.jsx(S1,{config:n,actions:W})}),i.jsx("div",{id:"cfg-output",className:"scroll-mt-4",children:i.jsx(C1,{config:n,actions:W})}),i.jsx("div",{id:"cfg-journal",className:"scroll-mt-4",children:i.jsx(E1,{})})]}),i.jsxs("div",{className:"mt-8",children:[i.jsxs("button",{className:"btn btn-sm btn-ghost gap-1",onClick:N,children:[j?"▾":"▸"," Raw Configuration (YAML)"]}),j&&i.jsxs("div",{className:"mt-2 border border-base-300 p-4",children:[i.jsx("textarea",{className:"textarea textarea-bordered w-full font-mono text-sm",rows:16,value:b,onChange:E=>x(E.target.value)}),g&&i.jsx("p",{className:"text-error text-sm mt-1",children:g}),i.jsx("button",{className:"btn btn-sm btn-ghost mt-2",onClick:T,children:"Apply to form"})]})]}),w&&i.jsxs("div",{className:"fixed bottom-0 left-0 md:left-56 right-0 bg-base-100 border-t border-base-300 px-6 py-3 flex items-center justify-between z-50",children:[i.jsxs("span",{className:"text-sm opacity-60",children:[k," unsaved ",k===1?"change":"changes"]}),i.jsxs("div",{className:"flex items-center gap-3",children:[m&&i.jsx("span",{className:`text-sm ${m.type==="success"?"text-success":"text-error"}`,children:m.msg}),i.jsx("button",{className:"btn btn-sm btn-ghost",onClick:S,children:"Discard"}),i.jsx("button",{className:"btn btn-sm btn-primary",onClick:C,disabled:c,children:c?"Saving...":"Save changes"})]})]})]})}function Cs({title:e,description:t,children:n}){return i.jsxs("div",{className:"border border-base-300 p-5",children:[i.jsx("h3",{className:"font-display font-semibold mb-1",children:e}),i.jsx("p",{className:"text-xs opacity-40 mb-5",children:t}),i.jsx("div",{className:"space-y-5",children:n})]})}function Re({label:e,help:t,restart:n,children:s}){return i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-4",children:[i.jsxs("div",{className:"w-48 shrink-0",children:[i.jsx("label",{className:"font-mono text-[0.7rem] font-medium uppercase tracking-wide",children:e}),n&&i.jsx("span",{className:"ml-1.5 tooltip tooltip-right","data-tip":"Requires daemon restart",children:i.jsx("span",{className:"text-xs opacity-40",children:"⟳"})})]}),i.jsx("div",{className:"flex-1",children:s})]}),i.jsx("p",{className:"text-xs opacity-40 mt-1 max-w-[12rem]",children:t})]})}function w1({config:e,actions:t}){const{updateField:n}=t;return i.jsxs(Cs,{title:"Server",description:"Daemon and app server binding configuration",children:[i.jsx(Re,{label:"Daemon Host",help:"IP address the daemon binds to",restart:!0,children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full",required:!0,value:e.daemon.host,onChange:s=>n("daemon","host",s.target.value)})}),i.jsx(Re,{label:"Daemon Port",help:"Port the daemon listens on",restart:!0,children:i.jsx("input",{type:"number",className:"input input-bordered input-sm w-full",min:1024,max:65535,value:e.daemon.port,onChange:s=>n("daemon","port",Number(s.target.value))})}),i.jsx(Re,{label:"GUI Port",help:"Port the GUI app server listens on",restart:!0,children:i.jsx("input",{type:"number",className:"input input-bordered input-sm w-full",min:1024,max:65535,value:e.app.port,onChange:s=>n("app","port",Number(s.target.value))})})]})}function md({values:e,onAdd:t,onRemove:n,placeholder:s}){const[r,a]=v.useState("");return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"flex flex-wrap gap-1 mb-1",children:e.map(o=>i.jsxs(K,{size:"sm",className:"gap-1",children:[o,i.jsx("button",{className:"text-xs opacity-50 hover:opacity-100",onClick:()=>n(o),children:"×"})]},o))}),i.jsxs("div",{className:"flex gap-1",children:[i.jsx("input",{type:"text",className:"input input-bordered input-xs flex-1",placeholder:s,value:r,onChange:o=>a(o.target.value),onKeyDown:o=>{o.key==="Enter"&&r.trim()&&(t(r.trim()),a(""))}}),i.jsx("button",{className:"btn btn-xs btn-ghost",onClick:()=>{r.trim()&&(t(r.trim()),a(""))},children:"Add"})]})]})}function k1({config:e,connectors:t,actions:n}){const{updateField:s,addToArray:r,removeFromArray:a}=n,o=new Set(e.security.highRiskCapabilities),l=v.useMemo(()=>wa(t),[t]);return i.jsxs(Cs,{title:"Connector Security",description:"Manage which connectors are approved and which capabilities require approval",children:[t.length>0&&i.jsx("div",{className:"overflow-x-auto mb-4",children:i.jsxs("table",{className:"table table-sm",children:[i.jsx("thead",{children:i.jsxs("tr",{children:[i.jsx("th",{children:"Connector"}),i.jsx("th",{children:"Capabilities"}),i.jsx("th",{children:"Risk"}),i.jsx("th",{children:"Approved"}),i.jsx("th",{children:"Auto-Approve"})]})}),i.jsx("tbody",{children:l.map(([c,u])=>i.jsxs(v.Fragment,{children:[i.jsx("tr",{children:i.jsxs("td",{colSpan:5,className:"bg-base-200/50 font-mono font-semibold text-xs pt-3 pb-1",children:[c,i.jsxs("span",{className:"font-normal opacity-40 ml-2",children:[u.length," ",u.length===1?"connector":"connectors"]})]})}),u.map(m=>{const d=m.key.split("/")[1],p=m.capabilities.some(x=>o.has(x)),y=e.security.approvedHighRisk.includes(m.key),b=e.security.autoApproveConnectors.includes(m.key);return i.jsxs("tr",{children:[i.jsx("td",{className:"font-mono text-sm pl-6",children:d}),i.jsx("td",{children:i.jsx("div",{className:"flex flex-wrap gap-1",children:m.capabilities.map(x=>i.jsx(K,{variant:o.has(x)?"warning":"neutral",size:"xs",children:x},x))})}),i.jsx("td",{children:p?i.jsx(K,{variant:"warning",size:"xs",children:"High"}):i.jsx("span",{className:"opacity-40",children:"—"})}),i.jsx("td",{children:p?i.jsx("input",{type:"checkbox",className:"toggle toggle-sm toggle-success",checked:y,onChange:()=>y?a("security","approvedHighRisk",m.key):r("security","approvedHighRisk",m.key)}):i.jsx("span",{className:"opacity-40",children:"—"})}),i.jsx("td",{children:i.jsx("input",{type:"checkbox",className:"toggle toggle-sm",checked:b,title:"Skip approval prompts — pipeline steps execute without confirmation",onChange:()=>b?a("security","autoApproveConnectors",m.key):r("security","autoApproveConnectors",m.key)})})]},m.key)})]},c))})]})}),i.jsx(Re,{label:"High-Risk Capabilities",help:"Capabilities that require connector-level approval before first use",children:i.jsx(md,{values:e.security.highRiskCapabilities,onAdd:c=>r("security","highRiskCapabilities",c),onRemove:c=>a("security","highRiskCapabilities",c),placeholder:"Capability name"})}),i.jsx(Re,{label:"Step Approval Required",help:"Capabilities that pause for user confirmation at each pipeline step",children:i.jsx(md,{values:e.security.approvalRequired,onAdd:c=>r("security","approvalRequired",c),onRemove:c=>a("security","approvalRequired",c),placeholder:"Capability name"})}),i.jsx(Re,{label:"Approval Timeout (seconds)",help:"How long to wait for approval before aborting the pipeline",children:i.jsx("input",{type:"number",className:"input input-bordered input-sm w-full",min:1,max:600,value:Math.round(e.security.approvalTimeoutMs/1e3),onChange:c=>s("security","approvalTimeoutMs",Number(c.target.value)*1e3)})}),i.jsx(Re,{label:"Extension ID",help:"Chrome extension ID for origin validation. Leave blank to accept any extension.",children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full",placeholder:"Leave blank for any",value:e.security.extensionId,onChange:c=>s("security","extensionId",c.target.value)})})]})}function N1({config:e,actions:t}){const{addToArray:n,removeFromArray:s}=t,[r,a]=v.useState("");return i.jsxs(Cs,{title:"Connector Sources",description:"Directories to scan for connector YAML files",children:[i.jsx("div",{className:"space-y-1",children:e.connectors.paths.map((o,l)=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"font-mono text-sm flex-1",children:o}),i.jsx("button",{className:"btn btn-xs btn-ghost opacity-50 hover:opacity-100",onClick:()=>s("connectors","paths",o),children:"×"})]},l))}),i.jsxs("div",{className:"flex gap-1 mt-2",children:[i.jsx("input",{type:"text",className:"input input-bordered input-xs flex-1 font-mono",placeholder:"~/path/to/connectors",value:r,onChange:o=>a(o.target.value),onKeyDown:o=>{o.key==="Enter"&&r.trim()&&(n("connectors","paths",r.trim()),a(""))}}),i.jsx("button",{className:"btn btn-xs btn-ghost",onClick:()=>{r.trim()&&(n("connectors","paths",r.trim()),a(""))},children:"Add path"})]}),i.jsxs("p",{className:"text-xs opacity-40 mt-1",children:["Use ",i.jsx("code",{children:"~/"})," for home directory paths. Relative paths resolve from the install directory."]})]})}function S1({config:e,actions:t}){const{updateField:n}=t;return i.jsxs(Cs,{title:"Audit & Retention",description:"Audit log storage and cleanup settings",children:[i.jsx(Re,{label:"Retention Period",help:"Days to keep audit log entries before cleanup",children:i.jsx("input",{type:"number",className:"input input-bordered input-sm w-full",min:1,max:3650,value:e.audit.retentionDays,onChange:s=>n("audit","retentionDays",Number(s.target.value))})}),i.jsx(Re,{label:"Database Path",help:"Path to the audit SQLite database. Change only if you need a custom location.",children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full font-mono opacity-60",value:e.audit.dbPath,onChange:s=>n("audit","dbPath",s.target.value)})})]})}function C1({config:e,actions:t}){const{updateField:n}=t;return i.jsx(Cs,{title:"Output Defaults",description:"Default formatting for CLI output",children:i.jsx(Re,{label:"Default Output Format",help:"Format used when no --format flag is specified",children:i.jsxs("select",{className:"select select-bordered select-sm w-full",value:e.output.defaultFormat,onChange:s=>n("output","defaultFormat",s.target.value),children:[i.jsx("option",{value:"table",children:"table"}),i.jsx("option",{value:"json",children:"json"}),i.jsx("option",{value:"csv",children:"csv"})]})})})}function E1(){const[e,t]=v.useState(""),[n,s]=v.useState(""),[r,a]=v.useState(""),[o,l]=v.useState("40"),[c,u]=v.useState(!1),[m,d]=v.useState(!1);v.useEffect(()=>{B.getPreferences().then(y=>{if(!y.ok)return;const b=y.preferences;t(b["journal.author"]??""),s(b["journal.ado_org"]??""),a(b["journal.ado_repos"]??""),l(b["journal.target_hours"]??"40"),u(!0)}).catch(()=>u(!0))},[]);async function p(){await Promise.all([B.setPreference("journal.author",e),B.setPreference("journal.ado_org",n),B.setPreference("journal.ado_repos",r),B.setPreference("journal.target_hours",o)]),d(!0),setTimeout(()=>d(!1),2e3)}return c?i.jsxs(Cs,{title:"Journal Settings",description:"Configure your Dev Work Journal data sources",children:[i.jsx(Re,{label:"Author",help:"Your name or email as it appears in ADO commits (e.g. mun_hong.lee@mercedes-benz.com)",children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full",placeholder:"your.name@company.com",value:e,onChange:y=>t(y.target.value)})}),i.jsx(Re,{label:"ADO Organization",help:"Azure DevOps organization name (e.g. daimler-mic)",children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full",placeholder:"daimler-mic",value:n,onChange:y=>s(y.target.value)})}),i.jsx(Re,{label:"ADO Repos",help:'Comma-separated project/repo pairs (e.g. "mic-dns/mic-dns-api,mic-dns/mic-dns-ui")',children:i.jsx("input",{type:"text",className:"input input-bordered input-sm w-full font-mono",placeholder:"project/repo,project/repo",value:r,onChange:y=>a(y.target.value)})}),i.jsx(Re,{label:"Weekly Target Hours",help:"Target hours per week for the hours progress bar (default 40)",children:i.jsx("input",{type:"number",className:"input input-bordered input-sm w-20",min:1,max:80,value:o,onChange:y=>l(y.target.value)})}),i.jsxs("div",{className:"flex items-center gap-3 mt-2",children:[i.jsx("button",{className:"btn btn-primary btn-sm",onClick:p,children:"Save Journal Settings"}),m&&i.jsx("span",{className:"text-success text-sm",children:"Saved ✓"})]})]}):null}const T1=i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-3.5 h-3.5",children:i.jsx("path",{d:"M20 6 9 17l-5-5"})});function A1(){const[e,t]=v.useState(!1),[n,s]=v.useState(!1),[r,a]=v.useState(0),[o,l]=v.useState([]),[c,u]=v.useState([]),[m,d]=v.useState(null),p=v.useCallback(async()=>{try{const k=await B.getStatus();t(k.ok),s(k.extensionConnected),a(k.connectorCount)}catch{t(!1),s(!1),a(0)}try{const k=await B.getConnectors();l(k.connectors);const S=(await B.getConfig().catch(()=>({ok:!1,config:{}}))).config.security??{};u(S.approvedHighRisk??[])}catch{}},[]);v.useEffect(()=>{p();const k=setInterval(p,1e4);return()=>clearInterval(k)},[p]);const y=v.useCallback(async k=>{d(k);try{const C=[...c,k];await B.setConfig("security.approvedHighRisk",JSON.stringify(C)),p()}catch{}finally{d(null)}},[c,p]),b=o.filter(k=>k.isHighRisk&&!k.isApproved),x=b.length>0,j=[{id:"daemon",label:"Background service",ok:e,detail:e?"Running":"Not running",instructions:"Run cg up in your terminal to start commandGarden. This launches the background service and opens the web interface."},{id:"extension",label:"Browser extension",ok:n,detail:n?"Connected":"Not connected",instructions:"Install the commandGarden Chrome extension, then open Chrome. The extension connects automatically when the background service is running."},{id:"connectors",label:"Connectors installed",ok:r>0,detail:r>0?`${r} available`:"None found",instructions:"Connectors are loaded automatically when you start the service. If none appear, check that connector files exist in ~/.commandgarden/connectors/ and restart with cg up."}];x&&j.push({id:"permissions",label:"Connector permissions",ok:!1,detail:`${b.length} need${b.length===1?"s":""} authorization`,instructions:"Some connectors need authorization before first use. You can authorize them here or in Configuration → Connector Security."});const f=j.filter(k=>k.ok).length,g=j.length,h=f===g,w=v.useMemo(()=>wa(o),[o]);return i.jsxs("div",{className:"max-w-3xl mx-auto",children:[i.jsx("h2",{className:"font-display text-xl font-bold uppercase tracking-[0.06em] mb-1",children:"Setup Guide"}),i.jsx("p",{className:"text-sm opacity-60 mb-6",children:"Complete these steps to start running connectors from your browser."}),i.jsxs("div",{className:"flex items-center gap-3 mb-6",children:[i.jsx("div",{className:"flex-1 h-1.5 bg-base-300 overflow-hidden",children:i.jsx("div",{className:"h-full bg-success transition-all duration-300 ease-out",style:{width:`${g>0?f/g*100:0}%`}})}),i.jsxs("span",{className:"font-mono text-xs opacity-50 shrink-0",children:[f,"/",g]})]}),i.jsx("div",{className:"space-y-3 mb-8",children:j.map((k,C)=>i.jsxs("div",{className:`border ${k.ok?"border-base-300":"border-base-300 bg-base-200/50"}`,children:[i.jsxs("div",{className:"p-4 flex items-center gap-3",children:[i.jsx("span",{className:`w-5 h-5 flex items-center justify-center font-mono text-xs font-bold shrink-0 ${k.ok?"bg-success text-success-content":"border border-base-300 text-base-content/50"}`,children:k.ok?T1:C+1}),i.jsx("span",{className:"font-semibold flex-1",children:k.label}),i.jsx(K,{variant:k.ok?"success":"warning",children:k.detail})]}),!k.ok&&i.jsxs("div",{className:"px-4 pb-4 text-sm opacity-70 border-t border-base-300/50 pt-3 ml-8",children:[k.instructions,k.id==="permissions"&&b.length>0&&i.jsx("div",{className:"mt-3 space-y-2",children:b.map(S=>i.jsxs("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[i.jsxs("div",{children:[i.jsx("span",{className:"font-mono text-sm",children:S.key}),S.description&&i.jsx("span",{className:"text-xs opacity-50 ml-2",children:S.description})]}),i.jsx("button",{className:"btn btn-sm btn-warning btn-outline shrink-0",disabled:m===S.key,onClick:()=>y(S.key),children:m===S.key?"Authorizing…":"Authorize"})]},S.key))})]})]},C))}),h&&o.length>0&&i.jsxs("div",{className:"border border-success/30 bg-success/5 p-5",children:[i.jsx("p",{className:"font-semibold text-success mb-3",children:"Everything's ready. Pick a connector to try."}),i.jsx("div",{className:"space-y-3",children:w.map(([k,C])=>i.jsxs("div",{children:[i.jsx("span",{className:"font-mono font-semibold text-sm",children:k}),i.jsx("div",{className:"flex flex-wrap gap-2 mt-1",children:C.map(S=>{const N=S.key.split("/")[1];return i.jsx(we,{to:`/connectors/${k}/${N}`,className:"btn btn-sm btn-outline",children:i.jsx("span",{className:"font-mono",children:N})},S.key)})})]},k))})]}),!h&&o.length>0&&i.jsxs("div",{className:"border-t border-base-300 pt-6",children:[i.jsx("div",{className:"font-mono text-[0.6rem] font-medium opacity-40 uppercase tracking-[0.12em] mb-4",children:"Installed connectors"}),i.jsx("div",{className:"space-y-4",children:w.map(([k,C])=>i.jsxs("div",{children:[i.jsx("div",{className:"font-mono font-semibold text-sm mb-1.5",children:k}),i.jsx("div",{className:"space-y-1",children:C.map(S=>{const N=S.key.split("/")[1];return i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-baseline gap-2",children:[i.jsx("span",{className:"font-mono text-sm",children:N}),i.jsx(K,{size:"xs",children:S.access})]}),S.description&&i.jsx("div",{className:"text-xs opacity-40 mb-1",children:S.description})]},S.key)})})]},k))}),i.jsx(we,{to:"/connectors",className:"inline-flex items-center gap-1 font-mono text-xs mt-5 opacity-50 hover:opacity-80 transition-opacity",children:"View all connectors →"})]})]})}function gs({message:e}){return i.jsx("div",{role:"alert",className:"alert alert-warning",children:i.jsx("span",{children:e??"Sign in to the target app in Chrome, then try again."})})}function Vm(e){const t=e.getDay();return t!==0&&t!==6}function L1(e){const[t,n]=e.split("-").map(Number),s=new Date(t,n,0).getDate();let r=0;for(let a=1;a<=s;a++)Vm(new Date(t,n-1,a))&&r++;return r}function P1(e,t){const[n,s]=e.split("-").map(Number),r=new Date(t+"T00:00:00"),a=new Date(n,s,0),o=r>a?a:r;let l=0;for(let c=1;c<=o.getDate();c++){const u=new Date(n,s-1,c);if(u>o)break;Vm(u)&&l++}return l}function I1(e){const{targetHours:t,actualHours:n,month:s,today:r}=e,a=L1(s),o=P1(s,r),l=a-o,c=t>0?n/t*100:0,u=Math.max(0,(t-n)/8);if(n>=t)return{status:"reached",percentage:c,daysRemaining:0,hoursPerDayNeeded:0,workingDaysTotal:a,workingDaysElapsed:o,workingDaysRemaining:l};const m=a>0?t/a*o:0,d=l>0?Math.max(0,(t-n)/l):0;let p;return n>=m?p="on_track":a>0&&o/a<.8?p="behind":p="at_risk",{status:p,percentage:c,daysRemaining:u,hoursPerDayNeeded:d,workingDaysTotal:a,workingDaysElapsed:o,workingDaysRemaining:l}}const M1={reached:"bg-success",on_track:"bg-success",behind:"bg-warning",at_risk:"bg-error"};function O1({percentage:e,status:t,className:n=""}){const s=Math.min(100,Math.max(0,e));return i.jsx("div",{className:`h-2 bg-base-300 ${n}`,children:i.jsx("div",{className:`h-full ${M1[t]} transition-[width] duration-150`,style:{width:`${s}%`}})})}/**
198
- * @license lucide-react v1.23.0 - ISC
198
+ * @license lucide-react v1.25.0 - ISC
199
199
  *
200
200
  * This source code is licensed under the ISC license.
201
201
  * See the LICENSE file in the root directory of this source tree.
202
202
  */const Km=(...e)=>e.filter((t,n,s)=>!!t&&t.trim()!==""&&s.indexOf(t)===n).join(" ").trim();/**
203
- * @license lucide-react v1.23.0 - ISC
203
+ * @license lucide-react v1.25.0 - ISC
204
204
  *
205
205
  * This source code is licensed under the ISC license.
206
206
  * See the LICENSE file in the root directory of this source tree.
207
207
  */const _1=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
208
- * @license lucide-react v1.23.0 - ISC
208
+ * @license lucide-react v1.25.0 - ISC
209
209
  *
210
210
  * This source code is licensed under the ISC license.
211
211
  * See the LICENSE file in the root directory of this source tree.
212
212
  */const $1=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,s)=>s?s.toUpperCase():n.toLowerCase());/**
213
- * @license lucide-react v1.23.0 - ISC
213
+ * @license lucide-react v1.25.0 - ISC
214
214
  *
215
215
  * This source code is licensed under the ISC license.
216
216
  * See the LICENSE file in the root directory of this source tree.
217
217
  */const pd=e=>{const t=$1(e);return t.charAt(0).toUpperCase()+t.slice(1)};/**
218
- * @license lucide-react v1.23.0 - ISC
218
+ * @license lucide-react v1.25.0 - ISC
219
219
  *
220
220
  * This source code is licensed under the ISC license.
221
221
  * See the LICENSE file in the root directory of this source tree.
222
222
  */var fo={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
223
- * @license lucide-react v1.23.0 - ISC
223
+ * @license lucide-react v1.25.0 - ISC
224
224
  *
225
225
  * This source code is licensed under the ISC license.
226
226
  * See the LICENSE file in the root directory of this source tree.
227
227
  */const D1=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1},R1=v.createContext({}),z1=()=>v.useContext(R1),F1=v.forwardRef(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:s,className:r="",children:a,iconNode:o,...l},c)=>{const{size:u=24,strokeWidth:m=2,absoluteStrokeWidth:d=!1,color:p="currentColor",className:y=""}=z1()??{},b=s??d?Number(n??m)*24/Number(t??u):n??m;return v.createElement("svg",{ref:c,...fo,width:t??u??fo.width,height:t??u??fo.height,stroke:e??p,strokeWidth:b,className:Km("lucide",y,r),...!a&&!D1(l)&&{"aria-hidden":"true"},...l},[...o.map(([x,j])=>v.createElement(x,j)),...Array.isArray(a)?a:[a]])});/**
228
- * @license lucide-react v1.23.0 - ISC
228
+ * @license lucide-react v1.25.0 - ISC
229
229
  *
230
230
  * This source code is licensed under the ISC license.
231
231
  * See the LICENSE file in the root directory of this source tree.
232
232
  */const H=(e,t)=>{const n=v.forwardRef(({className:s,...r},a)=>v.createElement(F1,{ref:a,iconNode:t,className:Km(`lucide-${_1(pd(e))}`,`lucide-${e}`,s),...r}));return n.displayName=pd(e),n};/**
233
- * @license lucide-react v1.23.0 - ISC
233
+ * @license lucide-react v1.25.0 - ISC
234
234
  *
235
235
  * This source code is licensed under the ISC license.
236
236
  * See the LICENSE file in the root directory of this source tree.
237
237
  */const B1=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],qe=H("arrow-right",B1);/**
238
- * @license lucide-react v1.23.0 - ISC
238
+ * @license lucide-react v1.25.0 - ISC
239
239
  *
240
240
  * This source code is licensed under the ISC license.
241
241
  * See the LICENSE file in the root directory of this source tree.
242
242
  */const U1=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],Gm=H("book-open",U1);/**
243
- * @license lucide-react v1.23.0 - ISC
243
+ * @license lucide-react v1.25.0 - ISC
244
244
  *
245
245
  * This source code is licensed under the ISC license.
246
246
  * See the LICENSE file in the root directory of this source tree.
247
247
  */const W1=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]],H1=H("calendar-days",W1);/**
248
- * @license lucide-react v1.23.0 - ISC
248
+ * @license lucide-react v1.25.0 - ISC
249
249
  *
250
250
  * This source code is licensed under the ISC license.
251
251
  * See the LICENSE file in the root directory of this source tree.
252
252
  */const V1=[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M17 14h-6",key:"bkmgh3"}],["path",{d:"M13 18H7",key:"bb0bb7"}],["path",{d:"M7 14h.01",key:"1qa3f1"}],["path",{d:"M17 18h.01",key:"1bdyru"}]],K1=H("calendar-range",V1);/**
253
- * @license lucide-react v1.23.0 - ISC
253
+ * @license lucide-react v1.25.0 - ISC
254
254
  *
255
255
  * This source code is licensed under the ISC license.
256
256
  * See the LICENSE file in the root directory of this source tree.
257
257
  */const G1=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],q1=H("calendar",G1);/**
258
- * @license lucide-react v1.23.0 - ISC
258
+ * @license lucide-react v1.25.0 - ISC
259
259
  *
260
260
  * This source code is licensed under the ISC license.
261
261
  * See the LICENSE file in the root directory of this source tree.
262
262
  */const Y1=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Q1=H("chevron-down",Y1);/**
263
- * @license lucide-react v1.23.0 - ISC
263
+ * @license lucide-react v1.25.0 - ISC
264
264
  *
265
265
  * This source code is licensed under the ISC license.
266
266
  * See the LICENSE file in the root directory of this source tree.
267
267
  */const J1=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],X1=H("chevron-left",J1);/**
268
- * @license lucide-react v1.23.0 - ISC
268
+ * @license lucide-react v1.25.0 - ISC
269
269
  *
270
270
  * This source code is licensed under the ISC license.
271
271
  * See the LICENSE file in the root directory of this source tree.
272
272
  */const Z1=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],ev=H("chevron-right",Z1);/**
273
- * @license lucide-react v1.23.0 - ISC
273
+ * @license lucide-react v1.25.0 - ISC
274
274
  *
275
275
  * This source code is licensed under the ISC license.
276
276
  * See the LICENSE file in the root directory of this source tree.
277
277
  */const tv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],_c=H("circle-alert",tv);/**
278
- * @license lucide-react v1.23.0 - ISC
278
+ * @license lucide-react v1.25.0 - ISC
279
279
  *
280
280
  * This source code is licensed under the ISC license.
281
281
  * See the LICENSE file in the root directory of this source tree.
282
282
  */const nv=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],$c=H("circle-check-big",nv);/**
283
- * @license lucide-react v1.23.0 - ISC
283
+ * @license lucide-react v1.25.0 - ISC
284
284
  *
285
285
  * This source code is licensed under the ISC license.
286
286
  * See the LICENSE file in the root directory of this source tree.
287
287
  */const sv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Dc=H("circle-check",sv);/**
288
- * @license lucide-react v1.23.0 - ISC
288
+ * @license lucide-react v1.25.0 - ISC
289
289
  *
290
290
  * This source code is licensed under the ISC license.
291
291
  * See the LICENSE file in the root directory of this source tree.
292
292
  */const rv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],qm=H("circle-x",rv);/**
293
- * @license lucide-react v1.23.0 - ISC
293
+ * @license lucide-react v1.25.0 - ISC
294
294
  *
295
295
  * This source code is licensed under the ISC license.
296
296
  * See the LICENSE file in the root directory of this source tree.
297
297
  */const iv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],Rr=H("clock",iv);/**
298
- * @license lucide-react v1.23.0 - ISC
298
+ * @license lucide-react v1.25.0 - ISC
299
299
  *
300
300
  * This source code is licensed under the ISC license.
301
301
  * See the LICENSE file in the root directory of this source tree.
302
302
  */const av=[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]],ov=H("code-xml",av);/**
303
- * @license lucide-react v1.23.0 - ISC
303
+ * @license lucide-react v1.25.0 - ISC
304
304
  *
305
305
  * This source code is licensed under the ISC license.
306
306
  * See the LICENSE file in the root directory of this source tree.
307
307
  */const lv=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],gd=H("database",lv);/**
308
- * @license lucide-react v1.23.0 - ISC
308
+ * @license lucide-react v1.25.0 - ISC
309
309
  *
310
310
  * This source code is licensed under the ISC license.
311
311
  * See the LICENSE file in the root directory of this source tree.
312
312
  */const cv=[["path",{d:"M11 20H2",key:"nlcfvz"}],["path",{d:"M11 4.562v16.157a1 1 0 0 0 1.242.97L19 20V5.562a2 2 0 0 0-1.515-1.94l-4-1A2 2 0 0 0 11 4.561z",key:"au4z13"}],["path",{d:"M11 4H8a2 2 0 0 0-2 2v14",key:"74r1mk"}],["path",{d:"M14 12h.01",key:"1jfl7z"}],["path",{d:"M22 20h-3",key:"vhrsz"}]],Ym=H("door-open",cv);/**
313
- * @license lucide-react v1.23.0 - ISC
313
+ * @license lucide-react v1.25.0 - ISC
314
314
  *
315
315
  * This source code is licensed under the ISC license.
316
316
  * See the LICENSE file in the root directory of this source tree.
317
317
  */const uv=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Qm=H("eye",uv);/**
318
- * @license lucide-react v1.23.0 - ISC
318
+ * @license lucide-react v1.25.0 - ISC
319
319
  *
320
320
  * This source code is licensed under the ISC license.
321
321
  * See the LICENSE file in the root directory of this source tree.
322
322
  */const dv=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],ho=H("file-text",dv);/**
323
- * @license lucide-react v1.23.0 - ISC
323
+ * @license lucide-react v1.25.0 - ISC
324
324
  *
325
325
  * This source code is licensed under the ISC license.
326
326
  * See the LICENSE file in the root directory of this source tree.
327
327
  */const fv=[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]],hv=H("fingerprint-pattern",fv);/**
328
- * @license lucide-react v1.23.0 - ISC
328
+ * @license lucide-react v1.25.0 - ISC
329
329
  *
330
330
  * This source code is licensed under the ISC license.
331
331
  * See the LICENSE file in the root directory of this source tree.
332
332
  */const mv=[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]],Jm=H("git-branch",mv);/**
333
- * @license lucide-react v1.23.0 - ISC
333
+ * @license lucide-react v1.25.0 - ISC
334
334
  *
335
335
  * This source code is licensed under the ISC license.
336
336
  * See the LICENSE file in the root directory of this source tree.
337
337
  */const pv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],oi=H("globe",pv);/**
338
- * @license lucide-react v1.23.0 - ISC
338
+ * @license lucide-react v1.25.0 - ISC
339
339
  *
340
340
  * This source code is licensed under the ISC license.
341
341
  * See the LICENSE file in the root directory of this source tree.
342
342
  */const gv=[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]],yv=H("graduation-cap",gv);/**
343
- * @license lucide-react v1.23.0 - ISC
343
+ * @license lucide-react v1.25.0 - ISC
344
344
  *
345
345
  * This source code is licensed under the ISC license.
346
346
  * See the LICENSE file in the root directory of this source tree.
347
347
  */const xv=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],vv=H("info",xv);/**
348
- * @license lucide-react v1.23.0 - ISC
348
+ * @license lucide-react v1.25.0 - ISC
349
349
  *
350
350
  * This source code is licensed under the ISC license.
351
351
  * See the LICENSE file in the root directory of this source tree.
352
352
  */const bv=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],jv=H("key-round",bv);/**
353
- * @license lucide-react v1.23.0 - ISC
353
+ * @license lucide-react v1.25.0 - ISC
354
354
  *
355
355
  * This source code is licensed under the ISC license.
356
356
  * See the LICENSE file in the root directory of this source tree.
357
357
  */const wv=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],kv=H("layers",wv);/**
358
- * @license lucide-react v1.23.0 - ISC
358
+ * @license lucide-react v1.25.0 - ISC
359
359
  *
360
360
  * This source code is licensed under the ISC license.
361
361
  * See the LICENSE file in the root directory of this source tree.
362
362
  */const Nv=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],Sv=H("layout-dashboard",Nv);/**
363
- * @license lucide-react v1.23.0 - ISC
363
+ * @license lucide-react v1.25.0 - ISC
364
364
  *
365
365
  * This source code is licensed under the ISC license.
366
366
  * See the LICENSE file in the root directory of this source tree.
367
367
  */const Cv=[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]],Ev=H("library",Cv);/**
368
- * @license lucide-react v1.23.0 - ISC
368
+ * @license lucide-react v1.25.0 - ISC
369
369
  *
370
370
  * This source code is licensed under the ISC license.
371
371
  * See the LICENSE file in the root directory of this source tree.
372
372
  */const Tv=[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]],Av=H("lightbulb",Tv);/**
373
- * @license lucide-react v1.23.0 - ISC
373
+ * @license lucide-react v1.25.0 - ISC
374
374
  *
375
375
  * This source code is licensed under the ISC license.
376
376
  * See the LICENSE file in the root directory of this source tree.
377
377
  */const Lv=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],Xm=H("lock",Lv);/**
378
- * @license lucide-react v1.23.0 - ISC
378
+ * @license lucide-react v1.25.0 - ISC
379
379
  *
380
380
  * This source code is licensed under the ISC license.
381
381
  * See the LICENSE file in the root directory of this source tree.
382
382
  */const Pv=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],Iv=H("network",Pv);/**
383
- * @license lucide-react v1.23.0 - ISC
383
+ * @license lucide-react v1.25.0 - ISC
384
384
  *
385
385
  * This source code is licensed under the ISC license.
386
386
  * See the LICENSE file in the root directory of this source tree.
387
387
  */const Mv=[["path",{d:"M15 18h-5",key:"95g1m2"}],["path",{d:"M18 14h-8",key:"sponae"}],["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2",key:"39pd36"}],["rect",{width:"8",height:"4",x:"10",y:"6",rx:"1",key:"aywv1n"}]],Zm=H("newspaper",Mv);/**
388
- * @license lucide-react v1.23.0 - ISC
388
+ * @license lucide-react v1.25.0 - ISC
389
389
  *
390
390
  * This source code is licensed under the ISC license.
391
391
  * See the LICENSE file in the root directory of this source tree.
392
392
  */const Ov=[["path",{d:"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4",key:"re6nr2"}],["path",{d:"M2 6h4",key:"aawbzj"}],["path",{d:"M2 10h4",key:"l0bgd4"}],["path",{d:"M2 14h4",key:"1gsvsf"}],["path",{d:"M2 18h4",key:"1bu2t1"}],["path",{d:"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"pqwjuv"}]],_v=H("notebook-pen",Ov);/**
393
- * @license lucide-react v1.23.0 - ISC
393
+ * @license lucide-react v1.25.0 - ISC
394
394
  *
395
395
  * This source code is licensed under the ISC license.
396
396
  * See the LICENSE file in the root directory of this source tree.
397
397
  */const $v=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M9 21V9",key:"1oto5p"}]],Dv=H("panels-top-left",$v);/**
398
- * @license lucide-react v1.23.0 - ISC
398
+ * @license lucide-react v1.25.0 - ISC
399
399
  *
400
400
  * This source code is licensed under the ISC license.
401
401
  * See the LICENSE file in the root directory of this source tree.
402
402
  */const Rv=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],zv=H("plug",Rv);/**
403
- * @license lucide-react v1.23.0 - ISC
403
+ * @license lucide-react v1.25.0 - ISC
404
404
  *
405
405
  * This source code is licensed under the ISC license.
406
406
  * See the LICENSE file in the root directory of this source tree.
407
407
  */const Fv=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],ep=H("scroll-text",Fv);/**
408
- * @license lucide-react v1.23.0 - ISC
408
+ * @license lucide-react v1.25.0 - ISC
409
409
  *
410
410
  * This source code is licensed under the ISC license.
411
411
  * See the LICENSE file in the root directory of this source tree.
412
412
  */const Bv=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],bl=H("server",Bv);/**
413
- * @license lucide-react v1.23.0 - ISC
413
+ * @license lucide-react v1.25.0 - ISC
414
414
  *
415
415
  * This source code is licensed under the ISC license.
416
416
  * See the LICENSE file in the root directory of this source tree.
417
417
  */const Uv=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Wv=H("settings",Uv);/**
418
- * @license lucide-react v1.23.0 - ISC
418
+ * @license lucide-react v1.25.0 - ISC
419
419
  *
420
420
  * This source code is licensed under the ISC license.
421
421
  * See the LICENSE file in the root directory of this source tree.
422
422
  */const Hv=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],Vv=H("shield-alert",Hv);/**
423
- * @license lucide-react v1.23.0 - ISC
423
+ * @license lucide-react v1.25.0 - ISC
424
424
  *
425
425
  * This source code is licensed under the ISC license.
426
426
  * See the LICENSE file in the root directory of this source tree.
427
427
  */const Kv=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],tp=H("shield-check",Kv);/**
428
- * @license lucide-react v1.23.0 - ISC
428
+ * @license lucide-react v1.25.0 - ISC
429
429
  *
430
430
  * This source code is licensed under the ISC license.
431
431
  * See the LICENSE file in the root directory of this source tree.
432
432
  */const Gv=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],qv=H("shield",Gv);/**
433
- * @license lucide-react v1.23.0 - ISC
433
+ * @license lucide-react v1.25.0 - ISC
434
434
  *
435
435
  * This source code is licensed under the ISC license.
436
436
  * See the LICENSE file in the root directory of this source tree.
437
437
  */const Yv=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],jl=H("sparkles",Yv);/**
438
- * @license lucide-react v1.23.0 - ISC
438
+ * @license lucide-react v1.25.0 - ISC
439
439
  *
440
440
  * This source code is licensed under the ISC license.
441
441
  * See the LICENSE file in the root directory of this source tree.
442
442
  */const Qv=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Ci=H("terminal",Qv);/**
443
- * @license lucide-react v1.23.0 - ISC
443
+ * @license lucide-react v1.25.0 - ISC
444
444
  *
445
445
  * This source code is licensed under the ISC license.
446
446
  * See the LICENSE file in the root directory of this source tree.
447
447
  */const Jv=[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]],np=H("ticket",Jv);/**
448
- * @license lucide-react v1.23.0 - ISC
448
+ * @license lucide-react v1.25.0 - ISC
449
449
  *
450
450
  * This source code is licensed under the ISC license.
451
451
  * See the LICENSE file in the root directory of this source tree.
452
452
  */const Xv=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],Zv=H("trending-up",Xv);/**
453
- * @license lucide-react v1.23.0 - ISC
453
+ * @license lucide-react v1.25.0 - ISC
454
454
  *
455
455
  * This source code is licensed under the ISC license.
456
456
  * See the LICENSE file in the root directory of this source tree.
@@ -508,4 +508,4 @@ pipeline:
508
508
  selector: ".ticket-row"
509
509
  fields:
510
510
  id: ".ticket-id"
511
- title: ".ticket-title"`}),i.jsxs("p",{className:"text-xs opacity-50 mt-2",children:["Each ",i.jsx("span",{className:"font-mono",children:"step"})," above maps to one hop in the diagram: navigate opens the tab, wait confirms it loaded, extract reads structured rows back out."]})]})]})]}),i.jsxs("section",{id:"concepts-approval",className:"scroll-mt-4",children:[i.jsx(yo,{children:"Not everything runs unattended"}),i.jsx("h3",{className:"font-display text-base font-semibold mb-3",children:"Approval & risk-tiering workflow"}),i.jsx("p",{className:"text-sm opacity-70 max-w-[65ch] leading-relaxed mb-6",children:"Every capability has a risk tier. Low and medium tiers run without interruption. High-risk steps pause and wait for a human to say yes, either in the CLI or as a Chrome notification."}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-8",children:Id.map((e,t)=>i.jsxs("div",{className:"relative",children:[i.jsxs("div",{className:"border border-base-300 p-4 h-full",children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(e.icon,{className:"w-4 h-4 opacity-50"}),i.jsx(K,{variant:e.variant,size:"xs",children:e.label})]}),i.jsx("p",{className:"text-xs opacity-60 leading-relaxed",children:e.desc})]}),t<Id.length-1&&i.jsx(qe,{className:"hidden sm:block w-4 h-4 opacity-30 absolute top-1/2 -right-2 -translate-y-1/2 translate-x-1/2 z-10"})]},e.label))}),i.jsx(Nl,{flow:Tj}),i.jsxs("div",{className:"mt-6 border border-primary/20 bg-primary/[0.03] p-4 flex items-center gap-3",children:[i.jsx(Xm,{className:"w-4 h-4 text-primary shrink-0"}),i.jsx("p",{className:"text-sm opacity-70",children:"No credentials are ever stored to make this work. Approval just gates whether an already-authenticated step is allowed to run."})]})]})]})}v.lazy(()=>Bg(()=>import("./Slides-DWQmJfkp.js"),[]));function Gs({isActive:e}){return`flex items-center gap-2 px-3 py-2 text-sm transition-colors ${e?"bg-primary text-primary-content font-semibold":"hover:text-primary"}`}function zs({isActive:e}){return`flex items-center gap-2 pl-4 pr-3 py-1.5 text-sm transition-colors ${e?"bg-primary text-primary-content font-semibold":"hover:text-primary"}`}const Fs={"/config":[{label:"Server",id:"cfg-server"},{label:"Security",id:"cfg-security"},{label:"Sources",id:"cfg-sources"},{label:"Audit",id:"cfg-audit"},{label:"Output",id:"cfg-output"},{label:"Journal",id:"cfg-journal"}],"/architecture":[{label:"Diagram",id:"arch-diagram"},{label:"Components",id:"arch-components"},{label:"Data Stores",id:"arch-stores"},{label:"Data Flows",id:"arch-flows"},{label:"Security",id:"arch-security"},{label:"Packages",id:"arch-packages"},{label:"Build Order",id:"arch-build"}],"/api-reference":[{label:"Endpoints",id:"api-endpoints"},{label:"Pipeline Steps",id:"api-pipeline"},{label:"Expressions",id:"api-expressions"}],"/concepts":[{label:"Capability & World Model",id:"concepts-worlds"},{label:"Pipeline Lifecycle",id:"concepts-lifecycle"},{label:"Approval & Risk-Tiering",id:"concepts-approval"}],"/why":[{label:"The Problem",id:"why-problem"},{label:"The Solution",id:"why-solution"},{label:"Architecture",id:"why-architecture"},{label:"Built-in Apps",id:"why-apps"},{label:"Workflow",id:"why-happy-path"},{label:"Security",id:"why-security"},{label:"Get Started",id:"why-get-started"},{label:"Extend",id:"why-extend"}]};function Lj({sections:e}){const t=v.useMemo(()=>e.map(r=>r.id),[e]),n=Qy(t),s=r=>{const a=document.getElementById(r);a&&a.scrollIntoView({behavior:"smooth",block:"start"})};return i.jsx("div",{className:"ml-3 border-l border-base-300 py-0.5",children:e.map(r=>i.jsx("button",{onClick:()=>s(r.id),className:`block w-full text-left pl-3 py-1 text-[0.7rem] transition-colors ${n===r.id?"text-primary opacity-100":"opacity-50 hover:opacity-70"}`,children:r.label},r.id))})}function _n({to:e,label:t,icon:n,sections:s}){const a=An().pathname===e;return i.jsxs(i.Fragment,{children:[i.jsxs(gt,{to:e,end:e==="/",className:Gs,children:[n,t]}),a&&s.length>0&&i.jsx(Lj,{sections:s})]})}function Pj(){const[e,t]=v.useState(!1),[n,s]=v.useState(!1),[r,a]=v.useState(!1),[o,l]=v.useState([]),[c,u]=v.useState(!1),m=v.useRef(null),d=An();v.useEffect(()=>{a(!1)},[d.pathname]),v.useEffect(()=>{if(!d.hash)return;const b=d.hash.slice(1),x=document.getElementById(b);x&&x.scrollIntoView({behavior:"smooth",block:"start"})},[d.pathname,d.hash]),v.useEffect(()=>{const b=()=>{B.getStatus().then(j=>{t(j.ok),s(j.extensionConnected)}).catch(()=>{t(!1),s(!1)})};b();const x=setInterval(b,3e4);return()=>clearInterval(x)},[]),v.useEffect(()=>{B.getConnectors().then(b=>{const x=wa(b.connectors).map(([j])=>j);l(x)}).catch(()=>{})},[]);const p=v.useMemo(()=>o.map(b=>({label:b,id:`conn-${b}`})),[o]),y=v.useCallback(()=>{const b=m.current;b&&u(b.scrollHeight-b.scrollTop-b.clientHeight>1)},[]);return v.useEffect(()=>{y();const b=m.current;if(b)return b.addEventListener("scroll",y,{passive:!0}),window.addEventListener("resize",y),()=>{b.removeEventListener("scroll",y),window.removeEventListener("resize",y)}},[y,p,d.pathname,e]),i.jsxs("div",{className:"flex min-h-screen",children:[i.jsx("button",{className:"fixed top-3 left-3 z-50 md:hidden btn btn-sm btn-ghost",onClick:()=>a(!r),"aria-label":r?"Close menu":"Open menu",children:i.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:r?i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}):i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})}),r&&i.jsx("div",{className:"fixed inset-0 bg-black/30 z-30 md:hidden",onClick:()=>a(!1)}),i.jsxs("aside",{className:`w-56 bg-base-100 border-r border-base-300 flex flex-col fixed top-0 left-0 bottom-0 z-40 transition-transform duration-150 ease-out ${r?"translate-x-0":"-translate-x-full"} md:translate-x-0`,children:[i.jsxs("div",{className:"flex items-start justify-between px-3 py-3 border-b border-base-300",children:[i.jsxs(we,{to:"/",className:"hover:opacity-80 transition-opacity",children:[i.jsxs("h1",{className:"font-display text-lg font-bold tracking-tight",children:[i.jsx("span",{className:"font-normal opacity-50",children:"command"}),"Garden"]}),i.jsx("p",{className:"font-mono text-[0.65rem] opacity-30 mt-1 uppercase tracking-[0.14em]",children:"browser automation"})]}),i.jsx("button",{className:"btn btn-ghost btn-sm btn-square",onClick:()=>{const b=document.documentElement.getAttribute("data-theme")==="dark"?"light":"dark";document.documentElement.setAttribute("data-theme",b),localStorage.setItem("theme",b)},"aria-label":"Toggle theme",children:i.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})})})]}),i.jsxs("div",{className:"relative flex-1 min-h-0",children:[i.jsxs("nav",{ref:m,className:"h-full px-2 py-2 space-y-0.5 overflow-y-auto",children:[i.jsx("div",{className:"px-3 pt-3 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Overview"}),i.jsxs(gt,{to:"/",end:!0,className:Gs,children:[i.jsx(Sv,{className:"w-4 h-4 shrink-0"}),"Dashboard"]}),i.jsxs(gt,{to:"/guide",className:Gs,children:[i.jsx(Gm,{className:"w-4 h-4 shrink-0"}),"Setup Guide"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Apps"}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Administrative"}),i.jsxs(gt,{to:"/apps/timetracking",className:zs,children:[i.jsx(Rr,{className:"w-4 h-4 shrink-0"}),"Time Tracking"]}),i.jsxs(gt,{to:"/apps/rooms",className:zs,children:[i.jsx(Ym,{className:"w-4 h-4 shrink-0"}),"Room Availability"]}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Productivity"}),i.jsxs(gt,{to:"/apps/journal",className:zs,children:[i.jsx(_v,{className:"w-4 h-4 shrink-0"}),"Dev Journal"]}),i.jsxs(gt,{to:"/apps/trusted-peer-expiry",className:zs,children:[i.jsx(tp,{className:"w-4 h-4 shrink-0"}),"Trusted Peer Expiry"]}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Security"}),i.jsxs(gt,{to:"/apps/security-news",className:zs,children:[i.jsx(Zm,{className:"w-4 h-4 shrink-0"}),"Security News"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Platform"}),i.jsx(_n,{to:"/connectors",label:"Connectors",icon:i.jsx(zv,{className:"w-4 h-4 shrink-0"}),sections:p}),i.jsxs(gt,{to:"/audit",className:Gs,children:[i.jsx(ep,{className:"w-4 h-4 shrink-0"}),"Audit Log"]}),i.jsx(_n,{to:"/config",label:"Configuration",icon:i.jsx(Wv,{className:"w-4 h-4 shrink-0"}),sections:e?Fs["/config"]:[]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Reference"}),i.jsx(_n,{to:"/why",label:"Why commandGarden",icon:i.jsx(Av,{className:"w-4 h-4 shrink-0"}),sections:Fs["/why"]}),i.jsx(_n,{to:"/api-reference",label:"API & CLI",icon:i.jsx(Ci,{className:"w-4 h-4 shrink-0"}),sections:Fs["/api-reference"]}),i.jsxs(gt,{to:"/skills",className:Gs,children:[i.jsx(jl,{className:"w-4 h-4 shrink-0"}),"Skills"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Deep Dive"}),i.jsx(_n,{to:"/concepts",label:"Concepts",icon:i.jsx(kv,{className:"w-4 h-4 shrink-0"}),sections:Fs["/concepts"]}),i.jsx(_n,{to:"/architecture",label:"Architecture",icon:i.jsx(Iv,{className:"w-4 h-4 shrink-0"}),sections:Fs["/architecture"]}),!1]}),c&&i.jsx("div",{className:"pointer-events-none absolute bottom-0 inset-x-0 h-8 bg-gradient-to-t from-base-100 to-transparent","aria-hidden":"true"})]}),i.jsxs("div",{className:"px-3 py-2.5 border-t border-base-300",children:[i.jsxs("div",{className:"flex items-center gap-2 text-xs font-mono",children:[i.jsx("span",{className:`w-1.5 h-1.5 ${e?"bg-success":"bg-error"}`,"aria-hidden":"true"}),i.jsx("span",{className:"opacity-50 text-[0.65rem]",children:e?"DAEMON OK":"DAEMON OFF"})]}),i.jsxs("div",{className:"flex items-center gap-2 text-xs font-mono mt-1",children:[i.jsx("span",{className:`w-1.5 h-1.5 ${n?"bg-success":"bg-error"}`,"aria-hidden":"true"}),i.jsx("span",{className:"opacity-50 text-[0.65rem]",children:n?"EXTENSION LINKED":"EXTENSION OFF"})]})]})]}),i.jsx("main",{className:"flex-1 p-4 pt-14 md:pt-5 md:p-5 md:ml-56",children:i.jsx(Oy,{})})]})}function Ij(){return i.jsx(Hy,{children:i.jsx($y,{children:i.jsxs(xe,{element:i.jsx(Pj,{}),children:[i.jsx(xe,{index:!0,element:i.jsx(Zy,{})}),i.jsx(xe,{path:"connectors",element:i.jsx(nx,{})}),i.jsx(xe,{path:"connectors/:site/:name",element:i.jsx(sx,{})}),i.jsx(xe,{path:"audit",element:i.jsx(ax,{})}),i.jsx(xe,{path:"config",element:i.jsx(j1,{})}),i.jsx(xe,{path:"guide",element:i.jsx(A1,{})}),i.jsx(xe,{path:"apps/timetracking",element:i.jsx(ub,{})}),i.jsx(xe,{path:"apps/rooms",element:i.jsx(Nb,{})}),i.jsx(xe,{path:"apps/journal",element:i.jsx(Wb,{})}),i.jsx(xe,{path:"apps/security-news",element:i.jsx(Xb,{})}),i.jsx(xe,{path:"apps/trusted-peer-expiry",element:i.jsx(sj,{})}),i.jsx(xe,{path:"architecture",element:i.jsx(uj,{})}),i.jsx(xe,{path:"api-reference",element:i.jsx(gj,{})}),i.jsx(xe,{path:"skills",element:i.jsx(bj,{})}),i.jsx(xe,{path:"why",element:i.jsx(Nj,{})}),i.jsx(xe,{path:"concepts",element:i.jsx(Aj,{})}),!1]})})})}Kh(document.getElementById("root")).render(i.jsx(v.StrictMode,{children:i.jsx(Ij,{})}));export{Gm as B,X1 as C,gd as D,Qm as E,ho as F,oi as G,Xm as L,Dv as P,bl as S,Ci as T,ev as a,qm as b,H as c,_c as d,qv as e,hv as f,K as g,i as j,v as r,py as u};
511
+ title: ".ticket-title"`}),i.jsxs("p",{className:"text-xs opacity-50 mt-2",children:["Each ",i.jsx("span",{className:"font-mono",children:"step"})," above maps to one hop in the diagram: navigate opens the tab, wait confirms it loaded, extract reads structured rows back out."]})]})]})]}),i.jsxs("section",{id:"concepts-approval",className:"scroll-mt-4",children:[i.jsx(yo,{children:"Not everything runs unattended"}),i.jsx("h3",{className:"font-display text-base font-semibold mb-3",children:"Approval & risk-tiering workflow"}),i.jsx("p",{className:"text-sm opacity-70 max-w-[65ch] leading-relaxed mb-6",children:"Every capability has a risk tier. Low and medium tiers run without interruption. High-risk steps pause and wait for a human to say yes, either in the CLI or as a Chrome notification."}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-8",children:Id.map((e,t)=>i.jsxs("div",{className:"relative",children:[i.jsxs("div",{className:"border border-base-300 p-4 h-full",children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(e.icon,{className:"w-4 h-4 opacity-50"}),i.jsx(K,{variant:e.variant,size:"xs",children:e.label})]}),i.jsx("p",{className:"text-xs opacity-60 leading-relaxed",children:e.desc})]}),t<Id.length-1&&i.jsx(qe,{className:"hidden sm:block w-4 h-4 opacity-30 absolute top-1/2 -right-2 -translate-y-1/2 translate-x-1/2 z-10"})]},e.label))}),i.jsx(Nl,{flow:Tj}),i.jsxs("div",{className:"mt-6 border border-primary/20 bg-primary/[0.03] p-4 flex items-center gap-3",children:[i.jsx(Xm,{className:"w-4 h-4 text-primary shrink-0"}),i.jsx("p",{className:"text-sm opacity-70",children:"No credentials are ever stored to make this work. Approval just gates whether an already-authenticated step is allowed to run."})]})]})]})}v.lazy(()=>Bg(()=>import("./Slides-DMIm_HgI.js"),[]));function Gs({isActive:e}){return`flex items-center gap-2 px-3 py-2 text-sm transition-colors ${e?"bg-primary text-primary-content font-semibold":"hover:text-primary"}`}function zs({isActive:e}){return`flex items-center gap-2 pl-4 pr-3 py-1.5 text-sm transition-colors ${e?"bg-primary text-primary-content font-semibold":"hover:text-primary"}`}const Fs={"/config":[{label:"Server",id:"cfg-server"},{label:"Security",id:"cfg-security"},{label:"Sources",id:"cfg-sources"},{label:"Audit",id:"cfg-audit"},{label:"Output",id:"cfg-output"},{label:"Journal",id:"cfg-journal"}],"/architecture":[{label:"Diagram",id:"arch-diagram"},{label:"Components",id:"arch-components"},{label:"Data Stores",id:"arch-stores"},{label:"Data Flows",id:"arch-flows"},{label:"Security",id:"arch-security"},{label:"Packages",id:"arch-packages"},{label:"Build Order",id:"arch-build"}],"/api-reference":[{label:"Endpoints",id:"api-endpoints"},{label:"Pipeline Steps",id:"api-pipeline"},{label:"Expressions",id:"api-expressions"}],"/concepts":[{label:"Capability & World Model",id:"concepts-worlds"},{label:"Pipeline Lifecycle",id:"concepts-lifecycle"},{label:"Approval & Risk-Tiering",id:"concepts-approval"}],"/why":[{label:"The Problem",id:"why-problem"},{label:"The Solution",id:"why-solution"},{label:"Architecture",id:"why-architecture"},{label:"Built-in Apps",id:"why-apps"},{label:"Workflow",id:"why-happy-path"},{label:"Security",id:"why-security"},{label:"Get Started",id:"why-get-started"},{label:"Extend",id:"why-extend"}]};function Lj({sections:e}){const t=v.useMemo(()=>e.map(r=>r.id),[e]),n=Qy(t),s=r=>{const a=document.getElementById(r);a&&a.scrollIntoView({behavior:"smooth",block:"start"})};return i.jsx("div",{className:"ml-3 border-l border-base-300 py-0.5",children:e.map(r=>i.jsx("button",{onClick:()=>s(r.id),className:`block w-full text-left pl-3 py-1 text-[0.7rem] transition-colors ${n===r.id?"text-primary opacity-100":"opacity-50 hover:opacity-70"}`,children:r.label},r.id))})}function _n({to:e,label:t,icon:n,sections:s}){const a=An().pathname===e;return i.jsxs(i.Fragment,{children:[i.jsxs(gt,{to:e,end:e==="/",className:Gs,children:[n,t]}),a&&s.length>0&&i.jsx(Lj,{sections:s})]})}function Pj(){const[e,t]=v.useState(!1),[n,s]=v.useState(!1),[r,a]=v.useState(!1),[o,l]=v.useState([]),[c,u]=v.useState(!1),m=v.useRef(null),d=An();v.useEffect(()=>{a(!1)},[d.pathname]),v.useEffect(()=>{if(!d.hash)return;const b=d.hash.slice(1),x=document.getElementById(b);x&&x.scrollIntoView({behavior:"smooth",block:"start"})},[d.pathname,d.hash]),v.useEffect(()=>{const b=()=>{B.getStatus().then(j=>{t(j.ok),s(j.extensionConnected)}).catch(()=>{t(!1),s(!1)})};b();const x=setInterval(b,3e4);return()=>clearInterval(x)},[]),v.useEffect(()=>{B.getConnectors().then(b=>{const x=wa(b.connectors).map(([j])=>j);l(x)}).catch(()=>{})},[]);const p=v.useMemo(()=>o.map(b=>({label:b,id:`conn-${b}`})),[o]),y=v.useCallback(()=>{const b=m.current;b&&u(b.scrollHeight-b.scrollTop-b.clientHeight>1)},[]);return v.useEffect(()=>{y();const b=m.current;if(b)return b.addEventListener("scroll",y,{passive:!0}),window.addEventListener("resize",y),()=>{b.removeEventListener("scroll",y),window.removeEventListener("resize",y)}},[y,p,d.pathname,e]),i.jsxs("div",{className:"flex min-h-screen",children:[i.jsx("button",{className:"fixed top-3 left-3 z-50 md:hidden btn btn-sm btn-ghost",onClick:()=>a(!r),"aria-label":r?"Close menu":"Open menu",children:i.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:r?i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}):i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})}),r&&i.jsx("div",{className:"fixed inset-0 bg-black/30 z-30 md:hidden",onClick:()=>a(!1)}),i.jsxs("aside",{className:`w-56 bg-base-100 border-r border-base-300 flex flex-col fixed top-0 left-0 bottom-0 z-40 transition-transform duration-150 ease-out ${r?"translate-x-0":"-translate-x-full"} md:translate-x-0`,children:[i.jsxs("div",{className:"flex items-start justify-between px-3 py-3 border-b border-base-300",children:[i.jsxs(we,{to:"/",className:"hover:opacity-80 transition-opacity",children:[i.jsxs("h1",{className:"font-display text-lg font-bold tracking-tight",children:[i.jsx("span",{className:"font-normal opacity-50",children:"command"}),"Garden"]}),i.jsx("p",{className:"font-mono text-[0.65rem] opacity-30 mt-1 uppercase tracking-[0.14em]",children:"browser automation"})]}),i.jsx("button",{className:"btn btn-ghost btn-sm btn-square",onClick:()=>{const b=document.documentElement.getAttribute("data-theme")==="dark"?"light":"dark";document.documentElement.setAttribute("data-theme",b),localStorage.setItem("theme",b)},"aria-label":"Toggle theme",children:i.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})})})]}),i.jsxs("div",{className:"relative flex-1 min-h-0",children:[i.jsxs("nav",{ref:m,className:"h-full px-2 py-2 space-y-0.5 overflow-y-auto",children:[i.jsx("div",{className:"px-3 pt-3 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Overview"}),i.jsxs(gt,{to:"/",end:!0,className:Gs,children:[i.jsx(Sv,{className:"w-4 h-4 shrink-0"}),"Dashboard"]}),i.jsxs(gt,{to:"/guide",className:Gs,children:[i.jsx(Gm,{className:"w-4 h-4 shrink-0"}),"Setup Guide"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Apps"}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Administrative"}),i.jsxs(gt,{to:"/apps/timetracking",className:zs,children:[i.jsx(Rr,{className:"w-4 h-4 shrink-0"}),"Time Tracking"]}),i.jsxs(gt,{to:"/apps/rooms",className:zs,children:[i.jsx(Ym,{className:"w-4 h-4 shrink-0"}),"Room Availability"]}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Productivity"}),i.jsxs(gt,{to:"/apps/journal",className:zs,children:[i.jsx(_v,{className:"w-4 h-4 shrink-0"}),"Dev Journal"]}),i.jsxs(gt,{to:"/apps/trusted-peer-expiry",className:zs,children:[i.jsx(tp,{className:"w-4 h-4 shrink-0"}),"Trusted Peer Expiry"]}),i.jsx("div",{className:"pl-5 pr-3 pt-3 pb-1 font-mono text-[0.65rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Security"}),i.jsxs(gt,{to:"/apps/security-news",className:zs,children:[i.jsx(Zm,{className:"w-4 h-4 shrink-0"}),"Security News"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Platform"}),i.jsx(_n,{to:"/connectors",label:"Connectors",icon:i.jsx(zv,{className:"w-4 h-4 shrink-0"}),sections:p}),i.jsxs(gt,{to:"/audit",className:Gs,children:[i.jsx(ep,{className:"w-4 h-4 shrink-0"}),"Audit Log"]}),i.jsx(_n,{to:"/config",label:"Configuration",icon:i.jsx(Wv,{className:"w-4 h-4 shrink-0"}),sections:e?Fs["/config"]:[]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Reference"}),i.jsx(_n,{to:"/why",label:"Why commandGarden",icon:i.jsx(Av,{className:"w-4 h-4 shrink-0"}),sections:Fs["/why"]}),i.jsx(_n,{to:"/api-reference",label:"API & CLI",icon:i.jsx(Ci,{className:"w-4 h-4 shrink-0"}),sections:Fs["/api-reference"]}),i.jsxs(gt,{to:"/skills",className:Gs,children:[i.jsx(jl,{className:"w-4 h-4 shrink-0"}),"Skills"]}),i.jsx("div",{className:"px-3 pt-6 pb-1.5 font-mono text-[0.6rem] font-medium opacity-70 uppercase tracking-[0.12em]",children:"Deep Dive"}),i.jsx(_n,{to:"/concepts",label:"Concepts",icon:i.jsx(kv,{className:"w-4 h-4 shrink-0"}),sections:Fs["/concepts"]}),i.jsx(_n,{to:"/architecture",label:"Architecture",icon:i.jsx(Iv,{className:"w-4 h-4 shrink-0"}),sections:Fs["/architecture"]}),!1]}),c&&i.jsx("div",{className:"pointer-events-none absolute bottom-0 inset-x-0 h-8 bg-gradient-to-t from-base-100 to-transparent","aria-hidden":"true"})]}),i.jsxs("div",{className:"px-3 py-2.5 border-t border-base-300",children:[i.jsxs("div",{className:"flex items-center gap-2 text-xs font-mono",children:[i.jsx("span",{className:`w-1.5 h-1.5 ${e?"bg-success":"bg-error"}`,"aria-hidden":"true"}),i.jsx("span",{className:"opacity-50 text-[0.65rem]",children:e?"DAEMON OK":"DAEMON OFF"})]}),i.jsxs("div",{className:"flex items-center gap-2 text-xs font-mono mt-1",children:[i.jsx("span",{className:`w-1.5 h-1.5 ${n?"bg-success":"bg-error"}`,"aria-hidden":"true"}),i.jsx("span",{className:"opacity-50 text-[0.65rem]",children:n?"EXTENSION LINKED":"EXTENSION OFF"})]})]})]}),i.jsx("main",{className:"flex-1 p-4 pt-14 md:pt-5 md:p-5 md:ml-56",children:i.jsx(Oy,{})})]})}function Ij(){return i.jsx(Hy,{children:i.jsx($y,{children:i.jsxs(xe,{element:i.jsx(Pj,{}),children:[i.jsx(xe,{index:!0,element:i.jsx(Zy,{})}),i.jsx(xe,{path:"connectors",element:i.jsx(nx,{})}),i.jsx(xe,{path:"connectors/:site/:name",element:i.jsx(sx,{})}),i.jsx(xe,{path:"audit",element:i.jsx(ax,{})}),i.jsx(xe,{path:"config",element:i.jsx(j1,{})}),i.jsx(xe,{path:"guide",element:i.jsx(A1,{})}),i.jsx(xe,{path:"apps/timetracking",element:i.jsx(ub,{})}),i.jsx(xe,{path:"apps/rooms",element:i.jsx(Nb,{})}),i.jsx(xe,{path:"apps/journal",element:i.jsx(Wb,{})}),i.jsx(xe,{path:"apps/security-news",element:i.jsx(Xb,{})}),i.jsx(xe,{path:"apps/trusted-peer-expiry",element:i.jsx(sj,{})}),i.jsx(xe,{path:"architecture",element:i.jsx(uj,{})}),i.jsx(xe,{path:"api-reference",element:i.jsx(gj,{})}),i.jsx(xe,{path:"skills",element:i.jsx(bj,{})}),i.jsx(xe,{path:"why",element:i.jsx(Nj,{})}),i.jsx(xe,{path:"concepts",element:i.jsx(Aj,{})}),!1]})})})}Kh(document.getElementById("root")).render(i.jsx(v.StrictMode,{children:i.jsx(Ij,{})}));export{Gm as B,X1 as C,gd as D,Qm as E,ho as F,oi as G,Xm as L,Dv as P,bl as S,Ci as T,ev as a,qm as b,H as c,_c as d,qv as e,hv as f,K as g,i as j,v as r,py as u};
@@ -1,19 +1,19 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-theme="dark">
3
- <head>
4
- <script>
5
- (function(){var t=localStorage.getItem('theme');if(t){document.documentElement.setAttribute('data-theme',t)}else if(matchMedia('(prefers-color-scheme:dark)').matches){document.documentElement.setAttribute('data-theme','dark')}})();
6
- </script>
7
- <meta charset="UTF-8" />
8
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
- <link rel="preconnect" href="https://fonts.googleapis.com" />
10
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
- <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
12
- <title>commandGarden</title>
13
- <script type="module" crossorigin src="/assets/index-C8yqRQk-.js"></script>
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <script>
5
+ (function(){var t=localStorage.getItem('theme');if(t){document.documentElement.setAttribute('data-theme',t)}else if(matchMedia('(prefers-color-scheme:dark)').matches){document.documentElement.setAttribute('data-theme','dark')}})();
6
+ </script>
7
+ <meta charset="UTF-8" />
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
12
+ <title>commandGarden</title>
13
+ <script type="module" crossorigin src="/assets/index-CupEN1w-.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="/assets/index-rHqHbsBw.css">
15
- </head>
16
- <body>
17
- <div id="root"></div>
18
- </body>
19
- </html>
15
+ </head>
16
+ <body>
17
+ <div id="root"></div>
18
+ </body>
19
+ </html>
@@ -0,0 +1,47 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { DaemonClient } from './daemon-client.js';
3
+ describe('DaemonClient', () => {
4
+ let client;
5
+ const mockFetch = vi.fn();
6
+ beforeEach(() => {
7
+ vi.stubGlobal('fetch', mockFetch);
8
+ client = new DaemonClient('http://127.0.0.1:19825', 'test-token');
9
+ mockFetch.mockReset();
10
+ });
11
+ it('sends auth headers on GET', async () => {
12
+ mockFetch.mockResolvedValueOnce({
13
+ ok: true,
14
+ json: () => Promise.resolve({ ok: true, data: 'test' }),
15
+ });
16
+ await client.get('/api/status');
17
+ expect(mockFetch).toHaveBeenCalledWith('http://127.0.0.1:19825/api/status', expect.objectContaining({
18
+ method: 'GET',
19
+ headers: expect.objectContaining({
20
+ Authorization: 'Bearer test-token',
21
+ 'X-CommandGarden': '1',
22
+ }),
23
+ }));
24
+ });
25
+ it('sends body on POST', async () => {
26
+ mockFetch.mockResolvedValueOnce({
27
+ ok: true,
28
+ json: () => Promise.resolve({ ok: true }),
29
+ });
30
+ await client.post('/api/run', { connector: 'test/cmd', args: {} });
31
+ const call = mockFetch.mock.calls[0];
32
+ expect(call[1].method).toBe('POST');
33
+ expect(JSON.parse(call[1].body)).toEqual({ connector: 'test/cmd', args: {} });
34
+ });
35
+ it('throws on non-ok response', async () => {
36
+ mockFetch.mockResolvedValueOnce({
37
+ ok: false,
38
+ status: 401,
39
+ json: () => Promise.resolve({ error: 'Unauthorized' }),
40
+ });
41
+ await expect(client.get('/api/status')).rejects.toThrow('Unauthorized');
42
+ });
43
+ it('throws on network error', async () => {
44
+ mockFetch.mockRejectedValueOnce(new Error('fetch failed'));
45
+ await expect(client.get('/api/status')).rejects.toThrow('Cannot connect to daemon');
46
+ });
47
+ });