- All
- Python
- JavaScript
- Moss CLI
- Portal
- API
Added
- Web source methods on
MossClient:createWebSource,listWebSources,getWebSource,updateWebSource,resyncWebSource, anddeleteWebSource, typed wrappers over the/v1/manageweb source actions.createWebSource,resyncWebSource, andupdateWebSourcewithresync: truereturn ajobIdto poll withgetJobStatus;deleteWebSourcereturnspurgeJobIdwhile the source’s pages are removed. - Types
WebSource,CreateWebSourceOptions,CreateWebSourceResult,UpdateWebSourceOptions,UpdateWebSourceResult,ResyncWebSourceResult,DeleteWebSourceResult, andManageApiError(carries the HTTPstatus). MOSS_CLOUD_API_BASE_URLoverrides the host used by the web source methods.
Added
- Web source methods on
MossClient:create_web_source,list_web_sources,get_web_source,update_web_source,resync_web_source, anddelete_web_source, typed wrappers over the/v1/manageweb source actions.create_web_source,resync_web_source, andupdate_web_sourcewithresync=Truereturn ajob_idto poll withget_job_status;delete_web_sourcereturnspurge_job_idwhile the source’s pages are removed. - Types
WebSource,CreateWebSourceResult,UpdateWebSourceResult,ResyncWebSourceResult,DeleteWebSourceResult, andManageApiError(carries the HTTPstatus). MOSS_CLOUD_API_BASE_URLoverrides the host used by the web source methods.
API
- Several web sources per index:
createWebSourcenow adds a site to an existing index instead of refusing it (up to 20 per index, each root URL once). Each source’s pages are tracked separately: a crawl replaces only its own pages, anddeleteWebSourceremoves the source’s pages through a purge job (purgeJobIdin the response) while the index and its other content stay. updateWebSourceaccepts every crawl setting (rootUrl,maxPages,maxDocuments,maxDepth,includePaths,excludePaths,respectRobots,parseDocuments) as well asrefreshCadence, plusresync: trueto crawl right after saving.listWebSourcesaccepts an optionalindexNamefilter.- A crawl requested while another crawl or build runs on the same index is queued (
getJobStatusreportsqueued) instead of failing with409. - Unchanged pages are no longer re-embedded on refresh, and page boilerplate (navigation, footers, cookie banners, skip links) is stripped before indexing.
- Reliability improvements to on-device model loading. No API changes. Requires
@moss-js/moss-core0.25.0.
- Reliability improvements to on-device model loading. No API changes. Requires
inferedge-moss-core0.23.0.
Published as
@moss-js/founding-agent. Install with npm install @moss-js/founding-agent. @moss-tools/founding-agent stays at 2.1.0 and receives no further releases.Added- Typed chat panel in the bubble: a toggle opens a text input so visitors can type instead of talk. Typed messages are merged into the transcript with the voice turns, without duplicates, and the panel closes when the call ends.
- Intake form: a config-driven modal that opens after the agent’s configured number of answers. The mic pauses while the form is open and resumes on submit or dismiss; dismissing it keeps it closed for the rest of the session. Submissions post to the intake endpoint and publish an
intake_completedevent. - New
@moss-js/founding-agent/coreexports for custom UIs: the intake types,normalizeIntakeForm,validateIntakeValues,postIntake, andmergeTranscript.
- Your token route must return the whole session object from
createFoundingAgentSession. Returning onlytokenandserverUrlsilently disables the booking and intake forms. See Server token route.
Changed
- Published as
@moss-js/moss, depending on@moss-js/moss-core0.24.0. Install withnpm install @moss-js/moss.@moss-dev/mossstays at 1.7.1 and receives no further releases. - Improved on-device model loading for foundation models (
moss-minilm,moss-mediumlm,moss-litelm). No API change.
- The cloud query fallback.
queryon an index that is not loaded now rejects with an error telling you to callloadIndexfirst. TheMOSS_QUERY_URLoverride is gone. - The
MOSS_DISABLE_TELEMETRYopt-out. The SDK always attaches its stable per-device id to usage telemetry. MOSS_MODEL_ARTIFACT_TOKENis no longer used and is ignored.
MossClient.queryMultiIndex(indexNames, query, options): search several loaded indexes in one call and get the global top-k, each result tagged with its sourceindexName.options.alphaworks as inquery(default 0.8):1.0embedding-only,0.0keyword-only, in between hybrid via Reciprocal Rank Fusion.MossClient.loadIndexes(indexNames, options): best-effort bulk load returningLoadIndexesResult { loaded, failed };MossClient.unloadIndex(indexName)andMossClient.unloadIndexes(indexNames)release loaded indexes.QueryResultDocumentInfo.indexName(set on multi-index results) and theLoadIndexesResulttype.
Removed
- The cloud query fallback.
query()on an index that is not loaded now raisesRuntimeErrortelling you to callload_indexfirst.MossClientno longer depends onhttpx, and theMOSS_QUERY_URLoverride is gone. - The
MOSS_DISABLE_TELEMETRYopt-out. The SDK always attaches its stable per-device id to usage telemetry. MOSS_MODEL_ARTIFACT_TOKENis no longer used and is ignored.
- Keyword and hybrid multi-index search:
query_multi_indexhonorsQueryOptions.alphaexactly likequery.1.0is embedding-only,0.0is keyword-only, and values in between fuse both signals with Reciprocal Rank Fusion, merging each index’s own BM25 hits by score before fusion.
- Improved on-device model loading for foundation models (
moss-minilm,moss-mediumlm,moss-litelm). No API change. query_multi_indexdefaultsalphato0.8to matchquery. PassQueryOptions(alpha=1.0)for the previous embedding-only behavior. Requiresinferedge-moss-core0.22.0.
QueryOptions(alpha=0.0)is forwarded as given instead of being treated as unset, so keyword-only search works on loaded indexes.- Keyword-only text queries no longer embed the query first, so they no longer load an embedding model and work on custom-model and identity-less indexes.
- Non-finite
alpha(NaN, infinities) is rejected with a clear error instead of producing NaN scores.
API
- Web sources: crawl a website into an index via new
/v1/manageactions (createWebSource,listWebSources,getWebSource,resyncWebSource,updateWebSource,deleteWebSource), with optional daily or weekly refresh schedules and linked PDF/DOCX parsing. See Create Web Source.
Added
create_index_from_filesacceptsparse_options(ParseOptions):use_high_resolution,segmentation_method(“smart_layout_detection” or “page_by_page”),ocr_mode(“auto_ocr” or “full_ocr”), andmerge_tables.session()acceptsartifact_versionandmanifest_sha256keyword arguments to pin a foundation model’s immutable publisher release, part of the model-cache provenance hardening (#329).
- Supported
content_typevalues areapplication/pdfand the DOCX MIME, matching the parse service’s admission check. JobPhaseincludes the crawl and parse pipeline phases.- Requires
inferedge-moss-core0.21.3 (parse options support and the moss-mediumlm 512 dimension fix).
- Local text queries on foundation indexes without an exact model artifact identity keep the core’s actionable error instead of a misleading “custom embeddings” message.
Fixed
createIndexFromFileswith in-memorydata(Uint8Array, ArrayBuffer, Blob, or File) failed at the native boundary with “Failed to get Array length on JsParseFileInput.data”; bytes are now marshalled in the representation the binding accepts. Thepathflow was unaffected.
- New
CreateIndexFromFilesOptions.parseOptions(ParseOptions, now exported): control server-side extraction withuseHighResolution,segmentationMethod(smart_layout_detectionorpage_by_page),ocrMode(auto_ocrorfull_ocr, the latter for scanned documents with no text layer), andmergeTables. Requires@moss-dev/moss-core0.23.0. ParseFileInput.contentTypesupportsapplication/pdfand the DOCX MIME, matching the parse service’s admission check; unsupported types fail fast locally with a clear error.JobProgress.currentPhaseincludes the crawl and parse pipeline phases (queued,crawling,parsing_documents,parsing,waiting_for_parser,parsing_complete).- Local text queries on server-built foundation indexes without an exact model artifact identity are refused with an actionable error instead of embedding against a guessed artifact; explicit query embeddings and cloud queries are unaffected.
Added
Client.create_index_from_files/5accepts aparse_optionsmap controlling server-side extraction::use_high_resolution,:segmentation_method(“smart_layout_detection” or “page_by_page”),:ocr_mode(“auto_ocr” or “full_ocr”), and:merge_tables. Atom or string keys are accepted; unknown keys and wrong value types raise a clear error.
- Supported parse content types are
application/pdfand the DOCX MIME, matching the parse service’s admission check. Docs now state that:name,:content_type, and:pathare all required per file. - Job status
current_phaseincludes the crawl and parse phases (“crawling”, “parsing_documents”, and the parser phases). - Bumped
moss_coredependency to 0.18.0.
Client.session/3with invalid credentials returns{:error, reason}instead of exiting the calling process; sessions start unlinked and link on success.
- Device-id contract for usage tracking (#312):
Moss.Client.new/3resolves a stable per-device id once and applies it to both manager and session telemetry, so a device counts once toward Monthly Active Devices across the whole client.
- New
MossClientOptions.identity(MossIdentity): pass a stable caller-manageddeviceIdand optionaluserIdat construction. The caller’sdeviceIdis emitted as the billable telemetrydeviceId(Monthly Active Device key); Moss’s stable UUID is always emitted alongside asmossDeviceIdfor correlation;userIdis never billable. Values must be 1-256 UTF-8 bytes with no surrounding whitespace, control or format characters, lone surrogates, or replacement characters; invalid values throw at construction. Without a configured identity,deviceIdandmossDeviceIdboth carry Moss’s UUID, so existing billing behavior is unchanged. Requires@moss-dev/moss-core0.22.0; constructing with an identity on an older core fails fast with an actionable error. Opt out of telemetry withMOSS_DISABLE_TELEMETRY=1as before.
Added
MossSessionManager.last_time_taken_ms- the engine-measured retrieval time (ms) from the most recentquery_contextcall (SearchResult.time_taken_ms);Nonebefore the first query or on error.
- First public release to PyPI (
pip install ten-moss).
Dependencies
- Bump
inferedge-moss-coreto0.21.0. The core now publishes an abi3 wheel (cp310-abi3, installs on Python 3.10-3.14) and a glibc ≥ 2.35 x86_64 wheel, somossinstalls in common older-runtime environments - notably the TEN Framework dev container (Ubuntu 22.04 / Python 3.10), where the previouscp312+/manylinux_2_38wheels did not resolve. No API changes.
Added
MossSessionManager- session-scoped Moss grounding for TEN extensions, built on the Moss Sessions API:open,query_context,add_docs,get_docs,delete_docs,push_index,from_config,doc_count.MossSessionConfig- standardizedmoss_*properties for TEN extensions. The project key is a maskedSecretStr;moss_top_k/moss_alpha/moss_max_context_charsare range-validated; unsetmoss_model_idadopts the stored index’s model;moss_max_context_charscaps the injected grounding block.examples/create_index.py- create and populate a demo index.
Changed
- Bumped
pipecat-aiminimum from>=1.1.0to>=1.5.0.
- New: SessionIndex.close() and MossClient.close(), both idempotent, plus Symbol.asyncDispose support so
await usingworks on Node 24. Closing releases the native index, pollers, and the session’s reference to the shared embedding model (the service is dropped when the last session using it closes; the allocator retains and reuses those pages for the next load, so footprint stays bounded at one model per model id). Threads are no longer per-session. Concurrent close() callers share one completion promise and all settle when disposal finishes. - Published type declarations no longer force consumers to enable the ESNext.Disposable lib (the bundle carries the reference itself); consumers need TypeScript 5.2 or newer.
- README and samples now demonstrate the close() / await using lifecycle.
- MossClient.close() now also closes every live session created by that client (tracked via weak references); sessions can still be closed individually first.
- close() fails loudly when the installed @moss-dev/moss-core predates the lifecycle API instead of silently leaking; this release requires @moss-dev/moss-core 0.20.0.
- Declared engines: node >= 20.4 (first Node release where Symbol.asyncDispose exists).
Added
- Semantic code search sidebar with live debounced queries
- Manual Create Index / Rebuild Index workflow
- Local index persistence (
saveToDisk/loadFromDisk) - Moss Cloud sync via
pushIndex()with restore on new machines - Sidebar gear settings for API credentials and cloud sync toggle
- Sync to Cloud button and command
- Hard exclusions for
node_modules, build output, and common dependency folders - Moss native runtime isolated in a worker process
- Marketplace packaging with cross-platform native binaries
Added
- Verbatim payload round-trip (
DocumentInfo.payload): store an opaque structured payload (e.g. a JSON string) verbatim alongside a document and get it back as-is on query/get - never embedded or searched. - Stable per-device id for usage tracking: the SDK now sources a persisted device id (
~/.moss/.moss-device-id,MOSS_DISABLE_TELEMETRYopt-out) and hands it to the core, making per-device usage attribution stable across restarts. - Non-blocking
create_index.create_index(..., wait=False)returns aJobHandleas soon as the build is submitted, instead of blocking until it completes:handle.job_idis available immediately.handle.status()gives a live progress readout (phase + percent) as aJobStatusResponse.handle.wait()blocks until the build finishes and returns the terminalJobStatusResponse. It polls asynchronously, so it parks no threads and never holds the GIL.- New
MossClient.wait_for_job(job_id)blocks byjob_idalone - submit, tear down the machine, then reconnect in a fresh process to wait on or poll the build. - The build runs server-side, so a submitted job completes regardless of the client.
waitdefaults toTrueand is keyword-only, so existing blocking callers are unaffected.
- Requires
inferedge-moss-core==0.20.1.
Changed
- Picks up
@moss-dev/moss-core0.19.2(dependency currency; native-bindingDocumentInfo.payloadround-trip fix). No SDK API changes. (Prior1.3.1release re-run failed because the version was not bumped; this restores a publishable version.)
Changed
- LiveKit stack bumped atomically 1.5.7 -> 1.6.4 (
livekit-agents+ alllivekit-plugins-*); live Deepgram -> Gemini -> Cartesia round-trip verified. transformersconstrained to turn-detector’s validated line:>=4.47.1,!=4.57.2,!=4.57.3,<5.0.0(the previous>=5.0.0floor was unintentional).google-genai>=1.67,<2.0.0;livekit-api>=1.0.7.
- First cut of non-blocking
create_index. Use 1.7.1 instead, which finalized the API (waitis keyword-only;JobHandle.wait()andMossClient.wait_for_job()returnJobStatusResponse) and fixed a GIL hold that could freeze the event loop while a build was submitted or awaited.
AddedDependencies
- Exact / graph retrieval on
SessionIndex, at parity with the iOS SDK.get_docsnow accepts a deterministic-fetchGetDocumentsOptions- fetch bydoc_ids, by a metadatafilter(same dict shape as query filters; no query vector, no ranking), withsort_by/ascendingordering, andgroup_byparent grouping. NewParentGrouping(parent_field, order_field)collapses sibling chunks into one result per unit.QueryOptions.group_byapplies the same grouping to semantic queries.
- Bumped
inferedge-moss-coreto0.19.0(adds the graph-retrieval surface).
Added
- Verbatim document
payload.DocumentInfonow carries an optionalpayloadstring - an opaque structured value (e.g. JSON) stored and returned unchanged, never embedded or searched. Set it when building/adding documents and read it back fromget_docs/ query results. Useful for keeping the full structured record alongside the embeddabletext. Requires the new core and the index-manager service that persists it.
- Managed (cloud) query results now surface
payload(previously dropped when mapping the response).
- Bumped
inferedge-moss-coreto0.18.0(adds payload support through the upload/build pipeline).
Fixed
- Parent grouping on
queryno longer under-assembles units. The engine truncated totopKbefore sibling collapse, so siblings ranked below the cutoff were dropped.query(…, groupByParent:)now over-fetches candidates and returnstopKunits assembled from a wider window. For guaranteed-complete units, prefergetDocs(where:…, groupByParent:), which collapses over its full fetch. - Deterministic sibling order under grouping. Parent grouping breaks
orderFieldties by document id, so equal/missing order values yield a stable within-unit order.
sdkVersion: 0.21.2.Fixed
- Restored
SessionOptions.autoLoadOnInit. It shipped in 0.5.0 but was absent from 0.6.0 (the graph-retrieval branch predated the feature and never picked it up), so code usingSessionOptions(autoLoadOnInit:)failed to compile against 0.6.0. 0.6.1 carries both graph/exact retrieval andautoLoadOnInit. Upgrade straight from 0.5.0 or 0.6.0 to 0.6.1.
sdkVersion: 0.21.1.Added
- Deterministic / exact (“graph”) retrieval on a session.
getDocs(ids:)now returns documents in the order requested; newgetDocs(where:sortBy:ascending:)fetches by a metadata predicate with no query vector and no similarity ranking. - Typed metadata filter. A
FilterDSL (.equals/.and/.greaterThanOrEqual/.isIn/.near/ …) with literal-expressibleFilterValue, usable in bothgetDocs(where:)andQueryOptions.filter- no hand-written filter JSON. - Parent-unit grouping.
ParentGrouping(parentField:orderField:)ongetDocs/querycollapses sibling documents that share a parent id into a single result, assembled inorderFieldorder. - Verbatim structured payload.
DocumentInfo.payload(andQueryResult.payload) stores and returns an opaque value unchanged - not embedded or searched. Codable sugar:init(…, structured:)anddecodedPayload(_:). Indexes saved without a payload load withpayload = nil.
sdkVersion: 0.21.0.Added
SessionOptions.autoLoadOnInit. Defaults totrue(auto-load the named index from the cloud at session creation). Setfalsefor a local-only, disk-first session: creation returns immediately and you populate it yourself (loadFromDisk, falling back toloadIndexonly on a cache miss).
sdkVersion: 0.20.0.Fixed
- Fixed a native crash when re-saving an on-disk session. Calling
saveToDiskon a session previously restored withloadFromDiskcould crash the process while writing the on-disk index, because the index file was rewritten in place while the loaded session was still reading from it.saveToDiskstill persists immediately, but now writes to a temporary file and atomically renames it into place, so the file the live session is reading from is never rewritten underneath it. Requires@moss-dev/moss-core0.19.1.
Added
- Sessions work with a custom
IAuthenticator.MossClient.session()now works when the client is constructed with a custom authenticator (short-lived tokens / delegated auth), not just a static project key - it previously threw. The session authenticates (credential validation,pushIndex,loadIndex) and reports usage through the same auth bridge asloadIndex. Requires@moss-dev/moss-core0.19.0(adds theSessionIndex.withAuthenticatornapi factory).
Added
- Client-level
cachePath.new MossClient(projectId, key, { cachePath })(and theIAuthenticatoroverload) sets one location for the per-device telemetry id, honored by every operation that emits telemetry -loadIndex,session, and so on. Set it once instead of per call.
- Session telemetry now carries the per-device id.
MossClient.session()now attaches the anonymousdeviceIdtosession.*telemetry events, matchingloadIndex. Previously only theloadIndexpath attached adeviceId, so usage from session-only clients was reported without one. - The per-device id is now resolved once and shared across
loadIndexandsession()within a client, so a client that uses both surfaces reports a single, consistent id.
- The per-device id location is now resolved with this precedence: the client-level
cachePath, then thecachePathpassed toloadIndex(back-compat), then a per-user fallback,<home>/.moss/.moss-device-id. Previously the id was only written whenloadIndexwas given acachePath.
Added
- Usage telemetry on the custom-authenticator path. Automatic, privacy-light usage telemetry now works when the client is constructed with a custom
IAuthenticator(e.g. short-lived tokens), not just a plain project key - previously it was silently disabled on that path. This enables device-level usage reporting for client-side / delegated-auth deployments. - A stable, anonymous per-device id is generated once and persisted at
<cachePath>/.moss-device-id(thecachePathyou already pass toloadIndex), then attached to telemetry asdeviceId. It is a random UUID - no hardware identifier, no PII. - Opt out entirely with
MOSS_DISABLE_TELEMETRY=1. - Bumped
@moss-dev/moss-coreto0.18.0(adds thesetDeviceIdnapi binding and auth-provider telemetry).
Fixed
- Loading
moss-litelmindexes could fail withDeserialization error: unsupported version: 3. These indexes use the v3 index format, which requiresinferedge-moss-core0.17.0; installingmossnow brings in that core version automatically, somoss-litelmindexes load out of the box with no manual dependency steps. (moss-minilm/moss-mediumlmindexes are unaffected.)
- Pinned
inferedge-moss-core==0.17.0.
Added
MossClient.session(name, modelId?)- local-first session index. Construct a session, add/delete/get documents and run queries entirely in-process (no cloud round-trip per operation), thenpushIndex()to persist to the cloud. AlsoloadIndex(indexName, { autoRefresh, pollingIntervalInSeconds })to pull an existing cloud index into the session.- New top-level exports:
SessionIndex,PushIndexResult,LoadSessionOptions. - Bumped
@moss-dev/moss-coreto0.17.0(adds theSessionIndexnapi binding).
- Clean re-release of the v0.4.0 fixes. The v0.4.0 tag was force-moved, which SwiftPM caches as a pin mismatch; v0.4.1 ships the same xcframework as v0.4.0 with the synced 4-argument Swift wrapper. Consume with
from: "0.4.0"(resolves up) orfrom: "0.4.1".
Dependencies
- Bumped
inferedge-moss-coreto0.17.0.
Moss.xcframeworkrelease with iOS device (arm64) and iOS simulator (arm64) slices, consumed via.package(url: "https://github.com/usemoss/moss", from: "0.4.0").
- First tagged SwiftPM release of the Moss iOS SDK: binary
Moss.xcframeworkwith iOS device (arm64) and iOS simulator (arm64) slices, consumed via.package(url: "https://github.com/usemoss/moss", from: "0.3.0").
Added
- Local-first session indexing (merged from the separate
moss-sessionpackage):MossClient.session(index_name, model_id?)- creates aSessionIndex; auto-loads from cloud if an index with that name already exists, otherwise starts empty.SessionIndex.add_docs(docs, options?)/delete_docs(doc_ids)/get_docs(options?)- local in-memory mutations and reads.SessionIndex.query(query, options?)- semantic search over the local session index (~1-10ms, no network). Supports the same filter syntax asMossClient.query().SessionIndex.push_index()- uploads the session index to cloud, creating or replacing the index with the same name. Documents are pushed with their locally-computed embeddings; no server-side re-embedding.- New exports from
moss:SessionIndex,PushIndexResult.
model_id="custom"is supported for sessions - bring your own embeddings viaDocumentInfo.embeddingandQueryOptions.embedding; no local model is loaded.
Changed
pip install mossis now ~64% smaller.
- Built-in model downloads (
moss-minilm,moss-mediumlm) survive slow networks: resume after an interrupted connection instead of restarting, with automatic retries and exponential backoff on transient failures. (Also in 1.1.1.)
- Bumped
inferedge-moss-coreto0.14.0.
Fixed
- Built-in model downloads (
moss-minilm,moss-mediumlm) survive slow networks: resume after an interrupted connection instead of restarting, with automatic retries and exponential backoff on transient failures. - Bumped
inferedge-moss-coreto0.12.1.
First stable release of
moss-agent.AddedMossAgent- process-wide Moss runtime. Holds a hot index cache shared across every room (voice) or every request (text).- Voice path -
MossAgent.attach(ctx) -> MossCallbinds a Moss call scope to a LiveKitJobContext. Idempotent onctx.room.name.MossCall.queryandMossCall.query_multi_indexroute through the call scope. - Text path -
MossAgent.query(name, query, options=None)andMossAgent.query_multi_index(names, query, options=None)for HTTP / chat / non-LiveKit callers. - Full index CRUD (
create_index,add_docs,delete_docs,delete_index,list_indexes,get_index,get_docs,get_job_status) and cache lifecycle (load_index,load_indexes,unload_index,unload_indexes) onMossAgent. - Re-exports of
DocumentInfo,IndexInfo,QueryOptions,SearchResult, etc. frommoss_core.
inferedge-moss-core == 0.12.0- introduces themoss_core.Agentandmoss_core.CallScopePyO3 bindings this package wraps.
Breaking: top-level React component replaced.
- Replaced
MossFoundingAgentCardwithMossFoundingAgentBubble, a compact click-to-talk FAB that morphs into a pill with mute, elapsed-time, and end-call controls while live. Supportsposition="fixed"(default, bottom-right with safe-area insets) orposition="inline". Keyboard: Esc = end, M = mute. - Added a curated 6-color palette (
violet,cobalt,teal,emerald,coral,amber) exported asBUBBLE_COLORS. The bubble’scolorprop accepts a preset name. - Added
examples/bubble-playground/, a local Vite playground for previewing the bubble across all presets.
Added
query_multi_index(names, query, options): search across multiple loaded indexes; returns the global top-K with each doc tagged by sourceindex_name. Embedding-only;options.alphais ignored.load_indexes(names, ...)/unload_indexes(names): bulk lifecycle.load_indexesis best-effort and returnsLoadIndexesResult { loaded, failed }.index_namefield onQueryResultDocumentInfo(set on multi-index results).- Bumped
inferedge-moss-coreto0.11.0.
Changed
- Bumped
@moss-dev/moss-coredependency from0.9.1to0.10.0, which adds prebuilt binaries forx86_64-apple-darwin(Intel Macs) and realigns the npm package version with the underlying Rust core.
Changed
- Updated
requires-pythonfrom>=3.10to>=3.11to matchpipecat-ai 1.1.0requirements.
Changed
- Swapped runtime browser SDK from
@inferedge/mossto@moss-dev/moss-web
- Added named config profiles to switch between accounts and projects, and an interactive mode for
moss query.
Initial release.
MossFoundingAgentserver class andcreateFoundingAgentSessionhelper for minting voice sessions from a Node backend (Next.js, Express, anywhere withfetch).<MossFoundingAgent />React component (exported from@moss-tools/founding-agent/react) that renders a voice UI - idle state, start button, visualizer, end-call - and connects to LiveKit via a company-supplied token endpoint.
Initial release of @moss-dev/moss-web - browser SDK for in-browser semantic search.Added
- In-browser semantic search: Full query pipeline runs entirely in the browser via WebAssembly
- Full CRUD operations:
createIndex,addDocs,deleteDocs,deleteIndex,listIndexes,getIndex,getDocs,getJobStatus - File-based index creation:
createIndexFromFilesacceptsUint8Arraydata (no filesystem paths in browser) - Local index operations:
loadIndex,query,refreshIndex,unloadIndex,hasIndex,getIndexInfo - Lazy initialization: WASM + model download happens automatically on first operation
- Metadata filtering: Same filter syntax as Node SDK (
$eq,$ne,$gt,$gte,$lt,$lte,$in,$nin,$near,$and,$or) - Embedding models:
moss-minilm(default),moss-mediumlm - API shape aligned with
@moss-dev/moss(Node SDK)
Added
- Custom authenticator for browser-safe authentication: new
MossClient.withAuthenticator()andIndexManager.withAuthenticator()factory methods accept a JS-side token callback, backed byJsAuthBridgein@moss-dev/moss-core(#226).
CLOUD_API_MANAGE_URLreplaced by granular constants:CLOUD_API_IDENTITY_URL,CLOUD_API_AUTH_URL, etc. (#226).
Added
submit_session_report(ctx, room_name)method onMossAgentSessionfor submitting LiveKit session reports (transcripts) to the Moss backend. Call from youron_session_endcallback to enable transcript download via the CLI.
- Precompiled
libmossbinaries for macOS ARM64, Linux x86_64, Linux ARM64, and Windows x86_64. Each archive shipsinclude/libmoss.hplus shared and static libraries. See C SDK.
Changed
- Bumped
moss_coredependency to 0.9.0. - Session authentication now uses short-lived JWT tokens (enterprise plan required).
- Removed
validate_credentialscall fromClient.session/3; credential exchange happens inside the Rust core during session init. - Updated package metadata and README.
Portal
- Refreshed dashboard aesthetic and added multi-org support with team management.
Architecture
- Rust-native core: The SDK now delegates all index management, querying, and embedding generation to
@moss-dev/moss-core(Rust via NAPI-RS), replacing the previous pure-JavaScript implementations - Node-only: Dropped browser/WASM support; the SDK targets Node.js 20+ exclusively
- Query embeddings are now generated in Rust (
queryText/loadQueryModel), matching the Python SDK architecture
- Package renamed from
@inferedge/mossto@moss-dev/moss - NAPI binding renamed from
moss-coreto@moss-dev/moss-core(v0.8.7, tracking Rust core version) query()uses Rust-nativequeryText()for local queries (no JS embedding pipeline)query()withembeddingoption uses Rustquery()directlyquery()falls back to cloud HTTP when index is not loaded locally
Changed
- Renamed package from
moss_sessiontomoss. - Published as a public Hex package (no longer requires
organization: "moss"). - Bumped version to 1.0.0 stable.
Added
- Filesystem Index Caching:
loadIndex()now accepts an optionalcachePathinLoadIndexOptionsto cache index binaries and documents to disk (Node.js/Bun only)- Cache is automatically invalidated when the cloud index is updated
- Auto-refresh also persists refreshed data to the cache
- Atomic writes prevent cache corruption from partial/interrupted writes
- Path traversal protection on index names
- Graceful fallback to re-download if cached data is corrupted
- Metadata Filtering:
query()now accepts an optionalfilterinQueryOptionsto narrow results by document metadata on locally loaded indexes- Comparison operators:
$eq,$ne,$gt,$gte,$lt,$lte - Set operators:
$in,$nin - Composable with
$and/$orfor complex predicates (supports arbitrary nesting) - Numeric coercion: number filter values are automatically stringified for consistent matching
- Comparison operators:
- Geo-distance filtering: new
$nearoperator filters documents by haversine distance from a"lat,lng,radiusMeters"value - New exported types:
FilterCondition,MetadataFilter
Added
- Initial release of
elevenlabs-mossintegration. MossClientToolfor registering Moss semantic search as an ElevenLabs client tool.- Example
moss-elevenlabs-demo.pydemonstrating tool registration.
First stable release of the
moss Python SDK (previously published as inferedge-moss).Import path changed: from moss import MossClient (was from inferedge_moss import ...)Features- Semantic search with built-in on-device models (
moss-minilm,moss-mediumlm); embedding computation runs in Rust for speed; custom embeddings supported viaQueryOptions.embedding - Hybrid search with keyword + semantic search and configurable alpha blending
- Metadata filtering on locally loaded indexes with rich operators (
$eq,$ne,$gt,$gte,$lt,$lte,$in,$nin,$and,$or,$nearfor geo-distance) - Cloud query fallback:
query()automatically falls back to the cloud API when the index is not loaded locally - Hot reload & auto-refresh:
load_index()supportsauto_refreshwith configurable polling interval to detect and reload updated indexes - Async bulk index pipeline: binary upload, server-side build, poll until completion
- Index mutations:
create_index,add_docs,delete_docsreturnMutationResultwithjob_id,index_name,doc_count - Multi-index support for isolated search spaces
- Python 3.10 to 3.14 supported
- Initial release - CLI wrapper for the Moss Python SDK (v1.0.0)
- Index management:
moss index create,list,get,delete - Document management:
moss doc add,delete,get - Semantic search:
moss querywith--cloud,--filter,--alpha,--top-k - Job tracking:
moss job statuswith--waitfor live progress - Interactive credential setup:
moss init - Three-tier auth resolution: CLI flags > env vars > config file
- JSON and CSV document input, stdin piping with
--file - --jsonflag on all commands for machine-readable output- Rich terminal output: tables, progress spinners, colored status
- Updated
inferedge-moss-coredependency to0.8.7 - Telemetry improvements
- Embedding computation for built-in models (
moss-minilm,moss-mediumlm) now runs in Rust; custom embeddings continue to be supported viaQueryOptions.embedding - Fixed
list_indexes()failing when the cloud API returnsnullfor certainIndexInfofields on indexes created by older SDK versions
Added
- Supports latest version of moss
Changed
- Bumped
moss_coredependency to 0.8.7, which fixes the precompiled NIF tarball for macOS - the file inside the archive is now named with the versioned filename so RustlerPrecompiled places it correctly inpriv/native.
Changed
- Bumped
moss_coredependency to 0.8.6, which fixes precompiled NIF packaging for macOS - the binary is now correctly distributed as.so(required by RustlerPrecompiled) instead of.dylib.
Changed
- Bumped
moss_coredependency to 0.8.5.
- Telemetry improvements
Initial release of the
moss_session Elixir SDK (later renamed to moss in 1.0.0) with local-first session indexing.AddedMoss.Client- single entry point for all operationsnew/3- creates a client; starts an internal local index managersession/3- auto-loads from cloud if the named index exists; starts empty otherwise; pre-warms built-in models ("moss-minilm"/"moss-mediumlm") to eliminate cold-start delay on first query- Cloud CRUD:
create_index/4(model_id optional, defaults to"moss-minilm"),add_docs/4,delete_docs/3,get_job_status/2,get_index/2,list_indexes/1,delete_index/2,get_docs/3 - Local index ops:
load_index/3,unload_index/2,has_index/2,query/4,refresh_index/2,get_index_info/2 - Generates a per-client UUID (
client_id) propagated to all sessions and managers for telemetry correlation
Moss.SessionGenServer - local in-session index backed by Rust coreadd_docs/3- built-in models embed automatically;model_id: "custom"reads.embeddingfrom eachDocumentInfo; returns{added, updated}delete_docs/2- remove documents by IDget_docs/2- retrieve documents (optionally filtered by ID list)query/3- semantic search; built-in models embed automatically;model_id: "custom"requiresembedding:opt; accepts metadata filtersload_index/2- load an existing cloud index into the sessionpush_index/1- push local index to cloud (create or replace); flushes telemetry
Moss.Models- Elixir structs:DocumentInfo,SearchResult,QueryResultDoc,IndexInfo,PushIndexResult,RefreshResult,SerializedIndex,MutationResult,JobStatusResponse,CredentialsInfo,ModelRef- Metadata filtering - all query functions accept
:filtermap with full operator support- Field conditions:
$eq,$ne,$gt,$gte,$lt,$lte,$in,$nin,$near - Logical combinators:
$and,$or(fully nestable)
- Field conditions:
- Background telemetry - aggregated telemetry handled by the Rust core
- Built-in models -
"moss-minilm"(fast) and"moss-mediumlm"(higher quality); embedding computation runs entirely in the Rust core via ONNX Runtime model_id: "custom"- bring your own pre-computed embeddings; no local model required
Fixed
- OpenAI TTS models (
tts-*/*-tts) are no longer cached at worker startup. The TTS instance is created per-session instead.
Added
- Support for passing Moss credentials (
project_id,project_key,voice_agent_id) directly into theMossAgentSessionconstructor andMossAgentSession.prewarm(), falling back toMOSS_*environment variables when not provided. - TTS configuration via the
optionsparameter onMossAgentSession, usingSessionOptions(tts=TTSOptions(...)). SupportedTTSOptionsfields:model,voice,language(Cartesia),emotion(Cartesia),instructions(OpenAIgpt-4o-mini-ttsonly). All fields override the platform-configured defaults and are forwarded directly to the underlying provider. SessionOptionsandTTSOptionsexported frommoss_voice_agent_managerfor IDE autocompletion support.- OpenAI TTS support: routes any model matching
tts-*prefix or*-ttssuffix (e.g.tts-1,gpt-4o-mini-tts) to the OpenAI plugin (optional dependency:pip install 'moss-voice-agent-manager[openai]').
Added
- Initial beta release of the Moss semantic search plugin for VitePress
MossPluginVitePress plugin with automatic markdown indexing via@moss-tools/md-indexerSearch.vuecomponent - full search modal with keyboard navigationSearchButton.vuecomponent - trigger button for the search modal- TypeScript types exported via
./types - Support for both ESM and CJS consumers
- Configurable
apiKey,indexId,placeholder, andmaxResultsoptions
Added
AgentServerre-exported frommoss_voice_agent_managerAgentSessionre-exported frommoss_voice_agent_managerinferencemodule re-exported frommoss_voice_agent_managerroom_iomodule re-exported frommoss_voice_agent_manager(includesRoomOptions,AudioInputOptions)MultilingualModelre-exported frommoss_voice_agent_manager(turn detection)livekit-plugins-turn-detector==1.3.11added as a dependencyvoice_agent_namefield added toMossConfig- populated from the platform credentials API, eliminating the need for a separatehttpxcall in agent code
Fixed
MossAgentSession.prewarm()no longer crashes with “no running event loop”.
Added
MossAgentSession.prewarm()static method for use asprewarm_fncinWorkerOptions- initializes providers once at worker startup instead of per sessionctxparameter onMossAgentSession.__init__()- when provided, reuses prewarmed providers from the worker process instead of creating new onesJobProcessre-exported frommoss_voice_agent_manager
- Reduced agent session startup latency by supporting the LiveKit prewarm pattern
Added
- Metadata Filtering:
query()now accepts an optionalfilterdict to narrow results by document metadata on locally loaded indexes- Comparison operators:
$eq,$ne,$gt,$gte,$lt,$lte - Set operators:
$in,$nin - Composable with
$and/$orfor complex predicates (supports arbitrary nesting) - Numeric coercion: int and float filter values are automatically converted to strings for consistent matching
- Comparison operators:
- Geo-distance filtering: new
$nearoperator filters documents by haversine distance from a"lat,lng,radiusMeters"value - When
filteris passed toquery()but the index is not loaded locally, a warning is logged and the filter is skipped (cloud query API does not yet support filtering) - Updated
inferedge-moss-coredependency to0.6.0
Portal
- Billing UI updates.
- Bumped
inferedge-moss-coredependency to0.5.0to support session index telemetry andpush_indeximprovements
Portal
- Self-service password and profile updates from account settings.
Changed
- Only set room agent configuration when
agentNameis explicitly provided tocreateParticipantToken() - Removed automatic fallback to
voice_agent_namefrom credentials, allowing dispatch rules to handle agent joining
Fixed
- Updated API endpoint from
/api/voice-agent-deploy/get-voice-agentto/api/voice-agent/get-voice-agentto match backend API changes
Changed (Complete Rewrite)Complete architectural rewrite. The SDK is now a runtime agent library instead of a deployment client.Old SDK: Deployment client that uploads code to backend
New SDK: Drop-in replacement for LiveKit AgentSession with Moss platform integrationAddedAfter (v1.0.0-beta.4 - Runtime SDK):
MossAgentSession- Drop-in replacement for LiveKit AgentSession- Dynamic configuration fetching from Moss platform API
- Runtime config API endpoint (
/api/voice-agent/get-runtime-config) - Voice agent credentials API endpoint (
/api/voice-agent/get-voice-agent) - Automatic provider configuration (STT, LLM, TTS)
- Built-in metrics tracking (LLM, TTS, STT, VAD, EOU)
- Diagnostics reporting with performance metrics
- Model/provider name masking for proprietary information
- Auto-initialization of VAD (Voice Activity Detection)
py.typedmarker for IDE IntelliSense support
MOSS_PROJECT_ID- Project identifierMOSS_PROJECT_KEY- Project authentication keyMOSS_VOICE_AGENT_ID- Voice agent identifier
MOSS_PLATFORM_API_URL- Platform API URL (defaults to production)
- No fallbacks - Fails hard if configuration/credentials missing
- Dynamic models - Model selection fetched from backend at runtime
- Secure credentials - LiveKit credentials fetched from Supabase via API
- No hardcoded secrets - All secrets from environment or API
MossVoiceClientclass (replaced withMossAgentSession)deploy()method (now runtime library, not deployment tool)- Custom tool source extraction
- Static configuration files
Added
- Async job-based mutations (
createIndex,addDocs,deleteDocs) with built-in polling andonProgresscallbacks - Large index support - up to 100k documents via presigned upload + server-side build
- New binary index format with smaller payloads and faster deserialization; existing indexes using the previous format are still supported
- Internal maintenance
- All index mutations and reads now go through the Rust ManageClient, replacing the Python HTTP layer
- Index creation uses an async bulk pipeline: binary upload → server-side build → poll until completion
load_indexsupports both V1 and V2 binary formats, with cloud query fallback when index isn’t loaded locally- New return type
MutationResult(withjob_id,index_name,doc_count) forcreate_index,add_docs,delete_docs get_docstakesdoc_idsdirectly instead of wrapping inGetDocumentsOptions
Changed (Breaking)After:
- Removed
agent_idparameter fromdeploy()method voice_agent_idis now used internally as the agent identifier- Reordered parameters:
voice_agent_idnow comes beforepromptindeploy() project_nameparameter now defaults tovoice_agent_id(previously defaulted toagent_id)
Initial beta release.Added
MossVoiceClientfor deploying voice agents to LiveKitdeploy()method with custom Python function tools support- Automatic source code extraction for custom tools
- Project-based authentication (X-Project-Id, X-Project-Key)
- Zero external dependencies (uses Python standard library)
Initial beta release.Added
MossVoiceServerclass for managing voice agent connectionsMossVoiceServer.create()- Fetch and initialize credentials from Moss APIvoiceServer.getServerUrl()- Get voice agent server URLvoiceServer.createParticipantToken()- Generate participant tokensvoiceServer.getAgentName()- Get configured agent name- Automatic credential caching
- Full TypeScript support with JSDoc
- Query latency reduced from ~2,300ms to ~10ms for 100K vectors
- Optimized search pipeline reducing memory allocations
- Significantly reduced memory overhead for large indexes (100K+ documents) in the context of hybrid search (keyword + semantic)
- Enhanced performance across all index sizes
- Fixed ESM related conflicts
Added
- Hot Reload & Auto-Refresh: Indexes can now automatically detect and reload when updated in the cloud.
load_index()now accepts optionalauto_refreshandpolling_interval_in_secondsparameters- When
auto_refreshis enabled, the SDK polls for updates at the configured interval (default: 600 seconds) - To stop auto-refresh, call
load_index()again without theauto_refreshoption
load_index()now allows reloading an already-loaded index (previously threw an error)- Index management now uses Rust core for improved performance and reliability
Added
- Hot Reload & Auto-Refresh: Indexes can now automatically detect and reload when updated in the cloud.
loadIndex()now accepts optionalLoadIndexOptionswithautoRefreshandpollingIntervalInSecondsparameters- When
autoRefreshis enabled, the SDK polls for updates at the configured interval (default: 600 seconds) - To stop auto-refresh, call
loadIndex()again without theautoRefreshoption
loadIndex()now allows reloading an already-loaded index (previously threw an error)
- Adds partial support for Python 3.14 by disabling local embedding service functionality. Full support coming soon.
- Adds support for user-supplied embeddings.
query()now automatically falls back to the cloud API when the index is not loaded locally, enabling queries without requiringload_index()first.- Adds better scoring evaluation for search results
Added
- Query optimizations for custom-embedding workflow
Fixed
- Fixed
ReferenceError: process is not definedcrash in browser environments. The SDK now works seamlessly across all JavaScript runtimes including browsers, Node.js, Deno, and Bun.
- Removes the ‘<2’ upper bound on numpy dependency.
Added
- Support for user-supplied document embeddings during ingestion. The SDK supports optional
embeddingarrays inDocumentInfopayloads without using the native embedding service from moss. - Query overloads now accept
QueryOptionsso users can provide a custom embedding alongside query text. - Relaxed
modelIdrequirement when creating indexes. The SDK aligns with the service default ofmoss-minilmwhen no explicit model is provided. query()now automatically falls back to the cloud API when the index is not loaded locally, enabling queries without requiringloadIndex()first.
- New service endpoint with significant infrastructure upgrades. Management operations are now ~3× faster across most real-world use cases, providing faster index operations while also supporting larger payloads.
Added
- Support for Pipecat v0.0.99.
- Support for LLMContext and LLMContextAggregatorPair
- removed deprecated OpenAILLMContext and OpenAILLMContextAggregatorPair
- Drops support for Python 3.9 and below.
- Bug fix: Keyword search now functions correctly after
load_index(). - New service endpoint with significant infrastructure upgrades. Management operations are now ~3× faster across most real-world use cases, providing faster index operations while also supporting larger payloads.
- function-based API for programmatic usage
- Exported
sync()function for building and uploading in one call - Exported
buildJsonDocs()function for building search index programmatically - Exported
uploadDocuments()function for uploading documents programmatically - Exported
createIndex()function for uploading an existing index file - Functions can be imported and called directly in code
- Support for passing credentials via function options or environment variables
- Functions return structured data (e.g.,
{ success: boolean, count: number })
- Exported
Added
- Initial release of
pipecat-mossintegration. MossRetrievalServicefor augmenting Pipecat LLM contexts with retrieved documents- Example
moss-retrieval-demo.pydemonstrating a full voice pipeline with retrieval. moss-create-index-demo.pyfor creating and populating a Moss index.
- Updates
inferedge-moss-coredependency to version 0.2.3 for new ARM64 wheel support.
Adds IntelliSense support in all the IDEs
Fixed
- Fixed ESM (ES Module) import compatibility issue. The package now correctly exports as an ES module and can be imported using standard ESM syntax.
- Migrate from CommonJS (
require) to ES Module syntax (import).
Adds support for keyword search and alpha blending between keyword and semantic search.
Removes Pipecat integration and MossContextRetriever from the SDK. Will be offered as a pipecat extension instead soon.
Performance improvements for query() calls.
New Features
- MossContextRetriever: Added Pipecat integration for real-time voice AI applications
- Automatically enhances LLM conversations with semantic search results from Moss indexes
- Seamless integration with OpenAI LLM context frames
Initial release of @moss-dev/moss with core features:
- Semantic search using transformer-based embeddings
- Lightweight embedding models for edge computing; supports proprietary “moss-minilm” and “moss-mediumlm” models
- Multi-index support for isolated search spaces
- Add, update, and remove documents across indexes
- Blazing fast querying support after loading indexes
- TypeScript support with full type definitions
Initial release of inferedge-moss with core features:
- Semantic search using transformer-based embeddings
- Lightweight embedding models for edge computing; supports proprietary “moss-minilm” model
- API key validation with secure host access
- Cloudflare CDN support for fast model loading
- Multi-index support for isolated search spaces
- Add, update, and remove items across indexes
- Query interface with configurable result count
- Performance metrics tracking