Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 1x 1x 254x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 1x 1x 1x 1x 4x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 7x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { MODEL_TASK } from "../types";
export const MESSAGES = {
CONFIRM_REINDEX: (name: string): string => `"${name}" is already indexed. Re-add it?`,
LABEL_VAULT_ROOT: "Vault root",
CONFIRM_SYNC_REBUILD:
"Rebuilding the index drops every stored document and re-embeds your whole vault from scratch. This can take a while. Continue?",
BUTTON_SKIP_SETUP: "Skip setup",
BUTTON_GET_STARTED: "Get started",
BUTTON_BACK: "Back",
BUTTON_NEXT: "Next",
BUTTON_CONTINUE: "Continue",
BUTTON_CANCEL: "Cancel",
BUTTON_PULL: "Pull",
BUTTON_PULL_MODEL: "Pull Model",
BUTTON_PULL_ANYWAY: "Pull anyway",
WARNING_MODEL_EXCEEDS_RAM: (needed: number, have: number) =>
`This model needs ${needed} GB of RAM but your system has only ${have} GB. Loading it will likely fail.`,
BUTTON_USE: "Use",
BUTTON_REMOVE: "Delete",
BUTTON_REFRESH: "Refresh",
BUTTON_BROWSE_CATALOG: "Browse Catalog",
BUTTON_BROWSE_FULL_CATALOG: "Browse full catalog",
BUTTON_BROWSE_MORE: "Browse more…",
BUTTON_DOWNLOAD_CONTINUE: "Download & continue",
BUTTON_DELETE_SELECTED: "Delete selected",
BUTTON_CRAWL: "Crawl",
BUTTON_START: "Start",
BUTTON_STOP: "Stop",
BUTTON_RESTART: "Restart",
BUTTON_TEST: "Test",
BUTTON_RESET_MANAGED: "Reset to managed",
BUTTON_RUN_SETUP_WIZARD: "Run setup wizard",
BUTTON_CHECK_UPDATES: "Check for updates",
BUTTON_CLEAR_CHAT: "Clear chat",
BUTTON_CLEAR_TASKS: "Clear",
BUTTON_SEND: "Send",
BUTTON_OPEN_CHAT: "Open chat",
BUTTON_OPEN_TASK_CENTER: "→ Open Task Center",
LABEL_DISABLED: "Disabled",
LABEL_NOT_SET: "Not set",
LABEL_NO_MODEL_SELECTED: "no model selected",
LABEL_UPTODATE: "Up to date",
LABEL_UNKNOWN: "unknown version",
LABEL_ALL_TASKS: "All tasks",
LABEL_ALL_SIZES: "All sizes",
LABEL_FEATURED: "Featured",
LABEL_DOWNLOADS: "Downloads",
LABEL_NAME: "Name",
LABEL_SIZE_ASC: "Size (asc)",
LABEL_SIZE_DESC: "Size (desc)",
LABEL_ACTIVE: "Active",
LABEL_INSTALLED: "Installed (shared)",
LABEL_NOT_INSTALLED: " (not installed)",
LABEL_MODEL: "Model",
LABEL_SIZE: "Size",
LABEL_MIN_RAM: "Minimum RAM:",
LABEL_DESCRIPTION: "Description",
LABEL_CHAT_MODEL: "Chat Model",
LABEL_OCR_AUTO: "OCR: Auto",
LABEL_OCR_ON: "OCR: On",
LABEL_OCR_OFF: "OCR: Off",
LABEL_ACTIVE_MODEL: "Active",
LABEL_REASONING: "Reasoning",
LABEL_SOURCES: "Sources",
LABEL_DEPTH: "Depth cap",
LABEL_MAX_PAGES: "Max pages",
LABEL_CRAWL_ADVANCED: "Advanced",
LABEL_CRAWL_RECURSIVE: "Crawl whole site",
LABEL_CRAWL_RECURSIVE_INFO: "About whole-site crawl",
NOTICE_CRAWL_RECURSIVE:
"Whole-site crawl follows every internal link it finds on the same origin. Large sites can fetch hundreds of pages and take a while. Use Advanced to cap depth or page count. Request delay, concurrency and retry behavior live in Settings → Crawling.",
HINT_CRAWL_BLANK_NO_LIMIT: "blank = no limit",
ERROR_CRAWL_MAX_PAGES_POSITIVE: "Max pages must be a positive integer or blank",
ERROR_CRAWL_DEPTH_INVALID: "Depth cap must be a non-negative integer or blank",
LABEL_SERVER_MODE: "Server mode",
LABEL_SERVER_STATUS: "Server status",
LABEL_SERVER_CONTROLS: "Server controls",
LABEL_SERVER_VERSION: "Server version",
LABEL_SERVER_URL: "Server URL",
LABEL_SESSION_TOKEN: "Session token",
LABEL_SETUP_WIZARD: "Setup wizard",
LABEL_AUTO_OPEN_COCKPIT: "Auto-open chat & task center",
LABEL_SWITCH_MANAGED: "Switch to managed server",
LABEL_MODELS: "Models",
LABEL_REFRESH_MODELS: "Refresh models",
LABEL_SEARCH_RETRIEVAL: "Search & Retrieval",
LABEL_RESULTS_COUNT: "Results count",
LABEL_MAX_DISTANCE: "Search strictness",
LABEL_ADAPTIVE_THRESHOLD: "Adaptive threshold",
LABEL_GENERATION: "Advanced settings",
LABEL_RAG_SYSTEM_PROMPT: "RAG system prompt (when answering with documents)",
LABEL_GENERAL_SYSTEM_PROMPT: "Chat system prompt (when answering without documents)",
LABEL_CHAT_MODE: "Chat mode",
LABEL_CHAT_MODE_SEARCH: "Search",
LABEL_CHAT_MODE_CHAT: "Chat",
TAB_LOCAL: "Local",
TAB_FRONTIER: "Frontier",
TAB_DISCOVER: "Discover",
TAB_CHAT_MODELS: "Chat",
TAB_EMBED_MODELS: "Embed",
TAB_VISION_MODELS: "Vision",
TAB_RERANK_MODELS: "Rerank",
TAB_LIBRARY: "Library",
RAIL_FOR_YOU: "For you",
RAIL_YOUR_COLLECTION: "Your collection",
RAIL_FRESH: "Fresh",
RAIL_NO_ITEMS: "Nothing here yet.",
RAIL_FOR_YOU_HELP: "Featured models picked for your active chat task.",
RAIL_YOUR_COLLECTION_HELP: "Models you've already pulled, across every task.",
RAIL_FRESH_HELP: "The most-downloaded models in the catalog right now.",
PILL_KEY_READY: "Ready",
PILL_KEY_NEEDS_KEY: "Needs key",
MODEL_PICKER_TITLE_CHAT: "Pick chat model",
MODEL_PICKER_TITLE_EMBED: "Pick embedding model",
MODEL_PICKER_SEARCH_PLACEHOLDER: "Search models…",
MODEL_PICKER_NEEDS_KEY_HINT: "Click a Needs-key row to set the provider's API key.",
MODEL_PICKER_LOCAL_HEADING: "Local",
MODEL_PICKER_EMPTY: "No models match.",
COMMAND_MODEL_PICKER_CHAT: "Pick chat model",
COMMAND_MODEL_PICKER_EMBED: "Pick embedding model",
DESC_CHAT_MODE: "Search uses your documents and returns citations. Chat is a general assistant with no retrieval.",
TOOLTIP_CHAT_MODE_NEEDS_EMBEDDING: "Configure an embedding model to enable Search.",
LABEL_GEN_TEMPERATURE: "Creativity",
LABEL_GEN_TOP_P: "Top P",
LABEL_GEN_TOP_K: "Top K (sampling)",
LABEL_GEN_REPEAT_PENALTY: "Repetition penalty",
LABEL_GEN_NUM_CTX: "Context window",
LABEL_GEN_SEED: "Seed",
LABEL_GEN_MAX_TOKENS: "Max tokens",
LABEL_GEN_MAX_REASONING_CHARS: "Max reasoning characters",
LABEL_GEN_MODEL_KEEP_ALIVE: "Model keep-alive (s)",
LABEL_GEN_GPU_MEMORY_FRACTION: "GPU memory fraction",
LABEL_WORKER_POOL: "Worker pool",
LABEL_WORKER_POOL_HELP:
"Tuning knobs for the background worker processes that run embedding, vision and rerank models.",
LABEL_WORKER_POOL_CALL_TIMEOUT: "Pool call timeout (s)",
LABEL_WORKER_POOL_EAGER_START: "Eager start workers",
LABEL_WORKER_POOL_MAX_IDLE: "Worker idle timeout (s)",
LABEL_INGEST: "Ingest",
LABEL_INGEST_HELP: "How documents are split, OCR'd and prepared before they enter the index.",
LABEL_CHUNK_SIZE: "Chunk size (tokens)",
LABEL_CHUNK_OVERLAP: "Chunk overlap (tokens)",
LABEL_TESSERACT_TIMEOUT: "Tesseract per-page timeout (s)",
LABEL_VISION_LOAD_BUDGET: "Vision OCR pool budget (s)",
LABEL_RETRIEVAL_ADVANCED: "Retrieval (advanced)",
LABEL_RETRIEVAL_ADVANCED_HELP:
"Lower-level retrieval knobs that shape candidate pools and answer-source diversity.",
LABEL_CANDIDATE_MULTIPLIER: "Candidate multiplier",
LABEL_MIN_RELEVANCE_SCORE: "Minimum relevance score",
LABEL_MAX_CONTEXT_SOURCES: "Max context sources",
LABEL_DIVERSITY_MAX_PER_SOURCE: "Max chunks per source",
LABEL_MMR_LAMBDA: "MMR lambda",
LABEL_CRAWLING: "Crawling",
LABEL_CRAWL_MAX_DEPTH: "Crawl depth",
LABEL_CRAWL_MAX_PAGES: "Page limit",
LABEL_CRAWL_TIMEOUT: "Page timeout",
LABEL_CRAWL_MEAN_DELAY: "Request delay (seconds)",
LABEL_CRAWL_MAX_DELAY_RANGE: "Delay jitter (seconds)",
LABEL_CRAWL_CONCURRENT_REQUESTS: "Concurrent requests",
LABEL_CRAWL_RETRY_ON_RATE_LIMIT: "Retry on rate-limit",
LABEL_CRAWL_RETRY_BASE_DELAY_MIN: "Retry base delay min (seconds)",
LABEL_CRAWL_RETRY_BASE_DELAY_MAX: "Retry base delay max (seconds)",
LABEL_CRAWL_RETRY_MAX_BACKOFF: "Retry max backoff (seconds)",
LABEL_CRAWL_RETRY_MAX_ATTEMPTS: "Retry attempts",
LABEL_CRAWL_EXCLUDE_PATTERNS: "URL exclude patterns",
DESC_CRAWL_EXCLUDE_PATTERNS:
"Regex patterns that skip URLs at link-discovery during recursive crawls. One per line. Blank = no filtering.",
LABEL_RESET_TO_DEFAULT: "Reset to default",
LABEL_RESET_ALL_SETTINGS: "Reset server-backed settings to defaults",
DESC_RESET_ALL_SETTINGS:
"Restore every server-backed setting below to its default. API keys and local plugin preferences are preserved.",
CONFIRM_RESET_ALL_SETTINGS:
"Reset every server-backed setting to its default? API keys and local plugin preferences are preserved.",
BUTTON_RESET_ALL: "Reset all",
LABEL_ADVANCED: "Advanced",
LABEL_STORE_CONTENT_IN_VAULT: "Store lilbee content in vault",
DESC_STORE_CONTENT_IN_VAULT:
"Materialize crawled pages and imported files inside your vault so you can browse them in Obsidian. Disabled for external servers — their files live on the server machine, not your computer.",
NOTICE_STORAGE_REORGANIZING: "Reorganizing lilbee storage into your vault…",
NOTICE_STORAGE_REORGANIZED: "Lilbee storage is now inside your vault.",
NOTICE_STORAGE_REORGANIZE_FAILED: "Could not move lilbee storage into your vault: ",
NOTICE_TAKE_OVER_SUCCESS: (vaultName: string): string => `lilbee switched from "${vaultName}" to this vault.`,
NOTICE_TAKE_OVER_DECLINED: (vaultName: string): string =>
`lilbee stays with "${vaultName}". This vault will run without managed lilbee until you take over or close the other vault.`,
NOTICE_TAKE_OVER_TIMEOUT:
"The other lilbee process did not shut down in time. Try again, or close the other Obsidian window first.",
CONFIRM_TAKE_OVER: (vaultName: string): string =>
`lilbee is currently serving "${vaultName}". Switch it to this vault? The other vault will lose its lilbee connection until you reopen it.`,
STATUS_LOCKED_BY_OTHER: (vaultName: string): string => `lilbee: serving "${vaultName}"`,
COMMAND_TAKE_OVER: "Take over the managed lilbee server",
TOOLTIP_MODEL_INSTALLED_SHARED:
"Installed in the shared lilbee models directory — every vault on this computer can use it without re-downloading.",
COMMAND_SWITCH_VAULT: "Switch lilbee to another vault",
TITLE_VAULT_PICKER: "Switch lilbee to another vault",
DESC_VAULT_PICKER:
"Pick a vault from your shared lilbee installation. The managed lilbee will stop here so the picked vault can take over — open it in Obsidian to claim it.",
EMPTY_VAULT_PICKER: "No other vaults registered yet. Open another Obsidian vault with the lilbee plugin first.",
LABEL_VAULT_NEVER_ACTIVE: "never active",
LABEL_VAULT_ACTIVE_RECENTLY: "active just now",
LABEL_VAULT_ACTIVE_MINUTES: (n: number): string => (n === 1 ? "active 1 minute ago" : `active ${n} minutes ago`),
LABEL_VAULT_ACTIVE_HOURS: (n: number): string => (n === 1 ? "active 1 hour ago" : `active ${n} hours ago`),
LABEL_VAULT_ACTIVE_DAYS: (n: number): string => (n === 1 ? "active 1 day ago" : `active ${n} days ago`),
NOTICE_RELEASED_FOR_VAULT: (vaultName: string): string =>
`lilbee released — open "${vaultName}" in Obsidian to take it over.`,
LABEL_SHARED_ROOT: "Shared lilbee directory",
DESC_SHARED_ROOT: (resolved: string): string =>
`Holds the lilbee binary, model cache, and one subfolder per vault. Leave blank to use the platform default (currently ${resolved}). Restart the plugin or Obsidian for changes to take effect.`,
LABEL_ADOPT_DATA_DIR: "Use existing lilbee data directory",
DESC_ADOPT_DATA_DIR:
"Point this vault at a lilbee data directory you already have on disk (e.g. one moved from the old per-vault location, or one created by `lilbee serve`). The plugin restarts the managed server against the new path.",
PLACEHOLDER_ADOPT_DATA_DIR: "/path/to/lilbee/data-dir",
BUTTON_ADOPT_DATA_DIR: "Use this folder",
NOTICE_ADOPT_DATA_DIR_BLANK: "Enter a path first.",
NOTICE_ADOPT_DATA_DIR_DONE: (path: string): string => `lilbee now uses ${path} for this vault.`,
LABEL_REGISTERED_VAULTS: "Registered vaults",
DESC_REGISTERED_VAULTS:
"Every Obsidian vault that has connected to this shared lilbee, with the data-dir it uses. Remove a vault to drop its entry from the registry; this does not delete its data on disk.",
LABEL_REGISTERED_VAULTS_EMPTY: "No vaults registered yet — open the chat or run a sync to register this one.",
LABEL_VAULT_ROW_CURRENT: (name: string): string => `${name} (this vault)`,
BUTTON_REMOVE_VAULT: "Remove",
TOOLTIP_REMOVE_VAULT:
"Forget this vault from the registry. The data directory stays on disk so you can re-register it later.",
LABEL_STORAGE_REPORT: "Disk usage",
DESC_STORAGE_REPORT: "How much of the shared lilbee directory each piece is using right now.",
LABEL_STORAGE_BIN: "Binary",
LABEL_STORAGE_MODELS: "Models cache",
LABEL_STORAGE_TOTAL: "Total",
LABEL_EMBEDDING_MODEL: "Embedding model",
LABEL_RERANKER_TITLE: "Reranker model",
LABEL_RERANKER_DISABLED: "(disabled)",
LABEL_RERANKER_HOSTED_GROUP: "Hosted via LiteLLM",
LABEL_RERANKER_CANDIDATES: "Rerank candidates",
DESC_RERANKER_MODEL: "Reorders search results for better relevance. Disabled by default.",
DESC_RERANKER_CANDIDATES: "How many candidate results to rerank (1-100). Higher = slower but more accurate.",
NOTICE_FAILED_RERANKER: "lilbee: failed to update reranker model",
NOTICE_RERANKER_UPDATED: "lilbee: reranker model updated",
NOTICE_RERANKER_NEEDS_KEY: "Configure the LiteLLM API key in the LLM provider settings to use this reranker.",
NOTICE_RERANKER_LOAD_FAILED: "lilbee: failed to load reranker options",
LABEL_VISION_TITLE: "Vision model",
LABEL_VISION_DISABLED: "(disabled)",
LABEL_VISION_HOSTED_GROUP: "Hosted via LiteLLM",
DESC_VISION_MODEL:
"Used to read scanned PDFs when OCR fails. Separate from the chat model — vision models run only on image-only documents.",
NOTICE_VISION_UPDATED: "lilbee: vision model updated",
NOTICE_FAILED_VISION: "lilbee: failed to update vision model",
NOTICE_VISION_LOAD_FAILED: "lilbee: failed to load vision options",
NOTICE_VISION_NEEDS_KEY: "Configure the LiteLLM API key in the LLM provider settings to use this vision model.",
PLACEHOLDER_RERANK_CANDIDATES: "20",
LABEL_LLM_PROVIDER: "AI backend",
LABEL_API_KEY: "API key",
LABEL_OPENAI_API_KEY: "OpenAI API key",
DESC_OPENAI_API_KEY: "For GPT models via litellm",
LABEL_ANTHROPIC_API_KEY: "Anthropic API key",
DESC_ANTHROPIC_API_KEY: "For Claude models via litellm",
LABEL_GEMINI_API_KEY: "Gemini API key",
DESC_GEMINI_API_KEY: "For Gemini models via litellm",
LABEL_HF_TOKEN: "HuggingFace token",
LABEL_LITELLM_BASE_URL: "External AI endpoint",
LABEL_DELETE_MODEL: "Delete model",
LABEL_GENERATION_HELP: "Fine-tune AI responses. Defaults work well for most users.",
LABEL_ADVANCED_HELP:
"These settings affect how your documents are processed. Only change if you know what you're doing.",
LABEL_CLOSE_GLYPH: "\u00D7",
LABEL_TASK_CENTER: "Task Center",
LABEL_TASK_CAP_PILL: "{active}/{cap} running",
LABEL_TASK_COUNTERS: "{active} running · {queued} queued · {done} done",
LABEL_ACTIVE_TASKS: "ACTIVE",
LABEL_QUEUED_TASKS: "QUEUED",
LABEL_COMPLETED_TASKS: "COMPLETED",
LABEL_NO_ACTIVE_TASKS: "No active tasks",
LABEL_NO_QUEUED_TASKS: "No queued tasks",
LABEL_NO_COMPLETED_TASKS: "No completed tasks",
LABEL_CANCEL_TASK: "Cancel task",
LABEL_RETRY_TASK: "Retry",
LABEL_DOWNLOAD_QUEUED: "+{count} queued",
LABEL_TASK_STATE_QUEUED: "queued",
LABEL_TASK_STATE_DONE: "done",
LABEL_TASK_STATE_FAILED: "failed",
LABEL_TASK_STATE_CANCELLED: "cancelled",
LABEL_TASK_STATE_WAITING: "waiting on server",
STATUS_WAITING_ON_SERVER: "Already ingesting on the server — waiting for it to finish",
STATUS_TASKS_RUNNING_PLURAL: "{count} tasks running · {name} {pct}%",
STATUS_TASK_RUNNING_SINGLE: "{name} {pct}%",
STATUS_TASKS_QUEUED_ONLY: "{count} queued",
STATUS_TASK_DONE_FLASH: "Done · {name}",
STATUS_TASKS_DONE_FLASH: "{count} tasks done · {name}",
STATUS_TASK_FAILED_FLASH: "{count} task failed · {name}",
STATUS_TASKS_FAILED_FLASH: "{count} tasks failed · {name}",
LABEL_CHAT_MODEL_ICON: "Chat model",
LABEL_EMBEDDING_MODEL_ICON: "Embed",
LABEL_ADD_FILE: "Add file",
LABEL_SAVE_VAULT: "Save to vault",
LABEL_THINKING: "Thinking...",
LABEL_STOPPED: "(stopped)",
LABEL_STOPPED_MD: "*(stopped)*",
LABEL_CONNECTING: "(connecting...)",
LABEL_OFFLINE: "(offline)",
LABEL_CHAT_VIEW: "lilbee Chat",
LABEL_TASKS_VIEW: "lilbee Tasks",
LABEL_RIBBON_OPEN_TASK_CENTER: "Open lilbee Task Center",
LABEL_RIBBON_OPEN_CHAT: "Open lilbee chat",
LABEL_STATUSBAR_OPEN_SETTINGS: "Open lilbee settings",
ERROR_STREAM_IDLE: "server stopped sending events — check that lilbee is running",
LABEL_SKIP_SETUP: "Skip setup",
LABEL_OUR_PICKS: "Our picks",
LABEL_SECTION_INSTALLED: "Installed",
LABEL_SECTION_CHAT: "Chat",
LABEL_SECTION_EMBEDDING: "Embedding",
LABEL_SECTION_VISION: "Vision",
LABEL_SECTION_RERANK: "Rerank",
LABEL_PICK: "pick",
LABEL_FIT_FITS: "fits",
LABEL_FIT_TIGHT: "tight",
LABEL_FIT_WONT_RUN: "won't run",
LABEL_SWITCH_TO_LIST: "Switch to list view",
LABEL_SWITCH_TO_GRID: "Switch to grid view",
LABEL_VIEW_TOGGLE_CTA: "Switch to list view for the full catalog",
LABEL_NO_MODELS_FOUND: "No models match your filters.",
LABEL_DETAIL_VARIANTS: "Size variants",
LABEL_DETAIL_DESCRIPTION: "Description",
LABEL_DETAIL_DOWNLOADS: "Downloads",
LABEL_DETAIL_INSTALL_STATUS: "Status",
BUTTON_DRAWER_TOGGLE: "Toggle details",
LABEL_DRAWER_NO_SELECTION: "Focus a model to see its details.",
MODEL_INFO_TITLE: "Model info",
LABEL_MODEL_INFO_BTN: "Show details",
MODEL_INFO_TASK: "Task",
MODEL_INFO_PARAMS: "Parameters",
MODEL_INFO_CONTEXT: "Context window",
MODEL_INFO_QUANT: "Quantization",
MODEL_INFO_RAM: "Recommended RAM",
MODEL_INFO_DOWNLOADS: "Downloads",
MODEL_INFO_INSTALL_STATUS: "Status",
MODEL_INFO_HF_LINK_LABEL: "View on Hugging Face",
COMMAND_MODEL_INFO_CHAT: "Show info for active chat model",
COMMAND_MODEL_INFO_EMBED: "Show info for active embedding model",
NOTICE_NO_ACTIVE_MODEL: (task: string): string => `No active ${task} model is set.`,
LABEL_TASK: "Task",
LABEL_QUANT: "Quant",
LABEL_DOWNLOADS_COUNT: (count: string) => `${count} downloads`,
LABEL_SIZE_SMALL: "Small",
LABEL_SIZE_MEDIUM: "Medium",
LABEL_SIZE_LARGE: "Large",
DESC_SERVER_MODE: "How the lilbee server is managed",
DESC_MANAGED_BUILTIN: "Managed (built-in)",
DESC_EXTERNAL_MANUAL: "External (manual)",
DESC_SETUP_WIZARD: "Walk through initial setup again",
DESC_AUTO_OPEN_COCKPIT:
"When the plugin loads, open the chat view and task center side by side in the right sidebar. Disable if your right sidebar is busy with other plugins.",
DESC_SERVER_STATUS_CURRENT: "Current state of the managed lilbee server",
DESC_SERVER_CONTROLS_START_STOP: "Start, stop, or restart the managed server",
DESC_SERVER_VERSION_UNKNOWN: "Unknown",
DESC_SERVER_URL_HELP: "Address of the lilbee HTTP server",
DESC_SESSION_TOKEN_AUTO:
"Read automatically from the lilbee data directory on every request. Works when the server runs on the same machine as Obsidian. Set LILBEE_DATA if you use a non-default data directory.",
LABEL_MANUAL_TOKEN: "Session token",
DESC_MANUAL_TOKEN:
"Paste the server's session token (required for remote servers). When the lilbee server runs on this machine the plugin discovers the token automatically — leave this blank.",
DESC_SWITCH_MANAGED: "Stop using an external server and start the built-in one",
DESC_MODELS_HELP: "Browse the catalog for available models. Requires the lilbee server.",
DESC_REFRESH_MODELS: "Fetch available models from the server",
DESC_RESULTS_COUNT: "How many matching passages to return when you search or ask a question",
DESC_MAX_DISTANCE:
"How closely results must match your query. Lower = only very close matches, higher = broader results",
DESC_ADAPTIVE_THRESHOLD: "Automatically broaden the search if too few results are found",
DESC_RAG_SYSTEM_PROMPT:
"System prompt sent to the chat model when the answer is grounded in retrieved documents (Search mode with at least one match). Leave blank for the default.",
DESC_GENERAL_SYSTEM_PROMPT:
"System prompt sent to the chat model in Chat mode and when Search returns zero results. Leave blank for the default.",
DESC_GEN_TEMPERATURE: "Higher = more creative and varied responses, lower = more focused and predictable",
DESC_GEN_TOP_P: "Controls response diversity. Most users should leave this at the default.",
DESC_GEN_TOP_K: "Limits which words the AI considers. Most users should leave this at the default.",
DESC_GEN_REPEAT_PENALTY: "How strongly to avoid repeating the same phrases",
DESC_GEN_NUM_CTX: "Maximum amount of text the AI can consider at once",
DESC_GEN_SEED: "Set a number for reproducible responses. Leave blank for varied answers.",
DESC_GEN_MAX_TOKENS: "Hard cap on generated tokens per response (blank = no cap)",
DESC_GEN_MAX_REASONING_CHARS:
"Maximum reasoning characters before lilbee forces the model to answer (per-model overrides apply on top)",
DESC_GEN_MODEL_KEEP_ALIVE: "Seconds the loaded model stays warm between calls (0 = unload immediately)",
DESC_GEN_GPU_MEMORY_FRACTION: "Fraction of GPU memory the model is allowed to claim (0.1-1.0)",
DESC_WORKER_POOL_CALL_TIMEOUT:
"Per-call deadline for one worker-pool round-trip in seconds. Raise this for very large embed batches on slow machines",
DESC_WORKER_POOL_EAGER_START:
"Spawn every worker process when the lilbee server starts instead of on first use. Trades 1–3 seconds of cold-start per role for first-call latency.",
DESC_WORKER_POOL_MAX_IDLE:
"Shut a worker down after this many seconds idle to free RAM/VRAM. 0 disables idle reaping",
DESC_TESSERACT_TIMEOUT: "Per-page Tesseract timeout in seconds (used when no vision model is set)",
DESC_VISION_LOAD_BUDGET:
"Outer wall-clock budget for the vision-OCR pool drain in seconds. Includes load grace plus per-page time",
DESC_CANDIDATE_MULTIPLIER: "Candidate-pool multiplier over top_k before reranking",
DESC_MIN_RELEVANCE_SCORE: "Minimum RRF relevance score for hybrid search results (0.0 = no filter)",
DESC_MAX_CONTEXT_SOURCES: "Maximum unique sources contributing chunks to a single answer",
DESC_DIVERSITY_MAX_PER_SOURCE: "Maximum chunks accepted from any one source (caps source dominance)",
DESC_MMR_LAMBDA: "MMR lambda balancing relevance vs diversity (0 = max diversity, 1 = max relevance)",
DESC_CRAWL_MAX_DEPTH: "Optional ceiling on crawl depth. Leave blank for no cap.",
DESC_CRAWL_MAX_PAGES: "Optional ceiling on pages per crawl. Leave blank for no cap.",
DESC_CRAWL_TIMEOUT: "How long to wait for each page to load before giving up",
DESC_CRAWL_MEAN_DELAY: "Average delay between requests within a crawl, in seconds.",
DESC_CRAWL_MAX_DELAY_RANGE: "Random jitter added to the mean delay, in seconds.",
DESC_CRAWL_CONCURRENT_REQUESTS: "Maximum concurrent in-flight URLs within a single crawl.",
DESC_CRAWL_RETRY_ON_RATE_LIMIT: "Retry with backoff when servers return 429 or 503.",
DESC_CRAWL_RETRY_BASE_DELAY_MIN: "Minimum base backoff delay on rate-limit responses, in seconds.",
DESC_CRAWL_RETRY_BASE_DELAY_MAX: "Maximum base backoff delay on rate-limit responses, in seconds.",
DESC_CRAWL_RETRY_MAX_BACKOFF: "Upper bound on any single backoff wait, in seconds.",
DESC_CRAWL_RETRY_MAX_ATTEMPTS: "Retry count per URL before giving up.",
DESC_CHUNK_SIZE: "Document chunk size in tokens (changes invalidate the index)",
DESC_CHUNK_OVERLAP: "Tokens of overlap between adjacent chunks (preserves context across boundaries)",
DESC_EMBEDDING_MODEL: "The AI model used to understand your documents. Changing requires re-indexing.",
DESC_LLM_PROVIDER: "Auto picks the best available. Use External to connect to OpenAI, Claude, or other services.",
DESC_LLM_PROVIDER_AUTO: "Auto (recommended)",
DESC_LLM_PROVIDER_LOCAL: "Local only (llama-cpp)",
DESC_LLM_PROVIDER_EXTERNAL: "External (OpenAI, Claude, etc.)",
DESC_API_KEY: "Your API key for external AI services (OpenAI, Anthropic, etc.). Stored securely on the server.",
DESC_HF_TOKEN: "Needed for some models. Get one free at huggingface.co/settings/tokens",
DESC_LITELLM_BASE_URL: "The URL of your external AI service. Only needed when using the External backend.",
DESC_REINDEX_WARNING: "Changing {field} will require re-indexing all documents. Continue?",
DESC_EMBEDDING_REINDEX_WARNING: "Changing the embedding model will require re-indexing all documents. Continue?",
PLACEHOLDER_DEFAULT: "Default",
PLACEHOLDER_NOT_SET: "Not set",
PLACEHOLDER_SEARCH_MODELS: "Search models...",
PLACEHOLDER_SEARCH_DOCUMENTS: "Search documents...",
PLACEHOLDER_TYPE_SEARCH: "Type to search...",
PLACEHOLDER_ASK_SOMETHING: "Ask something...",
PLACEHOLDER_FILTER_SETTINGS: "Filter settings...",
PLACEHOLDER_HTTP_LOCALHOST: "http://127.0.0.1:7433",
PLACEHOLDER_SK: "sk-...",
PLACEHOLDER_HF_TOKEN: "hf_...",
PLACEHOLDER_PICK_VAULT_FILE: "Pick a vault file to add to lilbee...",
PLACEHOLDER_URL: "https://example.com",
PLACEHOLDER_0: "0",
PLACEHOLDER_50: "50",
PLACEHOLDER_30: "30",
LABEL_ENTER_QUERY: "Enter a query to begin.",
LABEL_NO_RESULTS: "No results found.",
ERROR_SEARCH_CONNECT: "Error: could not connect to lilbee server.",
TITLE_SEARCH: "Search knowledge base",
TITLE_MODEL_CATALOG: "Model Catalog",
TITLE_DOCUMENTS: "Documents",
TITLE_CRAWL_WEB_PAGE: "Crawl web page",
TITLE_DOWNLOAD_MODEL: "Download model?",
TITLE_WELCOME: "Welcome to lilbee",
TITLE_SERVER_MODE: "How do you want to run lilbee?",
TITLE_PICK_MODEL: "Pick a chat model",
TITLE_INDEX_VAULT: "Index your vault",
TITLE_ALL_SET: "You're all set!",
TITLE_MANAGED_RECOMMENDED: "Managed (recommended)",
TITLE_EXTERNAL: "External",
TITLE_RECOMMENDED: "Recommended",
STATUS_DOWNLOADING: "lilbee: downloading...",
STATUS_STARTING: "lilbee: starting...",
STATUS_READY: "lilbee: ready",
STATUS_READY_EXTERNAL: "lilbee: ready [external]",
STATUS_ERROR: "lilbee: error",
STATUS_AUTH_ERROR: "lilbee: auth error",
NOTICE_SERVER_UNREACHABLE: "lilbee: server unreachable",
STATUS_STOPPED: "lilbee: stopped",
STATUS_ADDING: "lilbee: adding {label}...",
STATUS_NOTHING_NEW: "lilbee: nothing new to add",
STATUS_ADD_CANCELLED: "lilbee: add cancelled",
STATUS_ADD_FAILED: "lilbee: add failed",
STATUS_SYNCED: "lilbee: synced — {summary}",
STATUS_SYNC_CANCELLED: "lilbee: sync cancelled",
STATUS_SYNC_FAILED: "lilbee: sync failed",
STATUS_SYNC_IN_PROGRESS: "lilbee: syncing…",
STATUS_DOCS_PENDING_SYNC: (n: number) => `lilbee: ${n} to sync`,
TOOLTIP_PENDING_SYNC_HINT: "Click to sync new documents",
STATUS_STARTING_SERVER: "Starting server...",
WIZARD_SERVER_PREPARING: "Preparing lilbee…",
WIZARD_SERVER_DOWNLOADING: "Downloading server — {msg}",
WIZARD_SERVER_STARTING: "Starting lilbee server…",
WIZARD_SERVER_READY: "Server ready. Loading models…",
WIZARD_EXTERNAL_TOKEN_HINT:
"Paste the session token from your lilbee server (found with `lilbee token`). Required for the plugin to authenticate against a remote server.",
PLACEHOLDER_MANUAL_TOKEN: "lilbee-…",
STATUS_CHECKING_CONNECTION: "Checking connection...",
STATUS_DOWNLOADING_MODEL: "Downloading {model}...",
STATUS_DOWNLOADING_MODEL_PCT: "Downloading {model}... {pct}%",
STATUS_PROCESSING_FILES: "Processing {current}/{total} files",
STATUS_TASK_FILE: "file {current}/{total}",
STATUS_TASK_SYNCING_FILE: "syncing {current}/{total}",
STATUS_TASK_EXTRACTING: "extracting {file} p{page}/{total}",
STATUS_TASK_EMBEDDING: "embedding chunk {chunk}/{total}",
STATUS_TASK_BATCH: (current: number, total: number, file: string, status: string) =>
`${status} ${current}/${total} ${file}`,
STATUS_TASK_CRAWLER_PREPARING: "Preparing crawler…",
STATUS_TASK_SETUP_PROGRESS: "chromium: {downloaded}/{total} MB",
STATUS_TASK_SETUP_PROGRESS_INDETERMINATE: "chromium: {downloaded} MB",
STATUS_INDEXING: "Indexing: {file}",
STATUS_DONE: "Done!",
STATUS_CRAWLING: "Crawling...",
STATUS_CRAWL_STARTED: "Crawl started...",
STATUS_CRAWLED_PAGES: "Crawled {count} pages — {url}",
STATUS_REMOVING: "Removing...",
STATUS_SETTING: "Setting...",
ERROR_UNKNOWN: "unknown error",
ERROR_CANNOT_CONNECT: "cannot connect to server",
ERROR_COULD_NOT_CONNECT: "lilbee: cannot connect to server",
ERROR_SERVER_CRASHED: "lilbee: server crashed after multiple restarts",
ERROR_SERVER_SHUTDOWN_FAILED: "lilbee: failed to stop the managed server",
ERROR_FAILED_DOWNLOAD: "lilbee: failed to download server",
ERROR_FAILED_START: "lilbee: failed to start server",
ERROR_FAILED_UPDATE: "lilbee: update failed",
ERROR_ALREADY_UPTODATE: "lilbee: already up to date",
NOTICE_SERVER_UPTODATE: (version: string) => `lilbee server is up to date (${version})`,
ERROR_COULD_NOT_CHECK: "lilbee: could not check for updates",
ERROR_COULD_NOT_REACH: "Could not connect to lilbee server. Is it running?",
ERROR_LOAD_CATALOG: "lilbee: failed to load catalog",
ERROR_LOAD_DOCUMENTS: "lilbee: failed to load documents",
ERROR_DELETE_DOCUMENTS: "lilbee: failed to delete documents",
ERROR_SWITCH_MODEL: "lilbee: failed to switch model",
ERROR_PULL_MODEL: "lilbee: failed to pull {model}",
ERROR_PULL_FAILED: "lilbee: failed to pull model",
ERROR_REMOVE_MODEL: "Failed to remove {model}",
ERROR_SET_MODEL: "Failed to set {model}",
ERROR_DELETE_MODEL: "Failed to delete {model}",
ERROR_SAVE_CHAT: "Failed to save chat",
ERROR_FILE_PICKER: "lilbee: could not open file picker",
ERROR_LOAD_MODELS: "Could not load models from server.",
ERROR_START_SERVER: "Failed to start server. Check the settings tab for details.",
ERROR_COULD_NOT_CONNECT_EXT: "Could not connect. Check the URL and make sure the server is running.",
ERROR_DOWNLOAD_FAILED: "Download failed. Please try again or pick a different model.",
ERROR_INDEXING_FAILED: "Indexing failed. You can retry from the settings tab.",
ERROR_SELECT_MODEL: "Please select a model first.",
ERROR_CRAWL_FAILED: "lilbee: crawl failed — {msg}",
ERROR_CRAWL_ERROR: "lilbee: crawl error — {msg}",
ERROR_CRAWLER_SETUP_FAILED:
"Crawler setup failed: {error}. Run 'make crawl-setup' in the lilbee repo or 'lilbee setup crawler' to retry.",
ERROR_CRAWLER_SETUP_FAILED_SHORT: "Chromium setup failed — see setup task",
ERROR_SERVER_UNREACHABLE: "Could not connect to lilbee server. Is it running?",
ERROR_STREAM: (msg: string) => `lilbee: ${msg}`,
ERROR_CHAT_FAILED: (reason: string) => `Chat failed: ${reason}`,
ERROR_RATE_LIMITED: (retryAfterSeconds: number | null) =>
retryAfterSeconds !== null
? `lilbee is busy with another request. Try again in ${retryAfterSeconds} seconds.`
: `lilbee is busy with another request. Try again in a moment.`,
ERROR_ADD_FAILED_DETAIL: (msg: string) => `lilbee: add failed — ${msg}`,
NOTICE_ALREADY_INGESTING: (source: string) =>
`lilbee: server is already ingesting ${source} — waiting for it to finish`,
NOTICE_NO_CHAT_MODEL: "lilbee: no chat model set — select one in settings",
NOTICE_MODEL_ACTIVATED: (model: string) => `Now using ${model}`,
NOTICE_PULL_CANCELLED: "lilbee: pull cancelled",
NOTICE_PULL_FAILED: "lilbee: failed to pull model",
NOTICE_NO_TOKEN_MANAGED: "lilbee: managed server didn't produce a session token — try restarting the plugin",
NOTICE_NO_TOKEN_EXTERNAL:
"lilbee: no session token — run 'lilbee token' and paste it in Settings → Session token, or set LILBEE_DATA",
NOTICE_SESSION_TOKEN_INVALID: "lilbee: session token invalid — paste a new one in Settings → Session token",
NOTICE_SESSION_TOKEN_INVALID_MANAGED:
"lilbee: managed server rejected its own token — restart the server from Settings → Switch to managed server, or open Status for logs",
NOTICE_QUEUE_FULL: "lilbee: too many tasks queued — wait for some to finish",
NOTICE_MODEL_ACTIVATED_FULL: (model: string) => `lilbee: ${model} pulled and activated`,
NOTICE_SET_MODEL: (type: string, model: string) => `${type} set to ${model}`,
NOTICE_FAILED_SET_MODEL: (type: string) => `Failed to set ${type} model`,
NOTICE_UPDATED: (field: string) => `lilbee: ${field} updated`,
NOTICE_FAILED_UPDATE: (field: string) => `lilbee: failed to update ${field}`,
NOTICE_FIELD_UPDATED: (field: string) => `lilbee: ${field} updated`,
NOTICE_FIELD_RESET: (field: string) => `lilbee: ${field} reset to default`,
NOTICE_FAILED_RESET: (field: string) => `lilbee: failed to reset ${field}`,
NOTICE_SETTINGS_RESET: "lilbee: settings reset to defaults",
NOTICE_FAILED_RESET_ALL: "lilbee: failed to reset settings",
NOTICE_REINDEX_REQUIRED: "lilbee: re-indexing required — starting sync...",
NOTICE_API_KEY_SAVED: "lilbee: API key saved",
NOTICE_HF_TOKEN_SAVED: "lilbee: HuggingFace token saved",
NOTICE_FAILED_HF_TOKEN: "lilbee: failed to save HuggingFace token",
NOTICE_FAILED_SAVE_KEY: "lilbee: failed to save API key",
NOTICE_LLM_UPDATED: "lilbee: LLM provider updated",
NOTICE_FAILED_LLM: "lilbee: failed to update LLM provider",
NOTICE_LITELLM_UPDATED: "lilbee: LiteLLM URL updated",
NOTICE_FAILED_LITELLM: "lilbee: failed to update LiteLLM URL",
NOTICE_EMBEDDING_UPDATED: "lilbee: embedding model updated",
NOTICE_FAILED_EMBEDDING: "lilbee: failed to update embedding model",
NOTICE_UPDATED_TO: (version: string) => `lilbee: updated to ${version}`,
NOTICE_STATUS: (docs: number, chunks: number) => `lilbee: ${docs} documents, ${chunks} chunks`,
NOTICE_DELETED: (count: number) => `lilbee: deleted ${count} documents`,
NOTICE_SAVED: (path: string) => `Saved to ${path}`,
NOTICE_REMOVED: (model: string) => `Deleted ${model}`,
NOTICE_SYNC_SUMMARY: (summary: string) => `lilbee: ${summary}`,
NOTICE_CRAWL_DONE: (pages: number) => `lilbee: crawl done — ${pages} pages`,
NOTICE_ENTER_URL: "lilbee: please enter a URL",
NOTICE_DOWNLOAD_CANCELLED: "lilbee: download cancelled",
NOTICE_INDEXING_CANCELLED: "lilbee: indexing cancelled",
NOTICE_NOTHING_SAVE: "Nothing to save",
NOTICE_NO_MODELS_INSTALLED: "No models installed.",
NOTICE_NO_MODELS_DESCRIPTION: "Download a model to start chatting with your notes",
NOTICE_CONFIRM_CANCEL:
"This operation is already in progress on the server. Canceling will hide it from the task center, but it may still complete. Continue?",
NOTICE_CONFIRM_REMOVE: (model: string) => `Remove ${model}? This deletes the model file from disk.`,
NOTICE_CONFIRM_DELETE_DOCS: (count: number) =>
`Delete ${count} document(s) from index and disk? This cannot be undone.`,
COMMAND_SEARCH: "Search knowledge base",
COMMAND_CHAT: "Open chat",
COMMAND_ADD_FILE: "Add current file to lilbee",
COMMAND_ADD_FOLDER: "Add current folder to lilbee",
COMMAND_SYNC: "Sync vault",
COMMAND_SYNC_RETRY_SKIPPED: "Retry skipped documents",
COMMAND_SYNC_REBUILD: "Rebuild index",
COMMAND_CATALOG: "Browse model catalog",
COMMAND_CRAWL: "Crawl web page",
COMMAND_DOCUMENTS: "Browse documents",
COMMAND_SETUP: "Run setup wizard",
COMMAND_TASKS: "Show task center",
COMMAND_STATUS: "Show status",
// Status modal
TITLE_STATUS: "lilbee Status",
LABEL_STATUS_DOCUMENTS: "Documents",
LABEL_STATUS_CHUNKS: "Chunks",
LABEL_STATUS_CHAT_MODEL: "Chat model",
LABEL_STATUS_OCR: "OCR",
STATUS_VALUE_OCR_AUTO: "Auto",
STATUS_VALUE_OCR_ON: "On",
STATUS_VALUE_OCR_OFF: "Off",
LABEL_STATUS_ARCHITECTURE: "Architecture",
LABEL_STATUS_CONTEXT_LENGTH: "Context length",
LABEL_STATUS_WIKI: "Wiki",
LABEL_STATUS_WIKI_PAGES: "Pages",
LABEL_STATUS_WIKI_DRAFTS: "Drafts",
LABEL_STATUS_WIKI_LAST_LINT: "Last lint",
LABEL_STATUS_NONE: "none",
LABEL_STATUS_NOT_AVAILABLE: "n/a",
LABEL_STATUS_ENABLED: "enabled",
LABEL_STATUS_DISABLED: "disabled",
COMMAND_ADD_TO_LILBEE: "Add to lilbee",
// Wiki view
LABEL_WIKI_VIEW: "lilbee Wiki",
LABEL_WIKI: "Wiki",
LABEL_WIKI_SUMMARIES: "Summaries",
LABEL_WIKI_CONCEPTS: "Concepts",
LABEL_WIKI_NO_PAGES: "No wiki pages yet",
LABEL_WIKI_SCORE: "Score",
LABEL_WIKI_GENERATED_BY: "Generated by",
LABEL_WIKI_SOURCES_COUNT: (n: number) => `${n} sources`,
// Citation modal
TITLE_CITATIONS: "Citation provenance",
LABEL_CITATION_FACT: "fact",
LABEL_CITATION_INFERENCE: "inference",
LABEL_CITATION_CURRENT: "current",
LABEL_CITATION_STALE: "stale",
// Drafts
TITLE_DRAFTS: (n: number) => `Wiki drafts (${n})`,
LABEL_DRAFT_REFRESH: "Refresh",
LABEL_DRAFT_ACCEPT: "Accept",
LABEL_DRAFT_REJECT: "Reject",
LABEL_DRAFT_NO_SELECTION: "Select a draft to see its diff.",
LABEL_DRAFT_NO_DIFF: "No diff (draft has no published counterpart).",
LABEL_DRAFT_KIND_DRIFT: "DRIFT",
LABEL_DRAFT_KIND_PARSE: "PARSE",
LABEL_DRAFT_KIND_COLLISION: "COLLISION",
LABEL_DRAFT_KIND_LOW_FAITH: "LOW FAITH",
LABEL_DRAFT_KIND_BAD_TITLE: "BAD TITLE",
LABEL_DRAFT_PUBLISHED: "pub",
LABEL_DRAFT_NEW: "new",
LABEL_DRAFT_FAITH_NA: "faith —",
LABEL_DRAFT_FAITH: (score: number) => `faith ${score.toFixed(2)}`,
LABEL_DRAFT_DRIFT: (pct: number) => `${pct}% drift`,
LABEL_NO_DRAFTS: "No pending wiki drafts.",
COMMAND_REVIEW_DRAFTS: "Review wiki drafts",
NOTICE_CONFIRM_DRAFT_ACCEPT: (slug: string) =>
`Accept draft "${slug}"? This overwrites the published page and re-indexes its chunks.`,
NOTICE_CONFIRM_DRAFT_REJECT: (slug: string) => `Reject draft "${slug}"? The draft file will be deleted.`,
NOTICE_DRAFT_ACCEPTED: (slug: string, chunks: number) => `Accepted ${slug} (${chunks} chunks indexed).`,
NOTICE_DRAFT_REJECTED: (slug: string) => `Rejected ${slug}.`,
NOTICE_DRAFT_ACTION_FAILED: "Draft action failed. Check the server log.",
ERROR_LOAD_PAGE: "Failed to load page.",
ERROR_LOAD_CITATIONS: "Failed to load citations.",
ERROR_LOAD_DRAFTS: "Failed to load drafts.",
ERROR_LOAD_DIFF: "Failed to load diff.",
LABEL_NO_CITATIONS: "No citations found.",
// Source preview modal (external server / non-vault sources)
TITLE_SOURCE_PREVIEW: "Source preview",
LABEL_PREVIEW_CLOSE: "Close",
LABEL_PREVIEW_SAVE_TO_VAULT: "Save to vault",
LABEL_PREVIEW_OPEN_IN_VAULT: "Open in vault",
TOOLTIP_PREVIEW_SAVE_SOON: "Coming soon — available once the server supports vault storage.",
ERROR_PREVIEW_INVALID_SOURCE: "Cannot preview: source reference is empty.",
ERROR_PREVIEW_LOAD: (reason: string) => `Failed to load source: ${reason}`,
ERROR_PREVIEW_UNSUPPORTED: (mime: string) =>
`Cannot preview content of type "${mime}". Open the original file in your vault to view it.`,
// Lint
TITLE_LINT_RESULTS: "Wiki lint results",
LABEL_LINT_ISSUES: (n: number, pages: number) => `${n} issues across ${pages} pages`,
LABEL_LINT_STATUS_VALID: "valid",
LABEL_LINT_STATUS_STALE: "stale hash",
LABEL_LINT_STATUS_DELETED: "source deleted",
LABEL_LINT_STATUS_MISSING: "excerpt missing",
LABEL_LINT_STATUS_MODEL: "model changed",
// Wiki settings
LABEL_WIKI_SECTION: "Wiki (beta)",
LABEL_WIKI_NOT_ENABLED: "Wiki (not enabled)",
LABEL_WIKI_ENABLE_TOGGLE: "Enable wiki",
DESC_WIKI_ENABLE_TOGGLE: "Generate AI-written summaries of your documents. This feature is in beta.",
LABEL_WIKI_STATUS: "Wiki status",
LABEL_WIKI_PRUNE_RAW: "Remove source duplicates",
LABEL_WIKI_FAITHFULNESS: "Summary accuracy",
LABEL_WIKI_SEARCH_MODE: "Default search mode",
LABEL_WIKI_RUN_LINT: "Check wiki health",
LABEL_WIKI_RUN_PRUNE: "Clean up wiki",
DESC_WIKI_NOT_ENABLED:
"Enable wiki on the server with LILBEE_WIKI=true and install dependencies with pip install lilbee[wiki]",
DESC_WIKI_PRUNE_RAW: "After wiki summaries are created, remove the original text chunks that were summarized",
DESC_WIKI_FAITHFULNESS: "How accurate wiki summaries must be. Higher = stricter quality, lower = more content",
DESC_WIKI_RUN_LINT: "Scan wiki pages for broken references, missing sources, or outdated content",
DESC_WIKI_RUN_PRUNE: "Remove wiki pages that are outdated or no longer have valid sources",
DESC_WIKI_SEARCH_MODE: "Which chunks to search by default",
LABEL_WIKI_SYNC_TO_VAULT: "Sync wiki to vault",
DESC_WIKI_SYNC_TO_VAULT:
"Write wiki pages as files in your vault so they appear in graph view, search, and backlinks",
LABEL_WIKI_VAULT_FOLDER: "Wiki vault folder",
DESC_WIKI_VAULT_FOLDER: "Folder in your vault where wiki pages are written",
NOTICE_WIKI_SYNC: (written: number, removed: number) =>
`lilbee: wiki sync — ${written} written, ${removed} removed`,
// Search mode
LABEL_SEARCH_ALL: "All",
LABEL_SEARCH_WIKI: "Wiki",
LABEL_SEARCH_RAW: "Raw",
// Wiki tasks/notices
NOTICE_WIKI_LINT_DONE: (issues: number) => `lilbee: lint complete — ${issues} issues found`,
NOTICE_WIKI_GENERATE_DONE: (source: string) => `lilbee: wiki generated for ${source}`,
NOTICE_WIKI_PRUNE_DONE: (archived: number) => `lilbee: pruned ${archived} pages`,
NOTICE_WIKI_PRUNE_CONFIRM: "This will archive wiki pages with broken citations. Continue?",
// Wiki commands
COMMAND_WIKI: "Browse wiki",
COMMAND_WIKI_LINT: "Run wiki lint",
COMMAND_WIKI_GENERATE: "Generate wiki for current file",
WIZARD_INTRO_DESC: "lilbee turns your Obsidian vault into a searchable knowledge base powered by AI.",
WIZARD_INTRO_STEPS: "This wizard will help you:",
WIZARD_STEP_CHOOSE_SERVER: "Choose where lilbee runs (this machine, or an existing server)",
WIZARD_STEP_CHOOSE_MODEL: "Choose an AI model that fits the host's RAM",
WIZARD_STEP_INDEX: "Index your vault so you can search and chat",
WIZARD_LOCAL_ONLY_MANAGED: "Managed mode runs on this machine — your notes never leave your laptop.",
WIZARD_LOCAL_ONLY_EXTERNAL:
"External mode talks to your existing lilbee server. Your notes stay on whichever host runs it.",
WIZARD_MODEL_HELP:
"This is the AI that answers your questions about your notes. Bigger models are smarter but need more RAM and disk space.",
WIZARD_SYSTEM_RAM: "Your system: {ram} GB RAM",
WIZARD_SYNC_HELP:
"lilbee needs to read your notes once to make them searchable. This happens locally on your machine.",
WIZARD_SYNC_HINT: "After this, new and changed files are indexed automatically (or manually, your choice).",
WIZARD_STEP_BADGE: "Step {num} · {label}",
WIZARD_PROGRESS_BACKGROUND: "Downloads continue in the background — track any time in the Task Center.",
WIZARD_WIKI_TRADEOFFS_LABEL: "See the tradeoffs",
WIZARD_SUMMARY_HEADING: "Setup complete",
WIZARD_SUMMARY_MODEL: "Chat model: {model}",
WIZARD_SUMMARY_FILES: "{count} files indexed",
WIZARD_SUMMARY_PROCESSED: "{count} files processed",
WIZARD_TIPS: "What to try next",
WIZARD_TIP_CHAT: "Open the chat panel to ask questions about your notes",
WIZARD_TIP_SEARCH: "Use the search command to find specific content",
WIZARD_TIP_DRAG: "Drag files into the chat to add context",
WIZARD_CHANGE_SETTINGS: "You can change models and settings anytime in the lilbee settings tab.",
WIZARD_MANAGED_DESC: "lilbee starts and stops automatically with Obsidian. No terminal needed.",
WIZARD_EXTERNAL_DESC: "You run the lilbee server yourself. For advanced users or shared setups.",
WIZARD_MIN_RAM: "Minimum {ram} GB RAM",
WIZARD_STATUS_STARTING: "Starting...",
WIZARD_SELECT_MODEL: "Please select a model first.",
// Wiki wizard step
WIZARD_WIKI_TITLE: "Wiki (optional, experimental)",
WIZARD_WIKI_DESC:
"Wiki pages are AI-written summaries of your documents — think Wikipedia articles derived from what you already have. Generation runs on-demand from the command palette or Settings; enabling it here just unlocks those controls.",
WIZARD_WIKI_EXPERIMENTAL_HEADING: "Read this first",
WIZARD_WIKI_EXPERIMENTAL_INTRO: "Two caveats before you flip this on:",
WIZARD_WIKI_EXPERIMENTAL_QUALITY:
"Everything lands as a draft first. Every page is gated by a title/body coherence check and a cosine-similarity score against the source chunks, and ships as a reviewable draft — accept, edit, or reject from the drafts panel before anything becomes a published wiki page.",
WIZARD_WIKI_EXPERIMENTAL_SLOW:
"Generation takes time and ties up the chat LLM. Pages that share a primary source are batched into one model call, so a 200-page vault over ~30 sources is closer to ~30 batched calls than 200 sequential ones — but it's still blocking. Plan to run it during a break, not in the middle of research.",
WIZARD_WIKI_PROS_HEADING: "What it adds",
WIZARD_WIKI_PRO_SUMMARIES: "Summarized, structured overviews of your documents",
WIZARD_WIKI_PRO_CROSSREFS: "Related concepts become discoverable through cross-references",
WIZARD_WIKI_PRO_ANSWERS: "Chat and search can reference wiki pages for more coherent answers",
WIZARD_WIKI_CONS_HEADING: "Worth knowing",
WIZARD_WIKI_CON_TOKENS: "Each page run uses LLM compute / API tokens",
WIZARD_WIKI_CON_ACCURACY: "Small models can hallucinate — always verify against source",
WIZARD_WIKI_CON_SEARCH: "Search may prioritise wiki chunks over raw ones if you include both",
WIZARD_WIKI_CON_COMPLEXITY: "Adds a second index shape to maintain alongside raw embeddings",
WIZARD_WIKI_ENABLE: "Enable wiki (on-demand generation)",
WIZARD_WIKI_DISABLE: "Skip for now (recommended)",
WIZARD_WIKI_ENABLE_DESC:
"Unlocks wiki commands + Settings. Nothing generates automatically. Proceed with caution — this is experimental.",
WIZARD_WIKI_DISABLE_DESC:
"Use raw document search only. You can enable the wiki later from Settings → Wiki, or re-open this wizard from Settings → Setup wizard.",
TITLE_PICK_EMBEDDING: "Pick an embedding model",
WIZARD_EMBEDDING_HELP:
"The embedding model converts your documents into searchable vectors. The default works well for most users.",
WIZARD_EMBEDDING_RECOMMENDED: "Recommended",
WIZARD_FILE_PICKER_VAULT: "From vault",
WIZARD_FILE_PICKER_DISK: "Files from disk",
WIZARD_FOLDER_PICKER_DISK: "Folder from disk",
WIZARD_CRAWL_WEB: "Crawl web page",
} as const;
export const FILTERS = {
TASK: {
ALL: "",
CHAT: "chat",
EMBEDDING: "embedding",
VISION: "vision",
RERANK: "rerank",
} as const,
SIZE: {
ALL: "",
SMALL: "small",
MEDIUM: "medium",
LARGE: "large",
} as const,
SORT: {
FEATURED: "featured",
DOWNLOADS: "downloads",
NAME: "name",
SIZE_ASC: "size_asc",
SIZE_DESC: "size_desc",
} as const,
} as const;
export const TASK_LABELS = {
[MODEL_TASK.CHAT]: "Chat",
[MODEL_TASK.VISION]: "Vision",
[MODEL_TASK.EMBEDDING]: "Embedding",
[MODEL_TASK.RERANK]: "Rerank",
} as const;
export const CATALOG_FILTERS = {
TASK: [
[FILTERS.TASK.ALL, MESSAGES.LABEL_ALL_TASKS],
[FILTERS.TASK.CHAT, TASK_LABELS[MODEL_TASK.CHAT]],
[FILTERS.TASK.EMBEDDING, TASK_LABELS[MODEL_TASK.EMBEDDING]],
[FILTERS.TASK.VISION, TASK_LABELS[MODEL_TASK.VISION]],
[FILTERS.TASK.RERANK, TASK_LABELS[MODEL_TASK.RERANK]],
] as const,
SIZE: [
[FILTERS.SIZE.ALL, MESSAGES.LABEL_ALL_SIZES],
[FILTERS.SIZE.SMALL, MESSAGES.LABEL_SIZE_SMALL],
[FILTERS.SIZE.MEDIUM, MESSAGES.LABEL_SIZE_MEDIUM],
[FILTERS.SIZE.LARGE, MESSAGES.LABEL_SIZE_LARGE],
] as const,
SORT: [
[FILTERS.SORT.FEATURED, MESSAGES.LABEL_FEATURED],
[FILTERS.SORT.DOWNLOADS, MESSAGES.LABEL_DOWNLOADS],
[FILTERS.SORT.NAME, MESSAGES.LABEL_NAME],
[FILTERS.SORT.SIZE_ASC, MESSAGES.LABEL_SIZE_ASC],
[FILTERS.SORT.SIZE_DESC, MESSAGES.LABEL_SIZE_DESC],
] as const,
} as const;
|