8000 Releases · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

Releases

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 12:26
  • Installing an update from the web app works again in a microsandbox. Back up and install stopped at the
    backup with Permission denied: '/data/.lens/apt/lock', and so did every backup there, because backups had started
    keeping everything under /data, including the Lens the microsandbox runs (.lens). Backups now keep only Lens's
    own files: hidden folders at the top of data_dir, and SurrealDB's own folder (the backup's export already holds the
    database), are left out, and a file Lens can't read is left out with a warning instead of stopping the backup. When
    backing up stops an upgrade, Settings now marks Back up the database as the step that failed
    (Backups).
  • The Ask button no longer covers buttons. The floating Ask button at the bottom right used to sit on whatever was
    there, such as Import on the Import page. Now, when a button or field is under it and scrolling can't move it clear
    (a row of buttons pinned to the bottom of the screen, or the last button on a page scrolled to its end), the Ask
    button rises above it, and steps out of sight when there's no room to rise. Dialogs, drawers and toasts drawn over
    it don't move it. The clicks survey now fails a journey whose control the Ask button covers, and checks every page
    for it (Chat on any page).
  • Google Calendar as a sensor. Add a Google Calendar connection on the Sources page (or POST /api/v1/sources
    with type gcal): each calendar is a folder and each event becomes text, as an iCal feed's do, read-only through
    Google's Calendar API. It signs in as a Google account (an OAuth client's authorized user JSON) or as a service
    account, which reads the calendars shared with it or, in Google Workspace, a user's calendars through domain-wide
    delegation. Calls to Google show in the activity ledger
    (Google Calendar).
  • Find a note. The Notes page has a search box that finds notes by the words in their title, summary or text (the
    pages of recordings and entities too), with the words around each match marked, and Enter opens the first. A filter
    shows only Projects, Areas, Resources or Archive, and each note says which notes it's inside. Jump to (⌘K) finds notes
    as well. GET /api/v1/notes/search; fi 8000 nd_notes gives agents the words around each match
    (Finding notes).

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 11:07
  • The assistant always answers. When a question used up its tool steps (ai.max_steps), the assistant used to stop
    with "I ran out of steps before finishing". Now it's asked to answer from what it found, with the tools off, and says
    what it didn't get to check; a reply with nothing in it is asked again the same way. It also knows its step budget up
    front, so it looks things up in fewer rounds, and the same lookup twice in one answer points it at the result it
    already has instead of running it again (The assistant's tools).
  • Backups hold Lens's files too. Each backup now also keeps the files under data_dir (uploads, objects, media,
    frames, renditions, web pages, reports, exports, podcasts, certificates), and restoring one puts them back. Files
    that haven't changed since the previous backup are hard links, so a backup takes only the room of what changed; the
    first one takes as much room as the files. Downloads and copies on a storage connection carry them as well. Older
    backups show database only (Backups).
  • Analytics. A new Analytics page (admins) shows active people per day, week and month, stickiness, churn rate,
    retention by sign-up week and feature use, worked out on the server from the activity ledger and sign-ins. Each day
    Lens also keeps a few counted events (install, daily active, feature used, upgrade, inactive, return). They can
    optionally go to your own Google Analytics 4 property too; that is off by default and is set in Settings → Usage
    analytics or the setup wizard (Usage analytics).
  • Merge entities in fewer clicks, and undo instead of confirm. On the Entities page, tick rows and the bar at the
    bottom merges them into one (the one on the fixed list, else the most mentioned) or gives them one type. An entity's
    side panel has Merge, a find box where Enter merges the entity picked into it, and Maybe the same, its likely
    doubles with Merge and Not the same. Renaming an entity to another's name offers to merge them. Merges, type
    changes and hiding say what happened with Undo (Entities).
  • Edit and merge from the graph. In the graph explorer, an entity's or topic's panel has Edit, which opens the
    same editor as its own page, and an entity's has Merge and Maybe the same. The node menu has Edit… and
    Merge into another…, which merges the node into the one clicked next (entities and speakers of one namespace;
    entities of two namespaces are linked as the same thing), each with Undo (The graph).
  • Undo topic merges and deletes. Merging or deleting a topic happens at once, with Undo on its notice instead
    of a confirm step: the topics come back with their labels, recordings, broader and related topics and pages. A
    topic's drawer has a find box to merge another topic in, and topics merge on the graph canvas too. The API answers
    a merge or delete with an undo id (POST /api/v1/topics/changes/{id}/undo) and lists recent ones
    (Topics).
  • Edit entities from a recording. In a recording's Entities tab, the pencil next to an entity opens its side
    panel, so editors rename, retype, hide or merge it without leaving the recording
    (Entities).
  • Agents edit and merge entities and topics. The MCP server has edit_entity, edit_topic, merge_topics,
    delete_topic, undo_topic_change and undo_graph_change (with a write-scope token and editor access), and the
    assistant proposes topic merges, renames, definitions and deletes for the person to approve
    (propose_topic_change) (MCP, Topics).

