This commit is contained in:
aimurphy 2025-12-16 14:05:59 +00:00
parent b2e32dac7b
commit ab5a153fe8
94 changed files with 2026 additions and 878 deletions

View file

@ -4,8 +4,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2"> <meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">OpenRAG</title><meta data-rh="true" property="og:title" content="OpenRAG"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="robots" content="noindex, nofollow"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.openr.ag/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.openr.ag/404.html"><link data-rh="true" rel="alternate" href="https://docs.openr.ag/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.openr.ag/404.html" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.66669ecc.css"> <title data-rh="true">OpenRAG</title><meta data-rh="true" property="og:title" content="OpenRAG"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="robots" content="noindex, nofollow"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.openr.ag/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.openr.ag/404.html"><link data-rh="true" rel="alternate" href="https://docs.openr.ag/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.openr.ag/404.html" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.66669ecc.css">
<script src="/assets/js/runtime~main.a3cb74e9.js" defer="defer"></script> <script src="/assets/js/runtime~main.5f015f17.js" defer="defer"></script>
<script src="/assets/js/main.86159c47.js" defer="defer"></script> <script src="/assets/js/main.b10c6137.js" defer="defer"></script>
</head> </head>
<body class="navigation-with-keyboard"> <body class="navigation-with-keyboard">
<svg style="display: none;"><defs> <svg style="display: none;"><defs>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[961],{5689:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/OpenRAG_TUI_2025-09-10T13_04_11_757637-9441c53ba39162a88ac6c11cbeaed0e0.svg"},6239:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"get-started/tui","title":"Use the TUI","description":"The OpenRAG Terminal User Interface (TUI) provides a simplified and guided experience for configuring, managing, and monitoring your OpenRAG deployment directly from the terminal.","source":"@site/docs/get-started/tui.mdx","sourceDirName":"get-started","slug":"/tui","permalink":"/tui","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/tui.mdx","tags":[],"version":"current","frontMatter":{"title":"Use the TUI","slug":"/tui"},"sidebar":"tutorialSidebar","previous":{"title":"Remove OpenRAG","permalink":"/uninstall"},"next":{"title":"Manage services","permalink":"/manage-services"}}');var i=t(4848),r=t(8453);const a={title:"Use the TUI",slug:"/tui"},c=void 0,o={},d=[{value:"Access the TUI",id:"access-the-tui",level:2},{value:"Manage services with the TUI",id:"manage-services-with-the-tui",level:2},{value:"Exit the OpenRAG TUI",id:"exit-the-openrag-tui",level:2}];function l(e){const n={a:"a",code:"code",h2:"h2",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"The OpenRAG Terminal User Interface (TUI) provides a simplified and guided experience for configuring, managing, and monitoring your OpenRAG deployment directly from the terminal."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:t(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,i.jsxs)(n.p,{children:["If you install OpenRAG with the ",(0,i.jsx)(n.a,{href:"/install",children:"automatic installer script"}),", ",(0,i.jsx)(n.a,{href:"/install-uv",children:(0,i.jsx)(n.code,{children:"uv"})}),", or ",(0,i.jsx)(n.a,{href:"/install-uvx",children:(0,i.jsx)(n.code,{children:"uvx"})}),", you use the TUI to manage your OpenRAG deployment.\nThe TUI guides you through the initial setup, automatically manages your OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," and ",(0,i.jsx)(n.code,{children:"docker-compose"})," files, and provides convenient access to ",(0,i.jsx)(n.a,{href:"/manage-services",children:"service management"})," controls."]}),"\n",(0,i.jsxs)(n.p,{children:["In contrast, when you ",(0,i.jsx)(n.a,{href:"/docker",children:"deploy OpenRAG with self-managed services"}),", you must manually configure OpenRAG by preparing a ",(0,i.jsx)(n.code,{children:".env"})," file and using Docker or Podman commands to deploy and manage your OpenRAG services."]}),"\n",(0,i.jsx)(n.h2,{id:"access-the-tui",children:"Access the TUI"}),"\n",(0,i.jsxs)(n.p,{children:["If you installed OpenRAG with ",(0,i.jsx)(n.code,{children:"uv"}),", access the TUI with ",(0,i.jsx)(n.code,{children:"uv run openrag"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you installed OpenRAG with the automatic installer script or ",(0,i.jsx)(n.code,{children:"uvx"}),", access the TUI with ",(0,i.jsx)(n.code,{children:"uvx openrag"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"manage-services-with-the-tui",children:"Manage services with the TUI"}),"\n",(0,i.jsxs)(n.p,{children:["Use the TUI's ",(0,i.jsx)(n.strong,{children:"Status"})," menu (",(0,i.jsx)("kbd",{children:"3"}),") and ",(0,i.jsx)(n.strong,{children:"Diagnostics"})," menu (",(0,i.jsx)("kbd",{children:"4"}),") to access controls and information for your OpenRAG services.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/manage-services",children:"Manage OpenRAG services"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"exit-the-openrag-tui",children:"Exit the OpenRAG TUI"}),"\n",(0,i.jsxs)(n.p,{children:["To exit the OpenRAG TUI, go to the TUI main menu, and then press ",(0,i.jsx)("kbd",{children:"q"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Your OpenRAG containers continue to run until they are stopped."}),"\n",(0,i.jsxs)(n.p,{children:["To restart the TUI, see ",(0,i.jsx)(n.a,{href:"#access-the-tui",children:"Access the TUI"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>c});var s=t(6540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[1567],{5226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","href":"/","label":"About OpenRAG","docId":"get-started/what-is-openrag","unlisted":false},{"type":"link","href":"/quickstart","label":"Quickstart","docId":"get-started/quickstart","unlisted":false},{"type":"link","href":"/install","label":"Install OpenRAG with TUI","docId":"get-started/install","unlisted":false},{"type":"link","href":"/docker","label":"Install OpenRAG containers","docId":"get-started/docker","unlisted":false},{"type":"link","href":"/agents","label":"Flows","docId":"core-components/agents","unlisted":false},{"type":"category","label":"Knowledge","items":[{"type":"link","href":"/knowledge","label":"Configure knowledge","docId":"core-components/knowledge","unlisted":false},{"type":"link","href":"/ingestion","label":"Ingest knowledge","docId":"core-components/ingestion","unlisted":false},{"type":"link","href":"/knowledge-filters","label":"Filter knowledge","docId":"core-components/knowledge-filters","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","href":"/chat","label":"Chat","docId":"core-components/chat","unlisted":false},{"type":"link","href":"/reference/configuration","label":"Environment variables","docId":"reference/configuration","unlisted":false},{"type":"link","href":"/support/troubleshoot","label":"Troubleshoot OpenRAG","docId":"support/troubleshoot","unlisted":false}]},"docs":{"core-components/agents":{"id":"core-components/agents","title":"Use Langflow in OpenRAG","description":"OpenRAG includes a built-in Langflow instance for creating and managing functional application workflows called flows.","sidebar":"tutorialSidebar"},"core-components/chat":{"id":"core-components/chat","title":"Chat in OpenRAG","description":"After you upload documents to your knowledge base, you can use the OpenRAG Chat feature to interact with your knowledge through natural language queries.","sidebar":"tutorialSidebar"},"core-components/ingestion":{"id":"core-components/ingestion","title":"Ingest knowledge","description":"Upload documents to your OpenRAG OpenSearch instance to populate your knowledge base with unique content, such as your own company documents, research papers, or websites.","sidebar":"tutorialSidebar"},"core-components/knowledge":{"id":"core-components/knowledge","title":"Configure knowledge","description":"OpenRAG includes a built-in OpenSearch instance that serves as the underlying datastore for your knowledge (documents).","sidebar":"tutorialSidebar"},"core-components/knowledge-filters":{"id":"core-components/knowledge-filters","title":"Filter knowledge","description":"OpenRAG\'s knowledge filters help you organize and manage your knowledge base by creating pre-defined views of your documents.","sidebar":"tutorialSidebar"},"get-started/docker":{"id":"get-started/docker","title":"Install OpenRAG containers","description":"OpenRAG has two Docker Compose files. Both files deploy the same applications and containers locally, but they are for different environments:","sidebar":"tutorialSidebar"},"get-started/install":{"id":"get-started/install","title":"Install OpenRAG with TUI","description":"Install OpenRAG and then run the OpenRAG Terminal User Interface(TUI) to start your OpenRAG deployment with a guided setup process.","sidebar":"tutorialSidebar"},"get-started/quickstart":{"id":"get-started/quickstart","title":"Quickstart","description":"Use this quickstart to install OpenRAG, and then try some of OpenRAG\'s core features.","sidebar":"tutorialSidebar"},"get-started/what-is-openrag":{"id":"get-started/what-is-openrag","title":"What is OpenRAG?","description":"OpenRAG is an open-source package for building agentic RAG systems that integrates with a wide range of orchestration tools, vector databases, and LLM providers.","sidebar":"tutorialSidebar"},"reference/configuration":{"id":"reference/configuration","title":"Environment variables","description":"OpenRAG recognizes environment variables from the following sources:","sidebar":"tutorialSidebar"},"support/troubleshoot":{"id":"support/troubleshoot","title":"Troubleshoot OpenRAG","description":"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG.","sidebar":"tutorialSidebar"}}}}')}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[6567],{5871:(t,e,a)=>{function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(797).K2)(r,"populateCommonDb")},6567:(t,e,a)=>{a.d(e,{diagram:()=>m});var r=a(3590),i=a(5871),o=a(3226),n=a(7633),s=a(797),l=a(8731),c=n.UI.packet,d=class{constructor(){this.packet=[],this.setAccTitle=n.SV,this.getAccTitle=n.iN,this.setDiagramTitle=n.ke,this.getDiagramTitle=n.ab,this.getAccDescription=n.m7,this.setAccDescription=n.EI}static{(0,s.K2)(this,"PacketDB")}getConfig(){const t=(0,o.$t)({...c,...(0,n.zj)().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){(0,n.IU)(),this.packet=[]}},p=(0,s.K2)((t,e)=>{(0,i.S)(t,e);let a=-1,r=[],o=1;const{bitsPerRow:n}=e.getConfig();for(let{start:i,end:l,bits:c,label:d}of t.blocks){if(void 0!==i&&void 0!==l&&l<i)throw new Error(`Packet block ${i} - ${l} is invalid. End must be greater than start.`);if(i??=a+1,i!==a+1)throw new Error(`Packet block ${i} - ${l??i} is not contiguous. It should start from ${a+1}.`);if(0===c)throw new Error(`Packet block ${i} is invalid. Cannot have a zero bit field.`);for(l??=i+(c??1)-1,c??=l-i+1,a=l,s.Rm.debug(`Packet block ${i} - ${a} with label ${d}`);r.length<=n+1&&e.getPacket().length<1e4;){const[t,a]=b({start:i,end:l,bits:c,label:d},o,n);if(r.push(t),t.end+1===o*n&&(e.pushWord(r),r=[],o++),!a)break;({start:i,end:l,bits:c,label:d}=a)}}e.pushWord(r)},"populate"),b=(0,s.K2)((t,e,a)=>{if(void 0===t.start)throw new Error("start should have been set during first phase");if(void 0===t.end)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*a)return[t,void 0];const r=e*a-1,i=e*a;return[{start:t.start,end:r,label:t.label,bits:r-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),h={parser:{yy:void 0},parse:(0,s.K2)(async t=>{const e=await(0,l.qg)("packet",t),a=h.parser?.yy;if(!(a instanceof d))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");s.Rm.debug(e),p(e,a)},"parse")},k=(0,s.K2)((t,e,a,i)=>{const o=i.db,s=o.getConfig(),{rowHeight:l,paddingY:c,bitWidth:d,bitsPerRow:p}=s,b=o.getPacket(),h=o.getDiagramTitle(),k=l+c,u=k*(b.length+1)-(h?0:l),f=d*p+2,w=(0,r.D)(e);w.attr("viewbox",`0 0 ${f} ${u}`),(0,n.a$)(w,u,f,s.useMaxWidth);for(const[r,n]of b.entries())g(w,n,r,s);w.append("text").text(h).attr("x",f/2).attr("y",u-k/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),g=(0,s.K2)((t,e,a,{rowHeight:r,paddingX:i,paddingY:o,bitWidth:n,bitsPerRow:s,showBits:l})=>{const c=t.append("g"),d=a*(r+o)+o;for(const p of e){const t=p.start%s*n+1,e=(p.end-p.start+1)*n-i;if(c.append("rect").attr("x",t).attr("y",d).attr("width",e).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",t+e/2).attr("y",d+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(p.label),!l)continue;const a=p.end===p.start,o=d-2;c.append("text").attr("x",t+(a?e/2:0)).attr("y",o).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",a?"middle":"start").text(p.start),a||c.append("text").attr("x",t+e).attr("y",o).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(p.end)}},"drawWord"),u={draw:k},f={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},w=(0,s.K2)(({packet:t}={})=>{const e=(0,o.$t)(f,t);return`\n\t.packetByte {\n\t\tfont-size: ${e.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${e.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${e.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${e.labelColor};\n\t\tfont-size: ${e.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${e.titleColor};\n\t\tfont-size: ${e.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${e.blockStrokeColor};\n\t\tstroke-width: ${e.blockStrokeWidth};\n\t\tfill: ${e.blockFillColor};\n\t}\n\t`},"styles"),m={parser:h,get db(){return new d},renderer:u,styles:w}}}]);

View file

@ -1 +0,0 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[6567],{6567:(t,e,a)=>{a.d(e,{diagram:()=>$});var r=a(3590),o=a(5871),i=a(3226),n=a(7633),s=a(797),l=a(8731),c=n.UI.packet,d=class{constructor(){this.packet=[],this.setAccTitle=n.SV,this.getAccTitle=n.iN,this.setDiagramTitle=n.ke,this.getDiagramTitle=n.ab,this.getAccDescription=n.m7,this.setAccDescription=n.EI}static{(0,s.K2)(this,"PacketDB")}getConfig(){const t=(0,i.$t)({...c,...(0,n.zj)().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){(0,n.IU)(),this.packet=[]}},b=(0,s.K2)((t,e)=>{(0,o.S)(t,e);let a=-1,r=[],i=1;const{bitsPerRow:n}=e.getConfig();for(let{start:o,end:l,bits:c,label:d}of t.blocks){if(void 0!==o&&void 0!==l&&l<o)throw new Error(`Packet block ${o} - ${l} is invalid. End must be greater than start.`);if(o??=a+1,o!==a+1)throw new Error(`Packet block ${o} - ${l??o} is not contiguous. It should start from ${a+1}.`);if(0===c)throw new Error(`Packet block ${o} is invalid. Cannot have a zero bit field.`);for(l??=o+(c??1)-1,c??=l-o+1,a=l,s.Rm.debug(`Packet block ${o} - ${a} with label ${d}`);r.length<=n+1&&e.getPacket().length<1e4;){const[t,a]=h({start:o,end:l,bits:c,label:d},i,n);if(r.push(t),t.end+1===i*n&&(e.pushWord(r),r=[],i++),!a)break;({start:o,end:l,bits:c,label:d}=a)}}e.pushWord(r)},"populate"),h=(0,s.K2)((t,e,a)=>{if(void 0===t.start)throw new Error("start should have been set during first phase");if(void 0===t.end)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*a)return[t,void 0];const r=e*a-1,o=e*a;return[{start:t.start,end:r,label:t.label,bits:r-t.start},{start:o,end:t.end,label:t.label,bits:t.end-o}]},"getNextFittingBlock"),p={parser:{yy:void 0},parse:(0,s.K2)(async t=>{const e=await(0,l.qg)("packet",t),a=p.parser?.yy;if(!(a instanceof d))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");s.Rm.debug(e),b(e,a)},"parse")},k=(0,s.K2)((t,e,a,o)=>{const i=o.db,s=i.getConfig(),{rowHeight:l,paddingY:c,bitWidth:d,bitsPerRow:b}=s,h=i.getPacket(),p=i.getDiagramTitle(),k=l+c,f=k*(h.length+1)-(p?0:l),u=d*b+2,w=(0,r.D)(e);w.attr("viewbox",`0 0 ${u} ${f}`),(0,n.a$)(w,f,u,s.useMaxWidth);for(const[r,n]of h.entries())g(w,n,r,s);w.append("text").text(p).attr("x",u/2).attr("y",f-k/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),g=(0,s.K2)((t,e,a,{rowHeight:r,paddingX:o,paddingY:i,bitWidth:n,bitsPerRow:s,showBits:l})=>{const c=t.append("g"),d=a*(r+i)+i;for(const b of e){const t=b.start%s*n+1,e=(b.end-b.start+1)*n-o;if(c.append("rect").attr("x",t).attr("y",d).attr("width",e).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",t+e/2).attr("y",d+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(b.label),!l)continue;const a=b.end===b.start,i=d-2;c.append("text").attr("x",t+(a?e/2:0)).attr("y",i).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",a?"middle":"start").text(b.start),a||c.append("text").attr("x",t+e).attr("y",i).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(b.end)}},"drawWord"),f={draw:k},u={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},w=(0,s.K2)(({packet:t}={})=>{const e=(0,i.$t)(u,t);return`\n\t.packetByte {\n\t\tfont-size: ${e.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${e.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${e.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${e.labelColor};\n\t\tfont-size: ${e.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${e.titleColor};\n\t\tfont-size: ${e.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${e.blockStrokeColor};\n\t\tstroke-width: ${e.blockStrokeWidth};\n\t\tfill: ${e.blockFillColor};\n\t}\n\t`},"styles"),$={parser:p,get db(){return new d},renderer:f,styles:w}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[9412],{5871:(e,t,a)=>{function i(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>i}),(0,a(797).K2)(i,"populateCommonDb")},9412:(e,t,a)=>{a.d(t,{diagram:()=>C});var i=a(3590),l=a(5871),n=a(3226),r=a(7633),s=a(797),o=a(8731),c=a(451),p=r.UI.pie,d={sections:new Map,showData:!1,config:p},u=d.sections,g=d.showData,h=structuredClone(p),f=(0,s.K2)(()=>structuredClone(h),"getConfig"),m=(0,s.K2)(()=>{u=new Map,g=d.showData,(0,r.IU)()},"clear"),w=(0,s.K2)(({label:e,value:t})=>{if(t<0)throw new Error(`"${e}" has invalid value: ${t}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);u.has(e)||(u.set(e,t),s.Rm.debug(`added new section: ${e}, with value: ${t}`))},"addSection"),S=(0,s.K2)(()=>u,"getSections"),x=(0,s.K2)(e=>{g=e},"setShowData"),D=(0,s.K2)(()=>g,"getShowData"),T={getConfig:f,clear:m,setDiagramTitle:r.ke,getDiagramTitle:r.ab,setAccTitle:r.SV,getAccTitle:r.iN,setAccDescription:r.EI,getAccDescription:r.m7,addSection:w,getSections:S,setShowData:x,getShowData:D},$=(0,s.K2)((e,t)=>{(0,l.S)(e,t),t.setShowData(e.showData),e.sections.map(t.addSection)},"populateDb"),b={parse:(0,s.K2)(async e=>{const t=await(0,o.qg)("pie",e);s.Rm.debug(t),$(t,T)},"parse")},v=(0,s.K2)(e=>`\n .pieCircle{\n stroke: ${e.pieStrokeColor};\n stroke-width : ${e.pieStrokeWidth};\n opacity : ${e.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${e.pieOuterStrokeColor};\n stroke-width: ${e.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${e.pieTitleTextSize};\n fill: ${e.pieTitleTextColor};\n font-family: ${e.fontFamily};\n }\n .slice {\n font-family: ${e.fontFamily};\n fill: ${e.pieSectionTextColor};\n font-size:${e.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${e.pieLegendTextColor};\n font-family: ${e.fontFamily};\n font-size: ${e.pieLegendTextSize};\n }\n`,"getStyles"),y=(0,s.K2)(e=>{const t=[...e.values()].reduce((e,t)=>e+t,0),a=[...e.entries()].map(([e,t])=>({label:e,value:t})).filter(e=>e.value/t*100>=1).sort((e,t)=>t.value-e.value);return(0,c.rLf)().value(e=>e.value)(a)},"createPieArcs"),C={parser:b,db:T,renderer:{draw:(0,s.K2)((e,t,a,l)=>{s.Rm.debug("rendering pie chart\n"+e);const o=l.db,p=(0,r.D7)(),d=(0,n.$t)(o.getConfig(),p.pie),u=18,g=450,h=g,f=(0,i.D)(t),m=f.append("g");m.attr("transform","translate(225,225)");const{themeVariables:w}=p;let[S]=(0,n.I5)(w.pieOuterStrokeWidth);S??=2;const x=d.textPosition,D=Math.min(h,g)/2-40,T=(0,c.JLW)().innerRadius(0).outerRadius(D),$=(0,c.JLW)().innerRadius(D*x).outerRadius(D*x);m.append("circle").attr("cx",0).attr("cy",0).attr("r",D+S/2).attr("class","pieOuterCircle");const b=o.getSections(),v=y(b),C=[w.pie1,w.pie2,w.pie3,w.pie4,w.pie5,w.pie6,w.pie7,w.pie8,w.pie9,w.pie10,w.pie11,w.pie12];let k=0;b.forEach(e=>{k+=e});const A=v.filter(e=>"0"!==(e.data.value/k*100).toFixed(0)),K=(0,c.UMr)(C);m.selectAll("mySlices").data(A).enter().append("path").attr("d",T).attr("fill",e=>K(e.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(A).enter().append("text").text(e=>(e.data.value/k*100).toFixed(0)+"%").attr("transform",e=>"translate("+$.centroid(e)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(o.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const R=[...b.entries()].map(([e,t])=>({label:e,value:t})),z=m.selectAll(".legend").data(R).enter().append("g").attr("class","legend").attr("transform",(e,t)=>"translate(216,"+(22*t-22*R.length/2)+")");z.append("rect").attr("width",u).attr("height",u).style("fill",e=>K(e.label)).style("stroke",e=>K(e.label)),z.append("text").attr("x",22).attr("y",14).text(e=>o.getShowData()?`${e.label} [${e.value}]`:e.label);const M=512+Math.max(...z.selectAll("text").nodes().map(e=>e?.getBoundingClientRect().width??0));f.attr("viewBox",`0 0 ${M} 450`),(0,r.a$)(f,g,M,d.useMaxWidth)},"draw")},styles:v}}}]);

View file

@ -1 +0,0 @@
"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[9412],{9412:(e,t,a)=>{a.d(t,{diagram:()=>C});var i=a(3590),l=a(5871),n=a(3226),r=a(7633),s=a(797),o=a(8731),c=a(451),p=r.UI.pie,d={sections:new Map,showData:!1,config:p},u=d.sections,g=d.showData,h=structuredClone(p),f=(0,s.K2)(()=>structuredClone(h),"getConfig"),m=(0,s.K2)(()=>{u=new Map,g=d.showData,(0,r.IU)()},"clear"),w=(0,s.K2)(({label:e,value:t})=>{if(t<0)throw new Error(`"${e}" has invalid value: ${t}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);u.has(e)||(u.set(e,t),s.Rm.debug(`added new section: ${e}, with value: ${t}`))},"addSection"),x=(0,s.K2)(()=>u,"getSections"),S=(0,s.K2)(e=>{g=e},"setShowData"),$=(0,s.K2)(()=>g,"getShowData"),b={getConfig:f,clear:m,setDiagramTitle:r.ke,getDiagramTitle:r.ab,setAccTitle:r.SV,getAccTitle:r.iN,setAccDescription:r.EI,getAccDescription:r.m7,addSection:w,getSections:x,setShowData:S,getShowData:$},v=(0,s.K2)((e,t)=>{(0,l.S)(e,t),t.setShowData(e.showData),e.sections.map(t.addSection)},"populateDb"),y={parse:(0,s.K2)(async e=>{const t=await(0,o.qg)("pie",e);s.Rm.debug(t),v(t,b)},"parse")},T=(0,s.K2)(e=>`\n .pieCircle{\n stroke: ${e.pieStrokeColor};\n stroke-width : ${e.pieStrokeWidth};\n opacity : ${e.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${e.pieOuterStrokeColor};\n stroke-width: ${e.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${e.pieTitleTextSize};\n fill: ${e.pieTitleTextColor};\n font-family: ${e.fontFamily};\n }\n .slice {\n font-family: ${e.fontFamily};\n fill: ${e.pieSectionTextColor};\n font-size:${e.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${e.pieLegendTextColor};\n font-family: ${e.fontFamily};\n font-size: ${e.pieLegendTextSize};\n }\n`,"getStyles"),D=(0,s.K2)(e=>{const t=[...e.values()].reduce((e,t)=>e+t,0),a=[...e.entries()].map(([e,t])=>({label:e,value:t})).filter(e=>e.value/t*100>=1).sort((e,t)=>t.value-e.value);return(0,c.rLf)().value(e=>e.value)(a)},"createPieArcs"),C={parser:y,db:b,renderer:{draw:(0,s.K2)((e,t,a,l)=>{s.Rm.debug("rendering pie chart\n"+e);const o=l.db,p=(0,r.D7)(),d=(0,n.$t)(o.getConfig(),p.pie),u=18,g=450,h=g,f=(0,i.D)(t),m=f.append("g");m.attr("transform","translate(225,225)");const{themeVariables:w}=p;let[x]=(0,n.I5)(w.pieOuterStrokeWidth);x??=2;const S=d.textPosition,$=Math.min(h,g)/2-40,b=(0,c.JLW)().innerRadius(0).outerRadius($),v=(0,c.JLW)().innerRadius($*S).outerRadius($*S);m.append("circle").attr("cx",0).attr("cy",0).attr("r",$+x/2).attr("class","pieOuterCircle");const y=o.getSections(),T=D(y),C=[w.pie1,w.pie2,w.pie3,w.pie4,w.pie5,w.pie6,w.pie7,w.pie8,w.pie9,w.pie10,w.pie11,w.pie12];let k=0;y.forEach(e=>{k+=e});const K=T.filter(e=>"0"!==(e.data.value/k*100).toFixed(0)),A=(0,c.UMr)(C);m.selectAll("mySlices").data(K).enter().append("path").attr("d",b).attr("fill",e=>A(e.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(K).enter().append("text").text(e=>(e.data.value/k*100).toFixed(0)+"%").attr("transform",e=>"translate("+v.centroid(e)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(o.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const R=[...y.entries()].map(([e,t])=>({label:e,value:t})),z=m.selectAll(".legend").data(R).enter().append("g").attr("class","legend").attr("transform",(e,t)=>"translate(216,"+(22*t-22*R.length/2)+")");z.append("rect").attr("width",u).attr("height",u).style("fill",e=>A(e.label)).style("stroke",e=>A(e.label)),z.append("text").attr("x",22).attr("y",14).text(e=>o.getShowData()?`${e.label} [${e.value}]`:e.label);const M=512+Math.max(...z.selectAll("text").nodes().map(e=>e?.getBoundingClientRect().width??0));f.attr("viewBox",`0 0 ${M} 450`),(0,r.a$)(f,g,M,d.useMaxWidth)},"draw")},styles:T}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(()=>{"use strict";var e,a,r,t,o,c={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return c[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=c,f.c=d,e=[],f.O=(a,r,t,o)=>{if(!r){var c=1/0;for(i=0;i<e.length;i++){for(var[r,t,o]=e[i],d=!0,n=0;n<r.length;n++)(!1&o||c>=o)&&Object.keys(f.O).every(e=>f.O[e](r[n]))?r.splice(n--,1):(d=!1,o<c&&(c=o));if(d){e.splice(i--,1);var b=t();void 0!==b&&(a=b)}}return a}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[r,t,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,r({}),r([]),r(r)];for(var d=2&t&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var r in a)f.o(a,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,r)=>(f.f[r](e,a),a),[])),f.u=e=>"assets/js/"+({98:"af920ffe",571:"0ba6a408",1567:"22dd74f7",2076:"common",2272:"749371cc",2668:"eb5b356a",3207:"27b4a875",5490:"71478a5d",5742:"aba21aa0",5750:"d0314b07",6919:"ca2c3c0c",7098:"a7bd4aaa",8401:"17896441",9026:"c8078f0a",9048:"a94703ab",9172:"e633a5ea",9532:"33362219",9647:"5e95c892"}[e]||e)+"."+{98:"f3ba20bd",165:"7b1d067d",291:"1b64972f",571:"eddb3e7e",617:"e8fa27b8",1e3:"f9af7a41",1203:"b618bb61",1567:"bcf46a1b",1741:"b927934f",1746:"c8a2211b",2076:"6bf331d5",2130:"09232a19",2237:"70c48bab",2272:"7bf165c7",2279:"12a16213",2291:"2c483c10",2325:"7c4239a7",2334:"daa16321",2492:"e6c78669",2668:"285e3b8b",2821:"e806cb03",3207:"8de9f81c",3490:"026802f4",3815:"f87fc96a",4250:"77e8e6c6",4616:"b519f330",4802:"a8b2857c",4981:"61cf4b0a",5480:"cd9ee90b",5490:"57b0036a",5742:"2f625fe1",5750:"26db9c14",5901:"f6ccb00b",5955:"14464ff3",5996:"16c59d9f",6241:"11caa48e",6319:"4754ec94",6366:"0c77f825",6567:"b1623b8d",6919:"7114a4c2",6992:"3c4d161b",7098:"9fea9356",7465:"7e0b8008",7592:"d6165eff",7873:"547873d3",7928:"5f633e47",8142:"5edfc34d",8249:"a2dd33e2",8401:"0d444abe",8565:"b7153d5a",8756:"704db1d5",9026:"7626c69e",9032:"67a3e002",9048:"fa9eaf65",9172:"f5bfbf12",9412:"d4dba7ab",9510:"81e2df6a",9532:"2a31613f",9647:"d28d5273"}[e]+".js",f.miniCssF=e=>{},f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},o="openrag-docs:",f.l=(e,a,r,c)=>{if(t[e])t[e].push(a);else{var d,n;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i<b.length;i++){var l=b[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+r){d=l;break}}d||(n=!0,(d=document.createElement("script")).charset="utf-8",f.nc&&d.setAttribute("nonce",f.nc),d.setAttribute("data-webpack",o+r),d.src=e),t[e]=[a];var u=(a,r)=>{d.onerror=d.onload=null,clearTimeout(s);var o=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"8401",33362219:"9532",af920ffe:"98","0ba6a408":"571","22dd74f7":"1567",common:"2076","749371cc":"2272",eb5b356a:"2668","27b4a875":"3207","71478a5d":"5490",aba21aa0:"5742",d0314b07:"5750",ca2c3c0c:"6919",a7bd4aaa:"7098",c8078f0a:"9026",a94703ab:"9048",e633a5ea:"9172","5e95c892":"9647"}[e]||e,f.p+f.u(e)},(()=>{var e={5354:0,1869:0};f.f.j=(a,r)=>{var t=f.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var o=new Promise((r,o)=>t=e[a]=[r,o]);r.push(t[2]=o);var c=f.p+f.u(a),d=new Error;f.l(c,r=>{if(f.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var o=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;d.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",d.name="ChunkLoadError",d.type=o,d.request=c,t[1](d)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,r)=>{var t,o,[c,d,n]=r,b=0;if(c.some(a=>0!==e[a])){for(t in d)f.o(d,t)&&(f.m[t]=d[t]);if(n)var i=n(f)}for(a&&a(r);b<c.length;b++)o=c[b],f.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return f.O(i)},r=globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[];r.forEach(a.bind(null,0)),r.push=a.bind(null,r.push.bind(r))})()})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

390
install-uv/index.html Normal file

File diff suppressed because one or more lines are too long

346
install-uvx/index.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

142
manage-services/index.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

137
reinstall/index.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

32
tui/index.html Normal file

File diff suppressed because one or more lines are too long

98
uninstall/index.html Normal file

File diff suppressed because one or more lines are too long

104
upgrade/index.html Normal file

File diff suppressed because one or more lines are too long