botdocs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +93 -0
- package/bin/botdocs.js +6 -0
- package/dist/src/builder/chunker.d.ts +41 -0
- package/dist/src/builder/chunker.js +139 -0
- package/dist/src/builder/embedder.d.ts +26 -0
- package/dist/src/builder/embedder.js +75 -0
- package/dist/src/builder/index.d.ts +5 -0
- package/dist/src/builder/index.js +142 -0
- package/dist/src/builder/markdown-processor.d.ts +26 -0
- package/dist/src/builder/markdown-processor.js +161 -0
- package/dist/src/builder/site-generator.d.ts +24 -0
- package/dist/src/builder/site-generator.js +152 -0
- package/dist/src/builder/template-engine.d.ts +30 -0
- package/dist/src/builder/template-engine.js +77 -0
- package/dist/src/builder/vector-db-builder.d.ts +20 -0
- package/dist/src/builder/vector-db-builder.js +63 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +47 -0
- package/dist/src/cli/options.d.ts +7 -0
- package/dist/src/cli/options.js +5 -0
- package/dist/src/types/config.d.ts +24 -0
- package/dist/src/types/config.js +16 -0
- package/dist/src/types/document.d.ts +20 -0
- package/dist/src/types/document.js +1 -0
- package/dist/src/types/vector-db.d.ts +21 -0
- package/dist/src/types/vector-db.js +1 -0
- package/dist-client/assets/chatbox-CmTTiB2Z.js +1 -0
- package/dist-client/assets/rag-engine-L2vj3Y0G.js +7 -0
- package/dist-client/bundle.js +1 -0
- package/package.json +71 -0
- package/src/styles/chat.css +420 -0
- package/src/styles/main.css +532 -0
- package/src/styles/themes.css +78 -0
- package/src/templates/doc-page.html +27 -0
- package/src/templates/index.html +28 -0
- package/src/templates/layout.html +59 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ChunkMetadata {
|
|
2
|
+
sourceFile: string;
|
|
3
|
+
title: string;
|
|
4
|
+
heading?: string;
|
|
5
|
+
headingId?: string;
|
|
6
|
+
url: string;
|
|
7
|
+
startLine?: number;
|
|
8
|
+
endLine?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DocumentChunk {
|
|
11
|
+
id: string;
|
|
12
|
+
text: string;
|
|
13
|
+
embedding: number[];
|
|
14
|
+
metadata: ChunkMetadata;
|
|
15
|
+
}
|
|
16
|
+
export interface VectorDatabase {
|
|
17
|
+
version: string;
|
|
18
|
+
model: string;
|
|
19
|
+
dimension: number;
|
|
20
|
+
chunks: DocumentChunk[];
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t}from"../bundle.js";function e(t){let e=t;return e=function(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}(e),e=e.replace(/```(\w+)?\n([\s\S]*?)```/g,(t,e,n)=>`<pre><code${e?` class="language-${e}"`:""}>${n.trim()}</code></pre>`),e=e.replace(/`([^`]+)`/g,"<code>$1</code>"),e=e.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),e=e.replace(/__(.+?)__/g,"<strong>$1</strong>"),e=e.replace(/\*(.+?)\*/g,"<em>$1</em>"),e=e.replace(/_(.+?)_/g,"<em>$1</em>"),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank">$1</a>'),e=e.replace(/^### (.+)$/gm,"<h3>$1</h3>"),e=e.replace(/^## (.+)$/gm,"<h2>$1</h2>"),e=e.replace(/^# (.+)$/gm,"<h1>$1</h1>"),e=e.replace(/^---$/gm,"<hr />"),e=e.replace(/\n\n/g,"</p><p>"),e=e.replace(/\n/g,"<br />"),e=`<p>${e}</p>`,e=e.replace(/<p><\/p>/g,""),e=e.replace(/<p>(<pre>)/g,"$1"),e=e.replace(/(<\/pre>)<\/p>/g,"$1"),e=e.replace(/<p>(<h[1-3]>)/g,"$1"),e=e.replace(/(<\/h[1-3]>)<\/p>/g,"$1"),e=e.replace(/<p>(<hr \/>)<\/p>/g,"$1"),e}let n=!1,a=[],s=!1;const c="botdocs_chat_history",o="botdocs_chat_open",i="botdocs_chat_timestamp",r=6e5;function l(){const t=document.getElementById("chat-toggle"),e=document.getElementById("chat-container");t&&e?(!function(){try{const t=localStorage.getItem(i),e=Date.now();if(t){if(e-parseInt(t,10)>r)return void I()}const s=localStorage.getItem(c);s&&(a=JSON.parse(s));const l=localStorage.getItem(o);l&&(n=JSON.parse(l))}catch(t){console.error("Failed to load chat state:",t),a=[],n=!1}}(),t.addEventListener("click",()=>{d()}),h(e),a.length>0&&function(){const t=document.getElementById("chat-messages");if(!t)return;t.innerHTML="";for(const e of a)y(e,t)}(),n&&(e.style.display="flex",s||g().then(()=>{s=!0}))):console.error("Chat elements not found")}async function d(){n=!n;const t=document.getElementById("chat-container");t&&(t.style.display=n?"flex":"none"),n&&!s&&(await g(),s=!0),function(){try{localStorage.setItem(o,JSON.stringify(n))}catch(t){console.error("Failed to save chat state:",t)}}()}function h(t){t.innerHTML='\n <div class="chat-header">\n <h3>Ask me anything</h3>\n <div class="chat-header-actions">\n <button class="chat-clear" id="chat-clear" title="Clear chat history">🗑️</button>\n <button class="chat-close" id="chat-close">×</button>\n </div>\n </div>\n <div class="chat-status" id="chat-status" style="display: none;">\n Initializing chat...\n </div>\n <div class="chat-messages" id="chat-messages">\n <div class="chat-message assistant">\n <div class="message-content">\n 👋 Hi! I\'m your documentation assistant. Ask me anything about these docs!\n </div>\n </div>\n </div>\n <div class="chat-input-container">\n <div class="chat-input-wrapper">\n <textarea\n class="chat-input"\n id="chat-input"\n placeholder="Ask a question..."\n rows="1"\n ></textarea>\n <button class="chat-send" id="chat-send">Send</button>\n </div>\n </div>\n ';const e=document.getElementById("chat-close"),n=document.getElementById("chat-clear"),a=document.getElementById("chat-send"),c=document.getElementById("chat-input");if(e&&e.addEventListener("click",d),n&&n.addEventListener("click",m),a&&c&&(a.addEventListener("click",()=>u(c)),c.addEventListener("keypress",t=>{"Enter"!==t.key||t.shiftKey||(t.preventDefault(),u(c))}),c.addEventListener("input",()=>{c.style.height="auto",c.style.height=c.scrollHeight+"px"})),s){const t=document.getElementById("chat-status");t&&(t.style.display="none")}}async function g(){const e=document.getElementById("chat-status");if(e)try{e.style.display="block",e.textContent="Loading AI models...";const{initializeRAG:n,isRAGReady:a}=await t(async()=>{const{initializeRAG:t,isRAGReady:e}=await import("./rag-engine-L2vj3Y0G.js");return{initializeRAG:t,isRAGReady:e}},[]);await n(t=>{e.innerHTML=`\n Loading models... ${Math.round(t)}%\n <div class="progress-bar">\n <div class="progress-fill" style="width: ${t}%"></div>\n </div>\n `}),a()&&(e.style.display="none")}catch(n){console.error("Failed to initialize RAG:",n),e.textContent="⚠️ Chat unavailable"}}function m(){if(confirm("Clear chat history?")){I();const t=document.getElementById("chat-messages");t&&(t.innerHTML='\n <div class="chat-message assistant">\n <div class="message-content">\n 👋 Hi! I\'m your documentation assistant. Ask me anything about these docs!\n </div>\n </div>\n ')}}async function u(e){const n=e.value.trim();if(!n)return;p({role:"user",content:n}),e.value="",e.style.height="auto";const a=document.getElementById("chat-send");a&&(a.disabled=!0),e.disabled=!0,function(){const t=document.getElementById("chat-messages");if(!t)return;const e=document.createElement("div");e.id="loading-indicator",e.className="chat-message assistant",e.innerHTML='\n <div class="loading-indicator">\n <div class="loading-dot"></div>\n <div class="loading-dot"></div>\n <div class="loading-dot"></div>\n </div>\n ',t.appendChild(e),t.scrollTop=t.scrollHeight}();try{const{queryRAG:e}=await t(async()=>{const{queryRAG:t}=await import("./rag-engine-L2vj3Y0G.js");return{queryRAG:t}},[]),a=await e(n);v(),p({role:"assistant",content:a.answer,citations:a.sources})}catch(s){console.error("Chat error:",s),v(),p({role:"assistant",content:"Sorry, I encountered an error. Please try again."})}finally{a&&(a.disabled=!1),e.disabled=!1,e.focus()}}function p(t){a.push(t),function(){try{localStorage.setItem(c,JSON.stringify(a)),localStorage.setItem(i,Date.now().toString())}catch(t){console.error("Failed to save chat history:",t)}}();const e=document.getElementById("chat-messages");e&&y(t,e)}function y(t,n){const a=document.createElement("div");a.className=`chat-message ${t.role}`;let s="";s="user"===t.role?f(t.content):e(t.content);let c=`<div class="message-content">${s}</div>`;if(t.citations&&t.citations.length>0){c+='<div class="message-citations">',c+='<div class="citations-label">📚 Sources:</div>';for(const e of t.citations)c+=`<a href="${f(e.url)}" class="citation-link">${f(e.title)}</a>`;c+="</div>"}a.innerHTML=c,n.appendChild(a),n.scrollTo({top:n.scrollHeight,behavior:"smooth"})}function v(){const t=document.getElementById("loading-indicator");t&&t.remove()}function f(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}function I(){try{localStorage.removeItem(c),localStorage.removeItem(i),a=[]}catch(t){console.error("Failed to clear chat history:",t)}}export{p as addMessage,l as initChat,h as renderChatUI,d as toggleChat};
|