Val Town Code SearchReturn to Val Town

API Access

You can access search results via JSON API by adding format=json to your query:

https://codesearch.val.run/$%7Burl%7D?q=function&page=1&format=json

For typeahead suggestions, use the /typeahead endpoint:

https://codesearch.val.run/typeahead?q=function

Returns an array of strings in format "username" or "username/projectName"

Found 31474 results for "function"(1596ms)

untitled-6058main.tsx1 match

@sunnyatlightswitch•Updated 23 mins ago
12
13// Initialize database table
14async function initDatabase() {
15 await sqlite.execute(`CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (
16 id INTEGER PRIMARY KEY AUTOINCREMENT,
Plantfo

Plantfoindex.ts4 matches

@Llad•Updated 25 mins ago
31
32// Generate a simple session token
33function generateSessionToken(): string {
34 return crypto.randomUUID();
35}
36
37// Authentication middleware
38async function requireAuth(c: any, next: any) {
39 const sessionToken = await getSignedCookie(c, SESSION_SECRET, "admin_session");
40
49
50// Check if user is authenticated (for API endpoints)
51function isAuthenticated(c: any): boolean {
52 const sessionToken = getSignedCookie(c, SESSION_SECRET, "admin_session");
53 console.log(`Session token: ${sessionToken}`);
279 console.log("Testing database connection...");
280
281 // Test basic SQLite functionality
282 const testResult = await sqlite.execute("SELECT 1 as test");
283 console.log("Basic SQLite test result:", testResult);

kaymain.tsx22 matches

@legal•Updated 29 mins ago
164}
165
166// --- HTML Generation Function (Glassmorphism UI) ---
167function generateHtmlShell(initialUrl, initialText, sourceUrl, appConfig, analysisAgents, currentLocaleStrings) {
168 const escapedUrl = initialUrl ? initialUrl.replace(/"/g, """) : "";
169 const escapedText = initialText ? initialText.replace(/</g, "&lt;").replace(/>/g, "&gt;") : "";
398 let currentLocale = APP_CONFIG.default_language || 'en';
399
400 // --- Localization Functions ---
401 function translate(key, replacements = {}) {
402 let text = locales[currentLocale]?.[key] || locales['en']?.[key] || key;
403 for (const placeholder in replacements) {
407 }
408
409 function applyTranslations() {
410 document.querySelectorAll('[data-translate]').forEach(el => {
411 const key = el.getAttribute('data-translate');
425 }
426
427 function setLocale(locale) {
428 if (locales[locale]) {
429 currentLocale = locale;
435 }
436
437 function updateLocaleButtons() {
438 document.querySelectorAll('.lang-btn').forEach(btn => btn.classList.toggle('active', btn.dataset.lang === currentLocale));
439 const linkHtml = \`<a href="${APP_CONFIG.footer_powered_by_url}" target="_top">${APP_CONFIG.footer_powered_by_link_text}</a>\`;
470 const resultsContainer = document.getElementById('results-content-cards');
471
472 // --- UI Update Functions ---
473 function setLoadingState(isLoading) {
474 submitButton.disabled = isLoading;
475 if (isLoading) {
486 }
487
488 function displayError(messageKey, replacements = {}) {
489 const message = translate(messageKey, replacements);
490 errorContainer.textContent = message;
492 }
493
494 function clearResults() {
495 ANALYSIS_AGENTS.forEach(agent => {
496 if (agent.ui_display_info) {
513 }
514
515 function updateLoadingProgress(percentage, statusKey, agentName = '') {
516 progressBar.style.width = \`\${percentage}%\`;
517 let statusText = translate(statusKey);
522 }
523
524 // --- Result Rendering Functions ---
525 function renderAgentResult(agentId, agentResultData, agentConfig) {
526 const card = document.getElementById(\`card-\${agentId}\`);
527 const contentEl = document.getElementById(\`content-\${agentId}\`);
731
732// --- Main Request Handler (Server Code) ---
733export default async function(req: Request) {
734 // --- Dynamic Imports ---
735 const { OpenAI } = await import("https://esm.town/v/std/openai");
762
763 // --- Helper: Extract Text using pdf.js-extract ---
764 async function extractPdfTextNative(data: ArrayBuffer, fileName: string, log: LogEntry[]): Promise<string | null> {
765 const agent = "PDF Extraction Agent";
766 try {
777 }
778
779 // --- Helper Function: Call OpenAI API ---
780 async function callOpenAI(
781 openai: OpenAI,
782 systemPrompt: string,
811 }
812
813 // --- Helper Function: Traverse References ---
814 async function traverseReferences(references: Reference[], log: LogEntry[]): Promise<Reference[]> {
815 const agent = "Reference Traversal Agent";
816 log.push({ agent, type: "step", message: `Traversing ${references.length} potential reference URLs... ` });
838
839 // --- Main Agent Flow Logic ---
840 async function runAgentFlow(
841 input: { documentUrl?: string; documentText?: string; documentFile?: File },
842 log: LogEntry[],
983 * Ensure your environment has the `OPENAI_API_KEY` secret set.
984 * 5. Deploy:
985 * This script is a self-contained serverless function.
986 */
Plantfo

Plantfocache.ts7 matches

@Llad•Updated 38 mins ago
26
27// Initialize the cache table
28export async function initializeCache(): Promise<void> {
29 try {
30 console.log("Initializing cache table...");
50
51// Normalize plant name for consistent caching
52function normalizePlantName(name: string): string {
53 return name.toLowerCase()
54 .trim()
59
60// Get cached plant information
61export async function getCachedPlant(plantName: string): Promise<PlantInfo | null> {
62 const normalizedName = normalizePlantName(plantName);
63 console.log(`getCachedPlant: original="${plantName}", normalized="${normalizedName}"`);
86
87// Cache plant information
88export async function cachePlant(plantName: string, plantInfo: PlantInfo): Promise<void> {
89 const normalizedName = normalizePlantName(plantName);
90 const now = new Date().toISOString();
114
115// Get cache statistics
116export async function getCacheStats(): Promise<{
117 totalEntries: number;
118 oldestEntry: string | null;
149
150// List all cached plants (for debugging/admin purposes)
151export async function listCachedPlants(): Promise<
152 Array<{
153 plantName: string;
173
174// Clear cache (for maintenance)
175export async function clearCache(): Promise<void> {
176 try {
177 await sqlite.execute(`DELETE FROM ${TABLE_NAME}`);

btcPriceAlertmain.tsx1 match

@luizhrios•Updated 1 hour ago
4import { currency } from "https://esm.town/v/stevekrouse/currency";
5
6export async function btcPriceAlert() {
7 const lastBtcPrice: number = await blob.getJSON("lastBtcPrice");
8 let btcPrice = await currency("usd", "btc");

orbiterHealthmonitor2 matches

@stevedylandev•Updated 3 hours ago
8);
9
10async function notifySlack(message: string) {
11 try {
12 await fetch(WEBHOOK_URL, {
24}
25
26export async function uptimeCheck(url: string) {
27 let reason: string, status: number, end: number;
28 let ok = true;

Architmain.tsx1 match

@stevenvapi•Updated 4 hours ago
1export default async function(req: Request): Promise<Response> {
2 if (req.body.zip_code === "94115") {
3 return Response.json({ ok: false });

sapo-mag-filmes-em-cartazmain.tsx1 match

@gmcabrita•Updated 4 hours ago
66/* ------------------------------------------------------------------ */
67/* Utility: minimal XML escaping (only for text nodes) */
68function escapeXml(str: string = ""): string {
69 return str
70 .replace(/&/g, "&amp;")

docjocmain.tsx32 matches

@legal•Updated 5 hours ago
114}
115
116function generateHtmlShell(initialQuery, sourceUrl) {
117 const escapedQuery = initialQuery.replace(/</g, "&lt;").replace(/>/g, "&gt;");
118 return `
124<title>DocJoc - AI Document Analysis</title>
125<style>
126@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:root{--sidebar-expanded-width:260px;--sidebar-collapsed-width:70px;--sidebar-transition-duration:0.3s}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;margin:0;background-color:#f4f7f9;color:#333a40;display:flex;min-height:100vh;font-size:16px;overflow-x:hidden}.app-container{display:flex;width:100%}.sidebar{width:var(--sidebar-expanded-width);background-color:#2d3748;color:#e2e8f0;height:100vh;position:fixed;left:0;top:0;box-shadow:3px 0 10px rgba(0,0,0,.1);display:flex;flex-direction:column;transition:width var(--sidebar-transition-duration) ease-in-out;z-index:100}.sidebar.collapsed{width:var(--sidebar-collapsed-width)}.sidebar.collapsed .sidebar-header h2,.sidebar.collapsed .sidebar-header .tagline,.sidebar.collapsed .nav-item .nav-item-text-main,.sidebar.collapsed .sidebar-footer .footer-text{display:none}.sidebar .nav-item svg{margin-right:12px;width:20px;height:20px;opacity:.8;flex-shrink:0}.sidebar.collapsed .nav-item svg{margin-right:0}.sidebar.collapsed .nav-item{justify-content:center;padding-left:0;padding-right:0}.sidebar-header{text-align:center;padding:0 20px;margin-bottom:25px}.sidebar-header h2{font-size:2em;color:#4299e1;font-weight:600;letter-spacing:.5px;margin:0}.sidebar-header .tagline{font-size:.8em;color:#a0aec0;margin-top:2px}.hamburger-container{display:flex;align-items:center;justify-content:flex-start;padding:10px 20px;height:40px}.sidebar.collapsed .hamburger-container{justify-content:center;padding:10px 0}.hamburger-menu{display:inline-block;cursor:pointer;background:0 0;border:none;padding:10px;position:relative;width:30px;height:22px;box-sizing:content-box}.hamburger-box{width:30px;height:22px;display:inline-block;position:relative}.hamburger-inner{display:block;top:50%;margin-top:-1px}.hamburger-inner,.hamburger-inner::after,.hamburger-inner::before{width:30px;height:2px;background-color:#e2e8f0;border-radius:4px;position:absolute;transition-property:transform;transition-duration:.15s;transition-timing-function:ease}.hamburger-inner::after,.hamburger-inner::before{content:"";display:block}.hamburger-inner::before{top:-8px}.hamburger-inner::after{bottom:-8px}.sidebar:not(.collapsed) .hamburger-menu .hamburger-inner{transform:rotate(180deg)}.sidebar:not(.collapsed) .hamburger-menu .hamburger-inner::before{transform:translateY(8px) rotate(45deg)}.sidebar:not(.collapsed) .hamburger-menu .hamburger-inner::after{transform:translateY(-8px) rotate(-45deg)}.nav-menu{list-style:none;padding:0;margin:0;flex-grow:1}.nav-item{display:flex;align-items:center;padding:14px 20px;margin-bottom:8px;cursor:pointer;transition:background-color .2s ease,color .2s ease;font-weight:500;white-space:nowrap;position:relative}.nav-item-text-main{transition:opacity .2s ease-in-out}.nav-item-text-hover{display:none}.sidebar.collapsed .nav-item .nav-item-text-main{opacity:0}.nav-item:hover{background-color:#4a5568;color:#fff}.nav-item.active{background-color:#4299e1;color:#fff;font-weight:600}.nav-item.active svg{opacity:1}.sidebar.collapsed .nav-item .nav-item-text-hover{position:absolute;left:calc(var(--sidebar-collapsed-width) - 10px);top:50%;transform:translateY(-50%) translateX(-15px) scale(.9);background-color:#4a5568;color:#fff;padding:10px 15px;border-radius:4px;font-size:.9em;white-space:nowrap;z-index:110;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;box-shadow:2px 2px 8px rgba(0,0,0,.2)}.sidebar.collapsed .nav-item:hover .nav-item-text-hover{opacity:1;transform:translateY(-50%) translateX(0) scale(1);pointer-events:auto}.sidebar-footer{font-size:.8em;color:#a0aec0;text-align:center;padding:15px 20px;border-top:1px solid #4a5568;white-space:nowrap}.sidebar-footer a{color:#7f9cf5;text-decoration:none}.sidebar-footer a:hover{text-decoration:underline}.main-content{margin-left:var(--sidebar-expanded-width);padding:30px 40px;flex-grow:1;overflow-y:auto;transition:margin-left var(--sidebar-transition-duration) ease-in-out;width:calc(100% - var(--sidebar-expanded-width))}.sidebar.collapsed+.main-content{margin-left:var(--sidebar-collapsed-width);width:calc(100% - var(--sidebar-collapsed-width))}.view{display:none;animation:fadeIn .4s ease-out}.view.active-view{display:block}.view>h1{font-size:2.2em;color:#2d3748;margin-bottom:25px;border-bottom:2px solid #e2e8f0;padding-bottom:15px}.card{background-color:#fff;border-radius:8px;padding:25px;margin-bottom:25px;box-shadow:0 4px 12px rgba(0,0,0,.07);border:1px solid #e2e8f0}.card h2,.card h3{color:#2d3748;margin-top:0;border-bottom:1px solid #edf2f7;padding-bottom:10px;margin-bottom:15px}button,.button{padding:10px 18px;border:none;border-radius:5px;font-size:1rem;font-weight:500;cursor:pointer;transition:background-color .2s ease,transform .1s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}.button-primary{background-color:#3182ce;color:#fff}.button-primary:hover{background-color:#2b6cb0;transform:translateY(-1px)}.button-primary:disabled{background-color:#a0aec0;cursor:not-allowed}.button-primary .spinner{display:none;width:16px;height:16px;border:2px solid hsla(0,0%,100%,.3);border-radius:50%;border-top-color:#fff;animation:spin .8s linear infinite}.button-primary.loading .spinner{display:inline-block}.button-primary.loading span{margin-right:8px}.button-secondary{background-color:#e2e8f0;color:#2d3748}.button-secondary:hover{background-color:#cbd5e0}.button-danger{background-color:#e53e3e;color:#fff}.button-danger:hover{background-color:#c53030}label{display:block;margin-bottom:8px;font-weight:600;color:#4a5568}input[type=file],input[type=text],textarea{width:calc(100% - 22px);padding:10px;margin-bottom:15px;border:1px solid #cbd5e0;border-radius:4px;font-size:1rem;box-sizing:border-box}input[type=file]{padding:8px;background-color:#f7fafc}textarea{min-height:100px;resize:vertical}#status-container{margin-top:20px;font-family:monospace;font-size:.9em;line-height:1.4;max-height:250px;overflow-y:auto;padding:10px;border:1px solid #e2e8f0;border-radius:4px;background-color:#f7fafc}.status-entry{margin-bottom:8px;padding:10px 15px;border-radius:4px;white-space:pre-wrap;word-wrap:break-word;animation:fadeIn .3s ease-out;font-size:.95em}.status-entry.info{background-color:#ebf8ff;color:#3182ce;border-left:4px solid #3182ce}.status-entry.error{background-color:#fff5f5;color:#c53030;border-left:4px solid #c53030;font-weight:700}.status-entry.progress{background-color:#f0fff4;color:#38a169;border-left:4px solid #38a169}#structured-results-container{margin-top:20px}.result-block{margin-bottom:20px;padding:20px;background-color:#f9fafb;border:1px solid #e2e8f0;border-radius:6px}.result-block h3{margin-top:0;color:#2d3748;font-size:1.25em;border-bottom:1px solid #e2e8f0;padding-bottom:8px;margin-bottom:12px}.result-block p{margin:6px 0;line-height:1.6}.result-block p strong{color:#2d3748;min-width:170px;display:inline-block}.result-block pre{background-color:#edf2f7;padding:12px;border-radius:4px;white-space:pre-wrap;word-wrap:break-word;font-size:.9em;max-height:280px;overflow-y:auto;border:1px solid #cbd5e0}.finding-card{border:1px solid #d1dce5;border-radius:6px;padding:18px;margin-bottom:18px;background-color:#fff;box-shadow:0 2px 6px rgba(0,0,0,.05)}.finding-card h4{margin-top:0;margin-bottom:10px;color:#2b6cb0;font-size:1.1em;display:flex;align-items:center;}.finding-card p{font-size:.95em;margin:5px 0}.finding-card p strong{color:#4a5568;min-width:140px}.severity-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:0.85em;font-weight:600;color:#fff}.severity-badge.high{background-color:#c53030}.severity-badge.medium{background-color:#dd6b20}.severity-badge.low{background-color:#38a169}.severity-badge.unknown{background-color:#718096}.disclaimer{font-size:.8em;color:#718096;text-align:center;margin-top:12px;padding:8px;background-color:#edf2f7;border-radius:4px}.history-list{list-style:none;padding:0}.history-item{display:flex;flex-direction:column;padding:20px;margin-bottom:15px;border:1px solid #e2e8f0;border-radius:6px;background-color:#fff;box-shadow:0 2px 5px rgba(0,0,0,.05)}.history-item strong{font-size:1.1em;color:#2d3748;margin-bottom:5px;display:block}.history-item .meta{font-size:.9em;color:#718096;margin-bottom:12px}.history-item .actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}.suggestion-group{margin-bottom:15px}.suggestion-group-header{display:flex;align-items:center;margin-bottom:8px;background-color:#e9f0f7;padding:8px 12px;border-radius:4px;cursor:pointer}.suggestion-group-header input[type=checkbox]{margin-right:10px;height:17px;width:17px}.suggestion-group-header label{font-weight:600;font-size:1.05em;color:#2d3748;margin-bottom:0;flex-grow:1;cursor:pointer}.suggestion-group-tasks{padding-left:20px}#dj-suggested-tasks-list-container{margin-bottom:10px}#dj-task-selection-info{font-size:.9em;color:#718096;margin-bottom:15px}#dj-suggested-tasks-list{max-height:350px;overflow-y:auto;border:1px solid #cbd5e0;padding:10px;border-radius:4px;background-color:#fdfdfd}.suggestion-item-label{display:flex;align-items:center;width:100%;margin-bottom:6px;font-weight:400;padding:10px;border-radius:4px;cursor:pointer;transition:background-color .2s;border:1px solid transparent;background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.05)}.suggestion-item-label:hover{background-color:#f0f4f8}.suggestion-item-label.high-priority-task{background-color:#e6fffa;border-left:3px solid #38a169}.suggestion-item-label input[type=checkbox]{margin-right:10px;vertical-align:middle;accent-color:#3182ce;height:16px;width:16px;flex-shrink:0}.suggestion-item-label .task-text{flex-grow:1}.dj-input-method{margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #edf2f7}.dj-input-method:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.dj-input-method h3{font-size:1.1em;color:#4a5568;margin-bottom:10px}
127.magnifying-glass-loader{display:none;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;background-color:rgba(255,255,255,.8);border-radius:8px;margin-top:20px}.magnifying-glass-loader .glass{width:50px;height:50px;border:5px solid #3182ce;border-radius:50%;position:relative;animation:magnify-anim 1.5s infinite linear}.magnifying-glass-loader .handle{width:8px;height:25px;background:#3182ce;position:relative;top:-12px;left:25px;transform:rotate(45deg)}.magnifying-glass-loader p{margin-top:25px;font-size:1.1em;font-weight:500;color:#2d3748;letter-spacing:.5px}@keyframes magnify-anim{0%{transform:scale(1) rotate(0)}50%{transform:scale(1.2) rotate(180deg)}100%{transform:scale(1) rotate(360deg)}}
128.history-filter-controls{padding:20px;margin-bottom:20px;}.history-filter-form-grid{display:flex;gap:20px;align-items:flex-end;}.history-filter-types{display:flex;gap:15px;padding-bottom:10px;}.history-filter-types label{margin-bottom:0;font-weight:normal;cursor:pointer;}.history-filter-form-grid > div:first-child{flex-grow:1;}
155</div>
156<script>
157(function() {
158const DOCS_KEY = 'docjoc_docs_v1', ANALYSES_KEY = 'docjoc_analyses_v1', MAX_SUGGESTIONS = 15;
159let currentView;
170let currentAnalysisSession = getInitialAnalysisState();
171
172// --- UTILITY FUNCTIONS ---
173const getStore = (key) => JSON.parse(localStorage.getItem(key) || '[]');
174const setStore = (key, data) => localStorage.setItem(key, JSON.stringify(data));
195});
196
197function navigateTo(viewId, params = {}) {
198 if(viewId !== 'new-analysis' || params.reset) {
199 currentAnalysisSession = getInitialAnalysisState();
219}
220
221function setupEventListeners() {
222 hamburgerToggle.addEventListener('click', () => {
223 const isExpanded = sidebar.classList.contains('expanded-mobile') || !sidebar.classList.contains('collapsed');
285}
286
287function renderDashboard() {
288 const docs = getStore(DOCS_KEY);
289 const analyses = getStore(ANALYSES_KEY);
307
308// --- NEW ANALYSIS WIZARD ---
309function renderNewAnalysisView(params = {}) {
310 views['new-analysis'].innerHTML = \`
311 <h1>New Analysis</h1>
334}
335
336function setWizardStep(step) {
337 currentAnalysisSession.step = step;
338
357}
358
359function renderAnalysisStep1() {
360 const pane = document.getElementById('dj-step-1-pane');
361 pane.innerHTML = \`
376}
377
378function renderAnalysisStep2() {
379 const pane = document.getElementById('dj-step-2-pane');
380 const { suggestions, suggestionsError, isProcessing } = currentAnalysisSession;
426}
427
428function renderAnalysisStep3() {
429 const pane = document.getElementById('dj-step-3-pane');
430 const { analysisResult, analysisError, isProcessing } = currentAnalysisSession;
461}
462
463async function handleDocInputAndSuggest() {
464 const fileInput = document.getElementById('dj-doc-file');
465 const loader = document.getElementById('dj-doc-processing-loader');
500}
501
502async function fetchAndPopulateSuggestions() {
503 currentAnalysisSession.isProcessing = true;
504 currentAnalysisSession.suggestionsError = null;
524}
525
526function populateSuggestedTasks(groups = {}) {
527 const djTasksListDiv = document.getElementById('dj-suggested-tasks-list');
528 if(!djTasksListDiv) return;
562}
563
564function handleGroupCheckboxChange(event) {
565 const djTasksListDiv = document.getElementById('dj-suggested-tasks-list');
566 const groupCheckbox = event.target;
580}
581
582function handleSuggestionCheckboxChange() {
583 const djTasksListDiv = document.getElementById('dj-suggested-tasks-list');
584 if (this.checked) {
594}
595
596function enforceMaxSelections() {
597 const djTasksListDiv = document.getElementById('dj-suggested-tasks-list');
598 if(!djTasksListDiv) return;
611}
612
613function updateAllGroupCheckboxesStates() {
614 const djTasksListDiv = document.getElementById('dj-suggested-tasks-list');
615 if(!djTasksListDiv) return;
633};
634
635async function handleFinalAnalysis(e) {
636 if(e) e.preventDefault();
637 const djCustomTaskInput = document.getElementById('dj-custom-task-query');
715};
716
717function renderAnalysisResults(data) {
718 if (!data || typeof data !== 'object') return '<p>Invalid analysis results data.</p>';
719 let html = '';
736}
737
738function saveCurrentAnalysis() {
739 const { analysisResult, docId, analysisQuery } = currentAnalysisSession;
740 if (analysisResult && docId && analysisQuery) {
749}
750
751function renderHistoryView() {
752 views['history'].innerHTML = \`
753 <h1>History</h1>
827
828
829function deleteDocument(docId) {
830 let docs = getStore(DOCS_KEY);
831 let analyses = getStore(ANALYSES_KEY);
835}
836
837function deleteAnalysis(analysisId) {
838 let analyses = getStore(ANALYSES_KEY);
839 setStore(ANALYSES_KEY, analyses.filter(an => an.id !== analysisId));
841}
842
843function renderDocumentDetailView(docId) {
844 const doc = getStore(DOCS_KEY).find(d => d.id === docId);
845 const dv = views['document-detail'];
859}
860
861function renderAnalysisDetailView(analysisId) {
862 const an = getStore(ANALYSES_KEY).find(a => a.id === analysisId);
863 const dv = views['analysis-detail'];
868}
869
870function renderSettingsView() {
871 views.settings.innerHTML = \`<h1>Settings</h1><div class="card"><h3>Manage Local Data</h3><p>Documents and analyses are stored in your browser's local storage. This data does not leave your computer unless you explicitly send it for AI analysis.</p><p><strong>Warning: This action is irreversible.</strong></p><button class="button button-danger" data-action="clear-local-storage">Clear All Local Data</button></div>\`;
872}
877}
878
879export default async function(req: Request) {
880 const { OpenAI } = await import("https://esm.town/v/std/openai");
881 const { PDFExtract } = await import("npm:pdf.js-extract");
896 const MAX_TEXT_ANALYZE = 30000;
897
898 async function extractPdfText(data: ArrayBuffer, fileName: string, log: LogEntry[]): Promise<string | null> {
899 log.push({ agent: "PDF", type: "step", message: `Processing: ${fileName}` });
900 try {
915 }
916
917 async function callAI(
918 systemPrompt: string,
919 userMessage: string,
945 }
946
947 async function ingestDocument(file: File, log: LogEntry[]): Promise<{ text: string | null; sourceDesc: string }> {
948 if (!file) {
949 log.push({ agent: "Ingest", type: "error", message: "No file provided." });

brokenLinkCrawlerurlGetter.tsx1 match

@willthereader•Updated 5 hours ago
1export async function urlGetter(sourceURL) {
2 const linkList = {
3 [sourceURL]: {
tuna

tuna9 file matches

@jxnblk•Updated 2 weeks ago
Simple functional CSS library for Val Town

getFileEmail4 file matches

@shouser•Updated 1 month ago
A helper function to build a file's email
lost1991
import { OpenAI } from "https://esm.town/v/std/openai"; export default async function(req: Request): Promise<Response> { if (req.method === "OPTIONS") { return new Response(null, { headers: { "Access-Control-Allow-Origin": "*",
webup
LangChain (https://langchain.com) Ambassador, KubeSphere (https://kubesphere.io) Ambassador, CNCF OpenFunction (https://openfunction.dev) TOC Member.