Features

  • settings: group the sections and find a setting by name (#390)
  • settings: fold the options most people leave as they are (#392)
  • nav: name the navigation's groups (#394)

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 06:15
  • Evidence PDFs hold everything Lens found. After each resource's own file come pages of what Lens knows about
    it: its details, metadata and custom fields, tags, topics, the summary and analysis models wrote, its sections,
    speakers, emotion and sounds (overall, by speaker, and marked on each transcript line, such as "(Happy, Laughter)"),
    entities, keywords, the faces, objects, descriptions and text on screen seen in it, and the places and dates found
    in it. Notes, highlights and comments people shared go in when picked. Export › Choose what goes in it… (and the
    button beside a collection's Evidence PDF) picks the parts, and include does the same in the API
    (Evidence PDFs).

  • Roles with permissions. Viewer, editor and owner are now sets of permissions (read, edit, import, process,
    curate, share, publish, remove, members, manage), and admins make custom roles from them in Admin → Roles, given per
    namespace like the built-in ones. Existing access is unchanged. Someone who manages members but isn't an admin gives
    only roles they hold all of (Access).

  • Invite and remove people. Making an account in Admin → People now emails the sign-in link as an invitation when
    mail is set up, and the link is still shown to share yourself. Remove for good ends every way someone signs in,
    takes their roles and their private chats, notes and views, and keeps what they shared under their name; their email
    can be invited again (Authentication). The assistant gets list_people,
    invite_person and change_person, which always wait for an admin's approval.

  • Reachable from the network, and the edition, changed in Settings. Settings › Access & embedding has Reachable
    from other devices on this network
    , and Settings › Components the edition: Full (LibreOffice and Chromium, to read
    Office files, web pages and emails) or Lean. Changing either says what will happen and applies with one button: the
    machine's upgrade agent runs the install again for the version running, and Lens restarts. Before, the install line
    had to run again with LENS_PUBLIC or LENS_TARGET; without an agent, Settings shows that line. Agents use
    GET/PUT /api/v1/admin/install and the MCP tools install_settings and set_install_settings
    (Updates).

  • NSFW classification, with a model on your server. Turn it on in Settings → NSFW for every namespace, or on a
    namespace's page for that one (off by default). The new nsfw step scores a video's sampled frames, a document's
    pages or an image with an Apache-2.0 model (fetched on first use, about 105 MB with ONNX Runtime) and flags the
    resource when a picture scores at least the threshold. Flagged resources are blurred until someone chooses to see
    them, left out of the Library, or shown with a label; editors can mark one NSFW or not by hand, and Classify
    existing
    classifies what was there before. Agents use it through the API and MCP (nsfw_settings, set_nsfw,
    mark_nsfw) (NSFW classification).

  • Apache Tika. Lens can use an Apache Tika server (--profile tika in the compose files, or one of your own, set
    in Settings → Documents). Documents nothing here can make into a PDF, such as Word files on a lean server or a
    Raspberry Pi, are read by Tika as text, and every document's own title, authors, language and dates are read as
    Dublin Core terms. Off until a Tika server is set (Configuration).

  • New pipelines, workflows, templates and API tokens come with a name. The web app guesses one from what you're
    making ("Transcribe to report", "Recording workflow", "Prompt template 2", "Read only token"), as it already did for
    routines, so making one takes no typing; type a name to choose your own. The pencil next to the name renames it
    later, and PATCH /api/v1/pipelines/{id}, /templates/{id} and /tokens/{id} rename them through the API.

  • Long recordings go to a speech provider in pieces that fit it. A recording longer or larger than a provider takes
    in one request is cut at pauses into pieces within its limits, and their transcripts are joined back into one, where
    only OpenAI-compatible servers had ten-minute parts before. Each provider starts with its published limits (10 hours
    for ElevenLabs and AssemblyAI, 2 GB for Deepgram, 25 MB for OpenAI), editable in Settings → Speech providers
    (docs).

  • Running the install line again keeps .env readable only by you. Each update rewrote .env with the shell's
    default permissions, so after an update its secrets could be read by other users of the machine. It is now written
    for its owner alone, and an install an earlier update left open is closed again the next time the line runs.

  • A microsandbox install whose keys don't open its database comes up when the line runs again. A reinstall made
    before 0.8.1, after ~/lens was deleted, wrote new keys but kept the earlier install's lens-data volume, and every
    update after it kept both: its API stopped at every start with SURREAL_USER/SURREAL_PASS don't match. The sandbox
    now checks that the keys in .env open the database before it starts the API, and when they don't, the install line
    moves Lens to a volume of its own (lens-data-2, kept in .env as LENS_VOLUME) and starts it there. The earlier
    volume is left as it is (microsandbox).

  • Lens on a phone. Everything works at phone width now: the namespace switcher is at the top of the menu, Import
    is in the top bar, Settings opens its sections as a list instead of a row to swipe through, the graph's filters close
    after a pick, Copy no longer covers webhook addresses, sensors and connections read as cards, and Save and the other
    form buttons stay in sight above the Ask button. A recording's pipeline steps no longer make its page wider than the
    screen. On a phone the clicks survey goes from 2 features that couldn't be done to none, and from 15 swipes to 2.

  • Similar content. Every resource has a Similar tab, and selecting text anywhere (a transcript, a page, a
    title, a graph label) shows the resources most like it, each citing the passages, words, topics and entities they
    share, with Find more for the full list. Topics, entities and graph nodes list similar content too, and the
    assistant and the MCP server can ask for it (find_similar). It works without search by meaning, by key words,
    topics and entities (Processing).

  • Watch a folder in four clicks. Watch a local folder on the Sensors page opens this machine's allowed
    folders, and each has a Watch button, so it no longer has to be opened first. Adding This machine as a
    connection skips the test-and-name step unless its test fails (Sensors).

  • MCP servers that run as a program. Most MCP servers in marketplaces run as a program (npx or uvx), not on
    the network. Admins can now add one as an MCP server extension with its command, args and env, as in Claude's
    .mcp.json, and a plugin's such servers come along when an admin installs it. They run in the MCP runner, an opt-in
    container with none of Lens's data or keys (COMPOSE_PROFILES=mcp), start on first use and stop after 15 idle
    minutes (Assistant).

Features

  • updates: upgrade page with live steps, and roll back when the new version doesn't start (#262)
  • setup: ask only what has no default in the first-run wizard (#376)
  • settings: private networks for web pages and feeds in Settings → Documents (#378)
  • settings: a Hugging Face token in Settings → Components (#379)

Fixes

  • install: install on a computer without Docker or KVM access, and run the line again there (#368)

Dependencies

  • move to lucide-react 1.x (#369)
  • move to Tailwind CSS 4 (#377)

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 02:36
  • The installer stops waiting when Lens can't start, and shows why. A microsandbox install that couldn't start Lens
    waited 30 minutes at "Waiting for the web app..." and then named only a command to run. It now lists the sandbox's own
    steps as they happen, and stops as soon as a step fails, the sandbox stops or a part of Lens keeps stopping, with the
    last lines Lens logged; the web installer shows them under the reason. Running the line again stops the running
    sandbox first and waits for its port (microsandbox).

  • A microsandbox install after the install folder was deleted comes up. The data volume (lens-data) outlives
    ~/lens, but its database opens only with the keys in that folder's .env. A first install made new keys, mounted
    the earlier volume anyway, and waited 30 minutes for a web app whose API couldn't open the database. It now leaves
    that volume as it is and starts on one of its own (lens-data-2, kept in .env as LENS_VOLUME); put the earlier
    .env back to use the earlier data, or remove it with msb volume rm lens-data
    (microsandbox).

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 10:00
  • A microsandbox's full edition installs LibreOffice and Chromium the first time they're needed. They were
    installed at every start, so a first start downloaded them before it built Lens, whether or not anything used them.
    A sandbox now starts without them; the first Office file, email or web page that needs one waits while it's
    installed, and later starts install it again in the background from the packages kept in the volume. An install that
    already had them keeps them (microsandbox).

  • A microsandbox install gets past name lookups that fail. The first build in a microsandbox could stop at the
    backend's packages with dns error ... No address associated with hostname when this machine's resolvers didn't
    answer inside the sandbox. The sandbox now waits for the names it downloads from, looks them up with public
    resolvers (1.1.1.1 and 9.9.9.9; LENS_DNS_FALLBACK changes or turns that off) when this machine's don't answer
    there, and runs each download step up to three times (microsandbox).

  • Running the install line again keeps the lean edition. An install made lean (LENS_TARGET=lean, or the web
    installer's pick on a computer with less than 4 GB of memory) became full again when the line ran without
    LENS_TARGET, so the next start installed LibreOffice and Chromium. It now keeps the edition the install has, as it
    does the port and the network setting (Get started).

  • A Mac app. Lens.app (Lens-macOS-arm64.dmg, Apple silicon) installs Lens in the web installer shown in its
    window, with microsandbox inside it so no Docker is needed, then lives in the menu bar: open, start, stop and update
    Lens, and show its logs. Lens itself opens in the browser, where passkeys work
    (Get started). It updates itself from each release, checking the update's
    signature, once the repository has an update key (desktop/README.md).

  • Slack, built in. Settings › Slack creates a Slack app from Lens's manifest in one click; paste its two tokens
    and the assistant answers direct messages, what's said to it in channels and /lens …, over Socket Mode: no
    Matterbridge, no public address. Voice clips are heard, files are held for the assistant to import, and everything
    Matterbridge rooms do works there (Chat rooms).

  • The file tree over NFS. Settings → NFS share serves the archive's folders and files (namespaces, collections,
    topics and entities as folders, assets as files) read-only over NFS, to the networks you allow, showing what one
    chosen account sees. Off until turned on; published on port 12049 of the host (File shares).

  • The graph as files over SMB. Settings → SMB share serves the file tree read-only to Finder, Linux and (on port
    445) Windows: each person signs in with a file access key and sees what the web app shows them, from the networks
    an admin allows. Off by default; the SMB server (impacket) is fetched when it's turned on (SMB share).

  • A spending limit from the start. The setup wizard has a Budget step, and the web installer asks for one with a
    cloud provider: a scale for a hard limit on everything Lens spends on AI, with a soft limit at 80% that warns. At
    the hard limit runs wait (or are skipped) and paid model calls stop until it goes up; models on your own computer
    keep working. The model's price comes with it, so the spending is counted. It's the new all budget, changeable in
    Settings › Budgets (Budgets). The web installer now asks only the
    essentials: the folder, port and network under Advanced, the optional extras under More options on the
    review.

  • Cloud model presets. Settings → LLM provider and the setup wizard offer OpenAI, Anthropic, Google Gemini,
    OpenRouter, Groq, Mistral and DeepSeek next to the model servers found nearby: one click fills in the address and a
    model and puts the cursor in the API key field, with a link to where the provider hands out keys, so switching to a
    cloud model is a click and a paste. Agents get the same list from GET /api/v1/setup/llm/providers and the
    assistant's find_model_servers tool (Cloud model providers).

  • The graph as files. Graph nodes are folders, nested along its links: collections inside collections, topics
    inside their broader topics, entities by type. Each folder holds its assets' files, with a .json sidecar of
    metadata and a .txt of the text; everyone sees what the web app shows them. Browse and read it through the API
    (/api/v1/tree) and the MCP tools list_files and read_file (The graph as files).
    An NFS share is in progress.

  • HTTPS with automatic certificates. Lens can serve itself at https:// your domain with a certificate it gets
    and renews on its own from Let's Encrypt or ZeroSSL (or any ACME authority), proving the domain over HTTP, TLS-ALPN
    or DNS, with Cloudflare, Route 53 and the other caddy-dns providers, so wildcards and machines the internet can't
    reach work too. Run the install line with LENS_HTTPS=1 to open ports 443 and 80, then set it up with
    PUT /api/v1/settings/https; the Settings page comes next. Off by default (HTTPS).

  • Budget meter and Costs page. The top bar shows what the namespace picked spent against its budget, used and
    left, highlighted when near or over, and follows the namespace switcher; it opens the details for a day, week or
    month. Costs in the left menu shows spend by day, model and resource, and sets the namespace's budget
    (Budgets).

  • The graph over S3 and WebDAV. Turn on Settings, File shares, and any S3 client (rclone, Cyberduck, the AWS CLI) or
    WebDAV client (Finder, Windows Explorer, file managers) lists and reads the graph as folders and files,
    read-only, with access keys each person makes on their API tokens page (S3,
    WebDAV). Docker publishes S3 on port 9555 (LENS_S3_PORT) and WebDAV on 9556
    (LENS_WEBDAV_PORT), where the web app is.

  • Ask Lens from your browser. The web clipper extension has the Lens assistant in a side panel: Ask Lens in
    its popup or on the right-click menu. It signs in with one click through Lens's own sign-in page (OAuth, nothing to
    copy), and the conversations are the same ones Lens's chat shows, with cited answers, the steps taken and approvals.
    While the panel is open, the assistant can use that browser: open, read, click, type and download files into the
    conversation, only on sites you allow, asking before anything that sends, deletes, buys or posts, never typing
    passwords or card numbers, and showing each action as it happens. Once it has read a page, opening an address or
    typing text you didn't write asks you first too (The assistant in your browser).

  • Telegram, built in. Paste a bot token from @Botfather in Settings › Telegram and the assistant answers there:
    no Matterbridge, no public address. It talks only to people you let in (one click on the settings page), hears
    voice notes, takes files for the assistant to import, and does everything it does in Matterbridge rooms
    (Chat rooms). Chat apps now share one channel layer, so the next one is an
    adapter.

  • The assistant by email. Give it an address of its own in Settings › Assistant email (the address and an app
    password; the servers are guessed) and the people you let in can email or forward things to it: it answers by
    email in the same thread, lists the excerpts it cites with links, and imports what's attached, a forwarded email
    whole. It answers only mail their provider vouched for (DMARC, DKIM or SPF), never automatic mail, and holds a
    stranger's mail until you let them in. lens+pods@… or a routing rule sends mail to a namespace's assistant
    (The assistant by email).

Features

  • assistant: mark third-party text as data in the model's prompts (#302)
  • backups: restore, download, any schedule and copies to an rclone connection from the web app (#263)
  • assistant: let the assistant use a browser connected through the Lens side panel (#311)
  • clipper: build the web clipper for Firefox (#282)
  • assistant: ask before sending data out once an answer read third-party text (#309)
  • monitoring: Prometheus, node-exporter and Grafana as an opt-in compose profile (#297)
  • install: install with the defaults in one click; the API token form opens itself (#331)
  • assistant: flag third-party text that reads like instructions to an AI (#329)
  • ui: new pipelines and routines are named for you and Enter creates them; Enter in a note's title goes to its first line (#336)
  • bridge: break up links a chat-room answer built from what it read (#338)
  • mcp: hand agents what the archive says as data (#343)
  • audit: log what Lens caught of prompt injection (#344)
  • assistant: an optional local classifier for prompt injection ([#347](https://github.co...
Read more

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 21:12
  • Prometheus metrics. Lens can serve /metrics for Prometheus and Grafana: jobs by status and pipeline, imports,
    model calls, tokens, cost and failures by model, budgets, workers and disk. Off by default; turned on in Settings →
    Telemetry (or LENS_PROMETHEUS=on), it answers only a scraper with the scrape token, and follows LENS_BIND. A
    sample Grafana dashboard comes with it (Prometheus).

  • Install on Windows, or by double-clicking. install.ps1 installs Lens on Windows: it gets Python 3 if needed and
    opens the web installer, which installs Docker Desktop (and WSL) and runs Lens in it. Each release now carries
    launchers that need no terminal at all: Install Lens.app for macOS, Install Lens.cmd for Windows and
    Install Lens.desktop for Linux, each opening the web installer
    (Get started).

  • Install in the browser. On a first install at a terminal, the one-line install opens a web installer: it shows
    what the computer has and what Lens will install, asks how Lens runs (Docker or microsandbox, full or lean, folder,
    port, network), the AI model (finding Ollama, LM Studio and other servers on the computer, or a provider and its key,
    with a test), and optional extras (search by meaning, the decision model, cloud transcription, email, remote access,
    anytopdf, telemetry), takes the administrator password when installing needs it, then installs with live progress
    and opens Lens's setup page. Its answers become ordinary settings in Lens, editable there
    (Get started). LENS_WIZARD=0 keeps the install in the terminal.

Features

  • updates: release check, backups and one-click upgrade through a machine agent (#260)
  • documents: scroll through every page of a document in one view (#267)
  • updates: tell admins and notification targets when a new release is out (#270)
  • chat: /clear and /compact commands, and early compaction near the context limit (#269)
  • voice: read aloud with Gemini TTS or macOS say, and pick the voice in Settings (#268)
  • clipper: Lens web clipper browser extension, Chrome first (#277)
  • import: capture one URL, several or a list from the API and the assistant (#272)
  • extensions: install skills, plugins and MCP servers from Anthropic-format marketplaces (#276)
  • clipper: publish browser extension releases for auto-updates (#294)
  • voice: read aloud with StyleTTS2 on this machine, as an opt-in service (#291)
  • clipper: Edge build, Edge Add-ons package and Edge smoke test (#285)
  • search: find content similar to a text, a resource, a topic or an entity (#296)
  • clipper: Safari build of the web clipper (#283)

Fixes

  • jobs: read documents and images instead of transcribing them (#265)
  • sources: let Google Drive sign in with a service account key file (#266)
  • migrations: read documents already waiting to be transcribed (#278)
  • sources: keep working when Google Drive rate limits (#288)
  • sensors: keep a retained MQTT message before acknowledging it (#299)

Dependencies

  • bump @tanstack/react-query (#249)
  • bump dotenv from 16.4.5 to 18.0.5 in /nextjs-frontend (#252)
  • close the frontend's open security alerts (#300)

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 17:31

Features

  • install: list the prerequisites and ask before installing them (#258)

Fixes

  • install: pull the microsandbox base image from mirrors that need no sign-in (#259)

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 16:27
  • Podcasts from what you pick. Lens makes a two-host learning episode about resources and passages: one host
    explains, the other asks what a learner would ask, every claim is cited to the passage it comes from and checked
    against it before it's kept, and the script is read aloud in two voices by your text-to-speech provider (a local
    OpenAI-compatible server works). Episodes are recordings in a podcasts namespace, so they're searchable and on the
    graph. Start one from the Library's selection bar or a resource's menu, with POST /api/v1/podcasts, or with the MCP
    tool create_podcast; each episode's page plays it beside its cited script (Podcasts).

Features

  • install: run Lens in a microsandbox microVM as an alternative to Docker (#255)

Fixes

  • store: say which setting to fix when SurrealDB refuses the password (#254)

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 09 Oct 17:51

Dependencies

  • bump jest to 30 and keep BlockSuite on 0.19 (#241)

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 09 Oct 13:55

Fixes

  • release: cut release notes over GitHub's 125,000 character limit (#236)

Dependencies

  • bump backend and frontend dependencies, TypeScript 6 included (#239)
0