0.10.0 — Deleted records go to the trash, agents search the knowledge graph, and a broad security sweep
Stable release · View on GitHub0.10.0 is a large release: 373 merged PRs since 0.9.1. Deleted records can now go to the trash and be restored, behind a Labs setting that is off by default. Agents get knowledge-graph entity tools backed by a new entity index. AI models can be discovered from a provider and added several at a time, and the agent loop uses provider prompt caching. Connectors now remove what was deleted at the source, or left out by a narrowed filter, in nine connector families. On Redis Streams, each connector gets its own indexing lane.A lot of this release is security work. The coding sandbox now has its network off by default, and it reaches Docker only through a policy proxy, with the app running as a non-root user. Custom STDIO MCP servers are opt-in for the operator. Three GitHub security advisories are fixed, along with org scoping, SSRF, CORS and secret-masking issues across the services. Several of these changes need an operator to act. Read Breaking changes & upgrade notes before upgrading.
Full commit-level detail: GitHub release · Compare view
Highlights
Deleted records go to the trash, and can be restored
With the Labs settingENABLE_SOFT_DELETE on, a delete marks a record instead of removing it. This covers user deletes, KB folder deletes and connector sync deletes. The record keeps its edges, permissions and stored content, and it disappears from search and listings (#3695, #3718). A deleted batch can be restored exactly as it was (#3799). Collections get a Recently deleted page (#3884). An hourly job in the connectors service, run by one replica at a time, purges records once they have been in the trash for the retention period: 14 to 28 days by default, set by softDeletePurge in the platform settings (#3847). Trashed folders refuse moves, creates and uploads (#3973). Tables in the trash no longer show up in the full-record tool’s foreign-key lists (#3903). A vectors-cleanup event the broker refuses counts as unpublished (#3901). Records stored before the isDeleted field existed count as live (#3800, #3825). The restore refusal field is now blockedRecordId (#3986 — @siddhant-pipeshub). The whole checklist is tested end to end (#3853, #3885). With the setting off, deletes work as they did before. (@shekharkadyan)Agents can search the knowledge graph
A newentities vector collection holds one point for each taxonomy node, record title and record group. It is written by the indexing pipeline, and every result is permission-checked against the graph. Agents get search_entities and find_records_by_entity, and search accepts entity_ids. So an agent can go from “what’s tagged Legal” to the records themselves. Extracted categories, topics and languages now resolve to one canonical node per org (#3308, #3729 — @tushar1245). Follow-up phases add these:- rebuilding the entity index from the graph (#3759)
- org-scoped aliases (#3762)
- a reversible merge of duplicate taxonomy nodes (#3767)
- retried entity cleanup when a connector is deleted (#3769)
- the permission check inside the graph query (#3770)
- concurrent enrichment and alias healing (#3771)
- an entity-resolution eval (#3772)
- top-3 merge candidates (#3773)
- further fixes (#3757, #4019) — all @abhishekgml1991
AI models: discovery, multi-model add, and prompt caching
Admins can fetch a provider’s model list and add several models in one step, in settings and in onboarding. Each model is checked and saved on its own. Models that pass are kept, and failed ones can be retried. Rotating the key updates every model on the same connection. The release also adds an optional OpenAI base URL and OpenAI-compatible image, speech-to-text and text-to-speech models. Configured models are listed at an OpenAI-compatibleGET /v1/models (#4012, #4054 — @abhishekgml1991).The agent loop now uses provider prompt caching for the prompt and the tool definitions: Anthropic breakpoints, Bedrock cache points, and OpenAI/Azure prompt_cache_key. The prompt prefix also stays the same from turn to turn, so the cache can be reused. It is on by default and controlled by PIPESHUB_PROMPT_CACHE (#4038 — @abhishek-pipeshub). A model can carry its own default reasoning effort, which the chat picker shows (#3828, #3837).A locked-down code sandbox and MCP
The sandbox and MCP changes below affect how operators deploy.- Docker access: The app container no longer mounts the Docker socket. A new
docker-socket-proxyservice holds it and allows only sandbox-image containers with no privileged mode, binds or host namespaces. The app now runs as uid 1000 and keeps its existing paths (#3782, #3811, #3816, #3820). The Helm DinD sandbox goes through the same proxy (#3888 — @abhishekgml1991). - Network: Sandbox code runs with the network off by default, and when it is on, egress goes through a firewall (#3780).
- Sandbox mode: An unset or unknown
SANDBOX_MODEnow fails closed (#3725 — @rish231294).localmode requiresSANDBOX_ALLOW_LOCAL=true(#3803). Symlink tar members are dropped, and the sandbox user and file-size limit are pinned (#3810). All of these are by @vishwjeet-pawar03 unless noted. - MCP: Custom STDIO MCP servers run only when the operator sets
MCP_ALLOW_CUSTOM_STDIO=true, and catalog commands are pinned (#3887 — @abhishekgml1991).
Connectors remove what the source deleted
A long-running gap is closed. Many connectors kept records whose items had been deleted at the source, or that a narrowed filter now left out. This release fixes that for these connectors:- BookStack (#3704)
- Confluence Cloud and Data Center, team and personal (#3705, #3719, #3721, #3823)
- Zammad (#3706)
- Nextcloud (#3707)
- S3-style object stores, including the “Not in” filters (#3708, #3716, #3717)
- Google Drive Workspace (#3709)
- Web (#3712)
- Jira personal (#3934), and Jira on Free plans, which refuse the audit log (#3875, #3905)
- Snowflake (#3688)
Indexing: a lane for each connector, and less work per record
A community user reported that their Slack connector waited behind about 200,000 GitLab events, because both connectors hashed to the same Redis Streams lane. Each connector now gets a lane that is recorded when the connector is created, freed when it is deleted, and separated once if two collide.FAIR_SCHEDULING_LANE_ASSIGNMENT now defaults to assigned on Redis (#3979, #3980, #3982). On Kafka, a connector at its cap no longer holds up the connectors that share its partition (#3977). Queued events of a connector that was turned off or removed are settled as they are read (#3976). Turning a connector back on re-queues what pausing it parked (#4026). A rate-limited item waits for the reset instead of failing (#4039).There is also less work per record. Extraction is sent only what it reads, and each saved record is encoded once (#4047). Each record needs fewer graph queries, and background sweeps are limited to a tenth of a busy loop (#4048). Qdrant upserts are sent as a Batch (#4043). Large-file parsing stays off the event loop (#3945).An All Artifacts gallery, and queued email
The new All Artifacts (Beta) gallery lists the artifacts a user can access. Users can preview them, download them and switch between versions, and artifacts no longer mix into All Records (#3427). The gallery renders PPTX files (#4056) and gets apply and clear controls for its filters (#4058) — all @abhishekgml1991. Invite emails are no longer sent during the HTTP request. They go out through the message broker, and a background consumer sends them over pooled SMTP (#2906 — @anupPradhan0). The mail consumer is fixed so it does not send duplicates or lose a send (#3743 — @abhishekgml1991).Breaking changes & upgrade notes
- Coding sandbox:
SANDBOX_MODEmust be set. If it is unset or has an unknown value, the sandbox is now unavailable instead of falling back tolocal(#3725).localalso needsSANDBOX_ALLOW_LOCAL=true(#3803).SANDBOX_ALLOW_NETWORKnow defaults tofalse(#3780). Docker Compose installs gain adocker-socket-proxyservice under thesandboxprofile. The app reaches it throughDOCKER_HOST=tcp://docker-socket-proxy:2375and runs as uid 1000, so custom volume mounts must be writable by that user (#3782). Helm DinD sandboxes go through the proxy too (#3888). - MCP: existing custom STDIO MCP servers stop running until the operator sets
MCP_ALLOW_CUSTOM_STDIO=true(Compose.envor Helm values). STDIO env names on the denylist (PATH,LD_*and others) are refused (#3887). - Service-to-service auth: the parsing and extraction services require a service token (#3818). The query and connector services no longer send wildcard credentialed CORS (#3890).
- Redis Streams lanes:
FAIR_SCHEDULING_LANE_ASSIGNMENTdefaults toassigned. Set it tohashon every service to go back to hashed lanes. Events already on a stream are not moved: a connector gets its lane on its first publish after the upgrade, and anything already queued finishes on its old lane. Kafka is not affected (#3982). - Invites:
POST /users/bulk/invitenow returns{ "queued": true }once the emails are accepted for delivery. A200no longer means they were delivered (#2906). - API status codes and shapes:
- A member who calls an admin-only route gets
403, not400(#3696, #3827). - Stats on a connector the caller can’t open return
404, not403(#3922). - A sync toggle or resync for such a connector returns
404, not500(#3955). - A resync that can’t be queued returns
503(#3910). - Malformed storage ids return
400, not500(#3668). - The restore refusal field
record_idis nowblockedRecordId(#3986). - Two knowledge-base record-creation routes on the connectors service, which could only answer
500, are removed (#3933).
- A member who calls an admin-only route gets
- Downloads and secrets:
- The connectors service’s signed download URLs are bound to the user who redeems them, and still expire after 60 minutes (#3723).
- On the storage service’s internal download route,
expirationTimeInSecondsis capped at 7 days. The default is still 1 hour, and a longer value is refused with400(#3790). - Connector config responses mask stored secrets and no longer return the owner’s tokens (#3917, #3923). Admins can read secrets back through a dedicated route (#3948).
- Toolset credentials are hidden from members and masked for admins (#3775).
- Python dependencies: FastAPI moves to 0.136.3, and Starlette is pinned to 1.7.0 (#3817). This changes what callers of the Python service ports see directly. The gateway, UI, Slack and MCP already send the right headers, so they are not affected.
- JSON requests without
Content-Type: application/jsonget422instead of being parsed. - URL-encoded forms are limited to 1000 fields and 1 MiB per field, and a form over either limit gets
400. Multipart uploads are not limited. - CORS responses echo the request
Originand always sendVary: Origin.
- JSON requests without
Connectors
- Google Drive & Gmail
- Drive supports external users (#3115 — @R0gue-one), and syncs files that a full listing used to skip (#3678 — @abhishekgml1991).
- Sharing a file in a filtered folder no longer deletes it (#3873).
- Gmail web URLs are fixed (#3487 — @R0gue-one).
- Gmail reads its own OAuth app when it opens a Drive attachment (#3829), and asks only for read-only scopes when it impersonates a Workspace mailbox (#3833).
- Google toolset tokens refresh with their consent scopes, and the Gmail Drive-download fallbacks are fixed (#3838).
- Calendar’s consent no longer asks for
gmail.send, and Meet’s addsmeetings.space.readonly(#3912). - A misleading Drive Workspace log line is corrected (#3835).
- Salesforce
- Sandbox and My Domain orgs sign in on their own login host (#3848), and the setup form suggests a My Domain instance URL (#3830).
- The Login URL error is now a fixed message written for people (#3904 — @tushar1245, #3906).
- A file’s stored extension is read from its file record (#3647).
- Cached search access is cleared when permission edges are rewritten (#4040).
- Confluence — admin date filters apply as set, and the 24-hour look-back runs only from the sync checkpoint (#4042). Folder ancestors are recognised in the placeholder sweep (#3649). “Grant Jira user access” survives toolset registration (#3881).
- Zammad — ticket search pages through
/tickets/search, so Zammad 6.4 reads every ticket once (#3807). Every knowledge-base answer is read on Zammad 6.0–6.4 (#3839). Each ticket gets one search window, so a resumed read doesn’t read its ranges again (#3876). - Linear — a page that times out or is rate-limited is requested again (#3991). A team whose pages never came back is reported, and the deletion checkpoint stays where the scan stopped (#3993).
- Web — the connector recovers from a browser crash (#3815 — @R0gue-one).
curl_cffistreaming no longer crashes the connector service (#3755). A page request that never finishes is abandoned and its thread is stopped (#3842). A page keeps its retry when the headless fallback fails (#4004 — @abhishek-pipeshub). - SMB — the SMB connectors are fixed (#3957 — @R0gue-one), and a renamed file keeps its record (#3645).
- Databases — Postgres tests the credentials before the setup form moves on, and shows PipesHub’s IP (#3985 — @tushar1245). MariaDB skips tables whose content hasn’t changed (#4028). The Redshift driver no longer evaluates
int2vectorcolumn text (#3895 — @abhishekgml1991). - Slack — channels sync when the token has no DM scopes, and listing errors fail loudly (#4025). The Slack bot accepts Markdown, text, CSV and TSV attachments (#3683).
- GitHub & GitLab — GitHub rate limits are treated as rate limits, and some quota is left for the user (#4032). GitLab streams items whose titles have characters outside latin-1 (#3938).
- Stored-field fixes after the file-record split
- SharePoint reads the stored file hash from the file record (#3646).
- Box reads a shared item’s stored path from the file record (#3648).
- Nextcloud finds a file’s folder by path (#3650).
- Local FS reads the file record before retiring one (#3651).
- Local sync treats the sync root as a literal path (#3898 — @abhishekgml1991).
- An identical object-store copy gets its own record (#3713).
- Smaller connector fixes
- OAuth registrations
- Connector platform
- Connector sync is refactored (#3128 — @shrikantNemiwal1).
- Case-only renames are allowed, and OAuth app authorship is recorded (#3583 — @vishwjeet-pawar03).
- A connector is marked
DELETINGbefore its delete is published (#3840 — @tushar1245). - A failed toggle no longer undoes someone else’s newer change (#3915 — @R0gue-one).
- The crawling manager derives the connector type from the instance (#3658 — @darshan-pipeshub).
- The graph DB status is reverted when sending a message fails (#3641 — @R0gue-one).
- Folder path filters allow spaces and commas (#3952 — @abhishekgml1991).
- A deleted connector’s schedule is removed even when its config can’t be read (#3908).
- Filter options are capped at 100 (#3910), and
/configuredand/agents/activepage with a true total (#3909). - A personal connector is listed only for its creator (#3921).
- A failed group member removal raises an error instead of returning False (#3937).
- A connector record and its parent edge are deleted in one write (#3994).
- Admins are told what disabling sync leaves searchable, and that content stays searchable in exact-text search (#4041).
Agents & AI
- Storage Pattern Match — LLM-driven grep over stored records, scoped to what the user can access (#3568 — @vishwjeet-pawar03). Same-named folder and page twins are kept apart (#3761 — @vishwjeet-pawar03). Record JSON is stored as UTF-8, so non-ASCII text matches (#3763 — @abhishekgml1991). Command output and search terms stay out of the info log (#3894 — @abhishekgml1991). A cited grep hit keeps its name, type and quote (#4014 — @abhishek-pipeshub).
- Agent loop
- A run that reaches its turn limit answers from its last tool results (#3808 — @tushar1245).
- The agent is told when a withheld tool becomes callable (#4015 — @abhishek-pipeshub).
- A mistyped record id points back at records already shown, including storage-search results (#4016, #4030).
- The chat ask-user-question flow is fixed (#3592 — @Pranjal-wq).
- Agent saves
- Search
- Hits from records without a link, such as SQL tables, are kept (#3865).
- Search falls back to the original query when the AI rewrite fails (#3931).
- One stalled provider call no longer holds a search for minutes (#3972).
- Records shared with a role are found on Neo4j (#3710).
- Cached access is cleared as soon as a connector removes a permission (#4031).
- A Jira issue key matches exactly (#3914).
- AI model settings
- Rejected settings get a clear 4xx, the default model is recorded, and follow-up length is limited (#3701).
- The vector store stays sized for the embedding model in use (#3697).
- The model health check no longer crashes (#3805), and stops telling admins to uncheck Multimodal over a bad key (#3813 — @abhishekgml1991).
- Tools — Jira
get_issuereturns the ticket description (#3911 — @darshangodase). Slack tools get permissions (#3722 — @jatingaur18).
Fixes
- Knowledge bases & collections
- A folder delete stays inside the folder (#3679).
- Duplicate-name checks read the file type from the record (#3802).
- A move is one write on Neo4j (#3956).
- A colliding create is retried (#3990).
- The default knowledge base create converges, and a half-built one is healed (#3996).
- App browse works on ArangoDB again (#3795).
- A file’s size shows when it is kept only on its file node (#3801).
- Long list names show in full (#3724 — @Pranjal-wq).
- A lock shows when a collection group permission is off (#3676 — @Pranjal-wq).
- Collection frontend fixes (#3760 — @darshan-pipeshub).
- Users, groups & teams
- Service accounts are offered in group and team member pickers (#3627).
- Group names are unique per org, checked on create and rename and enforced in the database (#3638, #3698).
- A team create converges on one team (#3997).
- An empty users lookup is skipped, and a bad id gets a plain explanation (#3687).
- An email edit syncs to the graph (#3436 — @Pranjal-wq).
- Mail — the email-change link now says it lasts 20 minutes, not 14 days (#3692).
- Storage — every caller reads the storage config from the internal route (#3918 — @tushar1245). A missing document on internal routes logs at warn (#4022 — @abhishekgml1991).
- Frontend & desktop — Electron login is fixed (#3602 — @R0gue-one). A notification reloads its conversation even when that conversation is already open (#3946 — @abhishekgml1991).
- Parsing — Windows-1252 text is read before falling back to Latin-1 (#3714).
Performance & reliability
- Graph writes are atomic and fail loudly
- Multi-step Neo4j sync writes are single statements (#3924).
- Record permission writes are atomic on Neo4j (#3932).
- Agents, teams and knowledge bases are created all-or-nothing (#4046).
- A fenced single-field write locks the record first (#3988).
- ArangoDB write-write conflicts are retried (#3794), and a refused REMOVE fails the delete so it rolls back (#3926).
- Deleting a collection record removes all its edges (#3874).
- A mail’s attachments are deleted with it on Neo4j (#3879).
- Failed reads raise an error instead of returning None (#3672, #3703).
- A sync point is deleted by its key (#3666).
take_back_kept_record_groupis defined once (#3920).- A Neo4j team KB is found when the list is searched by name (#3925).
- Service accounts can attach files to chat on ArangoDB again (#3702).
- Indexing status
- A duplicate takes its twin’s final enrichment state (#3878), and its status is written last so a failed attach is retried (#3594 — @shrikantNemiwal1).
- A record is marked indexed with an update, not an upsert (#3919 — @shrikant-pipeshub).
- Only records whose event the queue has moved past are re-published (#3944).
- Inheritance edges that are removed are counted in the write itself (#4035).
- Services
Security & authentication
- Advisories — signed download URLs are bound to the user who redeems them (GHSA-cf48-qh3f-g3g9). The sandbox fails closed when
SANDBOX_MODEis unset (GHSA-x783-vmqc-7jc9). Ids are encoded where they go into service URLs (GHSA-rfmg-j28j-f635). (#3723, #3725, #3728 — @rish231294) - Sessions & sign-in
- The
refresh_tokengrant is bound to the authenticated client (#3639 — @rish664). - The SAML session cookie is sent only over HTTPS (#3637), and SAML no longer keeps an in-memory login session (#3700).
- SAML security fixes (#3765 — @R0gue-one).
- Ended sessions are refused at the Python services (#3680).
- Password reset links work only once, even when used twice at the same moment (#3681).
- A deleted or disabled user’s refresh token gets a plain 401 (#3686).
- Sign-in attempts are counted before the comparison, and
returnTois validated (#3789 — @R0gue-one).
- The
- Access control
- Attachment reads are checked for virtual record ids and for history attachments (#3633 — @Pranjal-wq, #3764 — @uncleSlayer).
- Record updates in knowledge bases are permission-checked (#3640 — @uncleSlayer).
stream_recordand record delete are scoped to the caller’s org (#3675, #3667 — @tushar1245), and so are connector lists and lookups (#3913).- Org-wide schedule routes are admin-only, and queue stats are scoped to the org (#3814 — @darshangodase).
- Record delete, connector config read and AI model endpoint checks are tightened (#3788 — @shrikantNemiwal1).
- Domain and “anyone” shares grant no access, and deleted users leave KB sharing lists (#3691).
- Agents —
execute_sql_queryis limited to allowed connectors (#3677 — @tushar1245). An agent’s sources stay within its configured knowledge (#3751 — @abhishekgml1991).xargsargument injection in Storage Pattern Match is blocked (#3784 — @vishwjeet-pawar03). - SSRF & untrusted input
- Internal addresses are blocked when fetching document images (#3632 — @darshangodase).
- Web and RSS fetches stay off non-public addresses (#3674 — @siddhant-pipeshub).
- Model endpoints are checked at connect time (#3892 — @abhishekgml1991).
- Untrusted images are no longer decoded, and empty OAuth scopes are rejected (#4055 — @abhishekgml1991).
- Regex metacharacters in user and group search are escaped (#3804 — @darshangodase).
- pdf.js eval is turned off (#3661).
- Chat asks for a click before it loads images from other sites (#4011 — @Pranjal-wq).
- Slack — the internal Slack config route requires a bot-only token (#3787), and the org is never guessed when hydrating a Slack caller (#3783) — @Pranjal-wq.
- OAuth & secrets
- The allowed subset of the requested scopes is granted, and
usergroup:readis added toMCP_SCOPES(#3731 — @uncleSlayer). - Scopes for
createConversationanduploadRecordsare aligned (#3900 — @siddhant-pipeshub). - Shared OAuth app credential trust is fixed (#3768 — @shrikantNemiwal1).
- Toolset credentials are hidden or masked, and model health checks are admin-only (#3775 — @siddhant-pipeshub).
- The allowed subset of the requested scopes is granted, and
- Hardening
- Client-side IP forgery against the rate limiter is closed (#3631 — @uncleSlayer).
- Server errors return fixed text instead of exception text (#3819 — @shrikantNemiwal1).
- Nodemailer is upgraded to 10.0.14, and file or URL attachments are refused (#3897 — @abhishekgml1991).
- onnxruntime telemetry is turned off in every service (#4060 — @abhishekgml1991).
- Dependency patches
Developer experience & infrastructure
- CI & release
- Every third-party GitHub Action is pinned to a commit SHA (#3685).
- Integration tests run on
pull_requestwith secrets kept away from forks (#3886 — @abhishekgml1991). - Integration-suite guards run as their own required job (#4010, #4036 — @abhishek-pipeshub).
- CI images are built from GHCR base images (#4045).
- The sandbox image is published with the app image (#3995).
- The changelog skill runs under
workflow_dispatch(#3659). - New F811 redefinitions in tests fail CI (#3852).
- The PipesHub image version is updated (#3636 — @abhishekgml1991).
- Demo stack — a demo-only stack (#3621), Acme stories for sales, support, marketing, finance and HR (#3585), and an AI judge for demo answers in place of phrase lists (#3669, #3822, #3929, #4000, #4009).
- Integration and end-to-end coverage
- Auth, sessions and OAuth (#3643, #3671, #3859, #3860, #4008).
- Permissions and admin routes (#3684, #3689, #3916, #3936).
- Cleanup after every delete path (#3682, #3756, #3792, #3863, #3869, #3927, #3970, #3971).
- AI models, agents, MCP and the agent harness on a real model (#3690, #3693, #3797, #3843, #3844, #3845, #3867, #3871).
- Connector scenario matrix and connector suites (#3644, #3854, #3856, #3857, #3861, #3862, #3864, #3930, #4002).
- Resilience (#3928, #3989, #4001).
- Graph edge schemas (#3793).
- End-to-end UI waits (#3796, #3868, #3870).
- Stale suites, wait-for-demo-data and route-auth updates (#3673 — @uncleSlayer, #3791, #3809, #3824, #3826, #3954).
- Connector delete unit tests (#3821 — @R0gue-one).
- Tests that a later class or function of the same name had replaced now run (#3849, #3850, #3851).
- Docs & cleanup — the README gets the demo video and an install tip (#4033, #4034). Comments and text fragments are cleaned up (#3947 — @darshan-pipeshub, #3958 — @abhishekgml1991).
- Dependencies
- Dependabot bumps across the Node API, frontend, Python services and integration tests: axios, dompurify, electron, undici, multer, markdown-it, katex, sharp, prosemirror-view,
@grpc/grpc-js, engine.io, brace-expansion, source-map-js,@modelcontextprotocol/sdk, sentence-transformers, pyjwt, urllib3, litellm, oauthlib, multidict, pymongo, snowflake-connector-python and fsspec (#3652, #3734, #3735, #3736, #3737, #3738, #3739, #3740, #3741, #3742, #3745, #3746, #3747, #3748, #3749, #3750, #3959, #3960, #3961, #3962, #3963, #3964, #3965, #3967, #3969). @pipeshub-ai/mcpmoves to 3.0.1 (#4037).
- Dependabot bumps across the Node API, frontend, Python services and integration tests: axios, dompurify, electron, undici, multer, markdown-it, katex, sharp, prosemirror-view,
New contributors
- @shrikant-pipeshub made their first contribution in #3919
Full commit-level detail: GitHub release · Compare view
0.9.1 — OAuth and PKCE hardening, a path-traversal fix, a Kafka consumer that stops losing messages, and SDK 1.7.0
Stable release · View on GitHub0.9.1 is a patch release on top of 0.9.0, published the same day with 20 merged PRs. Most of it is security work: OAuth app management and consent now require a real sign-in session, PKCE is enforced where authorization codes are issued and redeemed, and a path-traversal hole in the record convert API is closed. It also fixes a Kafka consumer that could skip messages after a temporary failure, and permission-checks the related records that graph enrichment adds to a chat prompt. Upgrade from 0.9.0 is recommended.The 1.7.0 SDKs for TypeScript, Python and Go, released on October 12, 2026, are compatible with 0.9.1. They contain breaking changes; the fix for each one, in each language, is in the SDK section below.Renaming a conversation no longer returns
Deleting an agent conversation:
Renaming a conversation no longer returns
Deleting an agent conversation:
Go
Renaming a conversation no longer returns
Deleting an agent conversation:
On the delete-record, reindex-record, reindex-record-group and knowledge-hub-nodes responses,
Full commit-level detail: GitHub release · Compare view
Highlights
OAuth apps, personal access tokens and consent require a sign-in session
OAuth app management and the consent endpoints accepted OAuth access tokens and personal access tokens. A token with any scope could create an app with broader scopes, read or regenerate client secrets, or approve a consent request for itself. Every/oauth-clients/* and /personal-access-tokens/* route, the consent POST /oauth2/authorize, and the device-flow /device/verify and /device/consent routes now require the user’s interactive session JWT, and answer 403 to OAuth access tokens and PATs. PAT scopes are capped at the instance’s MCP_SCOPES (#3626 — @rish664).PKCE enforced where the code is issued and redeemed
PKCE was checked only onGET /oauth2/authorize, which returns consent data, not the code. A caller that skipped the GET could get a public-client code without a challenge and redeem it with no verifier and no client secret, and the plain method let a caller send its own challenge back as the verifier. A public client now must send a code_challenge to the consent POST, only S256 is accepted, and discovery advertises only S256 (#3630 — @rish231294).Record convert API: no more writes outside the temp folder
POST /api/v1/record/buffer/convert built its temp file path from the unsanitized upload filename, so an absolute path or ../ in the name let any signed-in user write a file anywhere the connectors service could write. The filename is no longer trusted for the path (#3628 — @rish231294).Breaking changes & upgrade notes
- OAuth app, personal access token, consent and device-flow routes reject OAuth access tokens and PATs with
403. This covers/oauth-clients/*,/personal-access-tokens/*,POST /oauth2/authorize,/device/verifyand/device/consent. Scripts that manage OAuth apps, mint PATs or approve a device login with a token must use a user’s sign-in session instead (#3626). - PKCE
plainis rejected with400. Public clients must send anS256code_challengeon both the authorizeGETand the consentPOST; without it the consent redirects witherror=invalid_requestand no code. Confidential clients may still omit PKCE (#3630). - The service-account email domain is reserved. A person can no longer be given an address in
service.pipeshub.internal, through invites, user creation or an email change (#3612). - SDK users: the 1.7.0 SDKs contain breaking changes. See the next section.
SDKs — 1.7.0 (TypeScript, Python, Go)
The TypeScript, Python and Go SDKs move from 1.6.0 to 1.7.0, released on October 12, 2026, and are compatible with PipesHub 0.9.1:@pipeshub-ai/sdk (v1.7.0 release), pipeshub-sdk (v1.7.0 release) and pipeshub-sdk-go (v1.7.0 release), all by @rish664.1.7.0 is a minor version, but it contains breaking changes. Read the list for your language before you upgrade.
TypeScript
Renaming a conversation no longer returns messages
updateConversationTitle returns only the updated conversation fields. Read the messages with a second call.Deleting an agent conversation: conversation can be empty
conversation is now a stored conversation, an empty object, or null. Check it before you read a field.Some type names changed
Use the new name. The data inside is the same.The
UpdateConversationTitle* message types are removed, because renaming a conversation no longer returns messages.Two errors have a new error class
A500 from knowledgeBase.uploadRecords is now thrown as ErrorResponse. A 410 from userAccount.authenticate is no longer an ErrorResponse. Both classes extend PipeshubError, so catch the parent class and check the status code.Behavior notes (not breaking)
- A user token on 22 endpoints. OAuth apps, personal access tokens, user info, org auth config and reset password now send only the user token. If you set up only an app token, add a user token:
- Stream event
datastays a string. Code that callsJSON.parse(event.data)keeps working.
Python
Renaming a conversation no longer returns messages
update_conversation_title returns only the updated conversation fields. Read the messages with a second call.Deleting an agent conversation: conversation can be empty
conversation is now a stored conversation, an empty object, or None. Your code runs as before, but type checkers need a check before you read a field.Some type names changed
Use the new name. The data inside is the same. All names are inpipeshub_sdk.models.The
UpdateConversationTitle* message types are removed, because renaming a conversation no longer returns messages.Two errors have a new error class
A500 from knowledge_base.upload_records is now raised as ErrorResponse. A 410 from user_account.authenticate is now PipeshubDefaultError, not ErrorResponse. Both classes extend PipeshubError, so catch the parent class and check the status code.A citation can have two shapes
A message citation is now aCitationReference or a PopulatedCitationReference. Your code runs as before, but type checkers need a check before you read a field.Behavior notes (not breaking)
- A user token on 22 endpoints. OAuth apps, personal access tokens, user info, org auth config and reset password now send only the user token. If you set up only an app token, add a user token:
- Conversation streams work.
dataonConversationStreamSSEEventandConversationMessageStreamSSEEventis typedAny, as on the other stream models. The SDK decodes each event’s JSON before validation, so the oldstrtype rejected those events.
Go
Go 1.26.8 or newer is required
go.mod now declares go 1.26.8 (it was go 1.22). Upgrade Go, or keep the default GOTOOLCHAIN=auto so that Go downloads the toolchain.Renaming a conversation no longer returns messages
UpdateConversationTitle returns only the updated conversation fields. Read the messages with a second call.Deleting an agent conversation: Conversation can be empty
Conversation is now a *components.ConversationUnion, which can be nil, a stored conversation, or an empty object.Some type names changed
Use the new name. The data inside is the same. Enum constants take the new prefix too, for exampleoperations.IsArchivedTrue becomes operations.ListAgentConversationsIsArchivedTrue.The
operations.UpdateConversationTitle* message types are removed, because renaming a conversation no longer returns messages.Two errors have a new error type
A500 from KnowledgeBase.UploadRecords is now returned as *apierrors.ErrorResponse. A 410 from UserAccount.Authenticate is now the default *apierrors.APIError, not *apierrors.ErrorResponse. Check for both types.Success is always true
On the delete-record, reindex-record, reindex-record-group and knowledge-hub-nodes responses, Success is no longer a public field. A 200 already means success, so you can drop the check, or use the getter.A citation can have two shapes
A message citation is now acomponents.CitationUnion: a CitationReference or a PopulatedCitationReference. Read the citation through its wrapper.Behavior notes (not breaking)
- A user token on 22 endpoints. OAuth apps, personal access tokens, user info, org auth config and reset password now send only the user token. If you set up only an app token, add a user token:
- Stream event
datastays a string. Code that reads*ev.Datakeeps working.
Agents & AI
- Graph enrichment respects permissions. The parents, children and attachments that enrichment adds to search results (Jira, Confluence, Linear) are now permission-checked in one batch, and their number is capped, so names, URLs and summaries of records a user cannot open no longer reach the prompt. A new
filter_accessible_record_idsprovider method backs it on Neo4j and ArangoDB (#3590 — @darshangodase). - Agent tools — behaviour tests for the GitHub, Jira and ClickUp tools, and fixes for the bugs they found (#3582); the agent answers from the workspace’s data when the Acme Corp demo is its only knowledge (#3609) — @shekharkadyan.
Fixes
- Kafka — the Kafka consumer used by the connectors and query services no longer loses messages after a temporary handler failure. The indexing consumer was not affected (#3515).
- Google — the personal Drive and Gmail connectors keep the fresher OAuth token after the library refreshes it, and save refreshed tokens to settings, which ends a refresh loop (#3571).
- Web — stored ETag and Last-Modified values are read from the file record (#3622).
- Frontend — three wordings the locale pass changed are restored (#3610).
Security & authentication
- Service accounts — a person can no longer be given an address in the reserved service-account domain, on any of the four paths that set an email, and the service-account routes get the same rate limit as the token and OAuth app routes (#3612 — @shekharkadyan).
- Toolset OAuth callback — a failed agent access check is answered with JSON instead of a redirect to a caller-supplied address, which the Node API used to follow on the server (#3611 — @shekharkadyan).
- S3 — the bucket name and region are matched literally when a stored file URL is read back, so a bucket such as
my.bucketno longer also matchesmyxbucket(#3608 — @shekharkadyan).
Developer experience & infrastructure
- AWS EKS — S3 on EKS gets a SigV4 preload config map in the Helm chart, EKS values and docs updates, and a bucket purge test (#3634 — @abhishekgml1991).
- Tests and CI — a weekly sustained-load test for search and chat that fails on errors and p95 regressions (#3614); a frontend unit-test coverage minimum (#3577); the shared “test” logger is no longer silenced for later tests (#3613); storage tokens are minted for the user the test client acts as (#3623); chat stream mocks really end or stay open (#3624); a missing SMB folder reads as an empty listing in the integration tests (#3620) — all @shekharkadyan.
Full commit-level detail: GitHub release · Compare view
0.9.0 — Projects, service accounts and device-code login arrive, with SMB and Drupal Wiki connectors
Stable release · View on GitHub0.9.0 is a large release: about 290 merged PRs since 0.8.0. Three things are new for people who use PipesHub. Projects give a team a shared place for chats and the knowledge behind them. Automation gets an identity of its own, through service accounts, service tokens and a device-code login for coding agents. And the connector fleet gains SMB 2/3, SMB1/CIFS and Drupal Wiki, a “Folders” sync filter for the object stores, and personal-access-token setup for GitHub Teams and GitLab.Most of the remaining work is about being correct under failure. A read that fails is no longer taken for “nothing there”, so a database restart can no longer look like a deletion; domain events go through an outbox, so a broker outage delays them instead of losing them; and errors across chat, sign-in, uploads and indexing now say what happened in plain words. A large share of the PRs are behaviour tests against real or simulated services, and the bugs those tests found are fixed in the same PRs.
Full commit-level detail: GitHub release · Compare view
Highlights
Projects
Projects are a shared workspace for conversations. A project has members, a knowledge base of its own, and chats that are either private or visible to the whole project; projects can be pinned and archived (#3304 — @abhishekgml1991). The project workspace was redesigned and gained an archived-projects tab (#3426 — @vanshg685), and opening a project now lands on the project page rather than a chat (#3438 — @tushar1245). Project delete is idempotent and unlinking a conversation sends explicit nulls (#3355 — @shekharkadyan), and OAuth apps can be granted the Projects and MCP server scopes (#3344 — @shekharkadyan).Identities for automation: service accounts, service tokens and device-code login
Until now, a script could only read from PipesHub by borrowing a person: aclient_credentials token acts as whoever created the OAuth app, with that person’s document access and role. A service account is an ordinary user record with kind: 'service' that nobody signs in as, so the existing permission graph decides what it can see (#3420 — @shekharkadyan). A service token is how a script authenticates as one: an administrator mints it for the account, scopes must be chosen explicitly, and agent:execute is refused (#3422 — @shekharkadyan). The token screen now says what each permission allows (#3606), and the OAuth app screen warns that client-credentials tokens inherit their creator’s access and admin role (#3417).For coding agents that should act as a signed-in person, there is now a device-code login: the agent starts a login, a person already signed in to PipesHub approves it, and the agent receives that person’s token. The same PR adds optional app self-registration and a smaller “eval” Docker install for trying search and chat on a laptop (#3197 — @shekharkadyan). An account deleted after approving gets no tokens (#3361).New connectors and connector options
- SMB 2/3 and SMB1/CIFS network shares — two connectors that share one walker and record mapper, so both write the same file-share graph model (#3533 — @abhishekgml1991).
- Drupal Wiki (KontextWork) — syncs users, groups, spaces, pages and attachments, with per-space permissions and page hierarchy. This first version does not remove pages deleted in the wiki (#3466 — @darshangodase).
- GitHub Teams and GitLab can be configured with a personal access token instead of OAuth (#3325 — @shekharkadyan).
- S3, MinIO, GCS, Azure Blob and Azure Files get a “Folders” sync filter (#3340 — @shekharkadyan).
- Team connectors authenticated as a different account — when the account a connector signs in with has a different email from the PipesHub user who created it, the creator could see none of the connector’s records. Jira and Confluence (Cloud and Data Center), GitHub Teams, GitLab and Linear now link the creator to that account for that connector only (#3313 — @darshangodase).
A failed read is no longer a deletion
Several code paths treated “the lookup failed” the same as “there is nothing there”, and then acted on it. During a graph or database restart that could delete a live record’s vectors, drop a mapping, or create a duplicate group. Each of those paths now raises instead: an unreadable graph or connector is not a deleted record or connector (#3444, #3458, #3463, #3474), a failed listing is not an empty one (#3416, #3472, #3477), a failed lookup no longer creates a duplicate group or role or reads as “no such record” (#3453, #3479), a vector-store manifest is never replaced by one that could not be read (#3480), and Jira and Confluence never treat a failed read as “no access” or skip a failed sync window (#3521, #3528). Search now says so when permissions cannot be read, instead of answering “no documents” (#3485). All by @shekharkadyan.In the same spirit, domain events from the Node.js API (users, orgs, service accounts, knowledge base relations, connectors) now go through an outbox: the event is written to MongoDB and a dispatcher delivers it, so a broker outage makes delivery late rather than lost. Previously the failure was logged and the caller was told the write had worked, which could leave a user who exists but sees nothing (#3445 — @shekharkadyan).Search: permissions pushed into the vector query, and better keyword ranking
Every search used to start by asking the graph for every record the user can see, often tens of thousands of ids, and passing that list to the vector store. Search now fetches the user’s accessible containers (connectors, record groups) and filters on those, falling back to record ids only for connectors with per-record permissions. The new path is behind a feature flag (#3230 — @shrikantNemiwal1). Hybrid search also ranks better: the BM25 sparse leg now applies IDF, so a rare name outweighs a common word (#3488 — @abhishekgml1991). Deleting a connector or collection removes its embeddings by membership instead of shipping every record id in one message, which failed past roughly 25,000 records on Kafka (#3159 — @shrikantNemiwal1).Chat: stop generation, working non-streaming endpoints, and custom skills
A running answer can be stopped (#3301 — @abhishekgml1991), with follow-up fixes so a reload no longer shows an empty “Stopped” reply, the question stays on screen when Stop lands first, and a run the server aborts ends the turn cleanly (#3329, #3464, #3511). The four JSON (non-SSE) chat routes for conversations and agent conversations, which API callers use, were broken and work again (#3591 — @abhishekgml1991). Custom skills can be enabled behind a feature flag, with prompt tuning and fixes (#3331, #3338, #3378 — @abhishekgml1991; #3484 — @tushar1245), and the Google Drive, Gmail and Calendar MCP servers are registered in the catalog (#3478 — @tushar1245).Errors that say what happened
A sweep across the product replaces raw exception text and generic 500s with messages a person can act on: sign-in, uploads, validation and model setup (#3389), chat and agent chat (#3390), indexing failures (#3388), speech (#3407), storage (#3391), and service failures in general (#3386, #3399, #3401). “Try again” errors stay retryable instead of becoming 500s (#3380), a missing language model is named instead of failing records with'llm' (#3381), and a 500 no longer repeats what the failure said (#3419). All by @shekharkadyan.Breaking changes & upgrade notes
- The storage service no longer accepts user tokens.
/api/v1/document/*(download, buffer, upload, uploadNextVersion, rollBack, directUpload, delete, metadata, isModified) checked only that the document was in the caller’s org, never the caller’s record permissions, so any signed-in employee (or a PAT/OAuth app withkb:read/kb:write) who learned a document id could read, overwrite, roll back or delete files in private knowledge bases and other users’ chat artifacts. Those routes are removed and answer 404; only the service-token/api/v1/document/internal/*routes remain. API clients should use the permission-checked Knowledge Base routes instead, e.g.GET /api/v1/knowledgeBase/stream/record/{recordId}. User-facing links the backend generates (agent artifacts, SQL query CSV exports on local storage) now point at that stream route, and SQL result exports are saved as versioned artifact records owned by the requesting user. The agent toolget_record_download_urlnow checks the user’s access to the record before minting an S3/Azure signed URL. Chat messages persisted before this change that embed a/api/v1/document/{id}/downloadlink (local storage CSV exports) no longer download (#3593 — @abhishekgml1991). - Each organization is limited to 5 admins, counting pending admin invites. Promoting, inviting or editing an invite past the cap is refused with a 400. (#3284 — @Pranjal-wq).
- Sign-in no longer reveals whether an email has an account. An unknown email gets the same status and message as a wrong password or code, and a locked account is refused with that same answer (#3529). SAML sent to the normal sign-in endpoint is answered instead of hanging (#3531), and a multi-step sign-in policy that includes SAML is refused on save (#3510). Clients that matched on the old “blocked” or “no such user” answers need to change.
- An auto-blocked account loses its active sessions at once (#3277 — @krishsingh120), and only the account owner can change its email address (#3272).
- Web-search API keys are no longer sent to members in configuration responses (#3532).
- Keyword scoring changes on existing collections. IDF is turned on in place the first time a collection is written to, or when the query service starts; stored data is not rewritten and no re-index is needed. Expect hybrid search rankings to shift (#3488).
- GitLab requires
httpsfor OAuth tokens as well as personal access tokens; plainhttpneeds an explicit opt-in (#3362). - Each GitHub and GitLab connector instance (personal and team) now syncs exactly one repository. The Repository filter is a single choice, and an instance cannot be saved or enabled without one valid repository. A stored configuration with no repository, two or more, or a
not_inoperator is refused with the reason, so an instance that synced several repositories must be split into one instance per repository (#3251 — @darshangodase). install.sh --upgradenow honours--versionandPIPESHUB_VERSION(#3175).
Connectors
- GitHub and GitLab — personal-access-token setup for GitHub Teams and GitLab (#3325); one repository per connector instance (#3251 — @darshangodase);
httpsrequired for GitLab OAuth tokens (#3362); four GitLab sync and token fixes found by behaviour tests against a fake GitLab (#3542); the GitHub Teams “all teams” permission is handled conditionally (#3486 — @darshangodase); integration coverage for GitLab and the GitHub personal connector (#3165 — @darshangodase, #3357). - PostgreSQL and MariaDB — sync no longer loses, strands or leaks tables (#3332); read-only constraints, pooler support and query fixes (#3349); the database group is never deleted as a leftover schema group (#3352); MariaDB incremental sync fixed alongside new integration coverage (#3345); live PostgreSQL coverage (#3180, #3330).
- Object stores (S3, MinIO, GCS, Azure Blob, Azure Files) — the “Folders” sync filter (#3340); no checkpoint past an object that failed to process (#3353); Azure Files re-indexes edited files and removes deleted ones (#3334) and no longer crashes creating placeholder parents in nested folders (#3395 — @cursor[bot]); two Azure bugs fixed while testing S3, Azure and MongoDB replica sets against real servers (#3367); MinIO and object-store test coverage (#3179, #3199, #3341).
- SharePoint, OneDrive and Outlook — SharePoint now deletes records for items deleted at the source (#3347); six OneDrive sync and access bugs fixed (#3539); OneDrive no longer holds the group delta for a member removal already applied (#3564);
microsoft-kiota-httpis pinned below 1.13 so Graph requests are retried (#3540); SharePoint test wiring (#3186, #3461, #3476). - Google Drive and Gmail — a Drive timeout error (#3218 — @R0gue-one); folder-filtered Drive syncs no longer silently skip files (#3547); one folder refused with an unrecognised 403 no longer fails every run (#3560); Drive test stability (#3494).
- Jira and Confluence — seven connector bugs previously pinned as expected failures are fixed (#3579); Jira Data Center keeps project roles when the group list is cut off at the picker limit (#3561); behaviour tests for sync, access and recovery (#3506, #3350).
- Box — nine sync and access bugs found by behaviour tests over a fake Box API (#3553); shared files stay in their owner’s drive and deletes are applied (#3557).
- Nextcloud and BookStack — three Nextcloud sync bugs fixed with coverage against servers in the stack (#3354), then the 12 known sync, delete and download bugs (#3573), and file names containing
#or?(#3537). - Dropbox, BookStack and Salesforce — records are deleted by key in the delete handlers (#3351); a Dropbox assertion error and its logs (#3223 — @R0gue-one).
- Web and RSS — a re-indexed page advances its record version (#3323); one rate-limited site no longer stalls a whole crawl (#3394); seven crawl bugs found by behaviour tests over a fake website (#3554);
robots.txt, removal of gone pages and other crawler gaps (#3563); every redirect is checked before it is requested, even when a site refusesHEAD(#3575); a moved file’s old address is removed when its new one is gone (#3604); Web and RSS integration coverage (#3346). - Local FS — the connector was refactored (#3139 — @R0gue-one); its exclude filter is fixed (#3358); a sync can reset its own records on ArangoDB (#3406); one record it cannot delete no longer ends the sync (#3413).
- Slack — rotating tokens are renewed, a dead one no longer retries forever, and files download with the token in use after a rotation (#3546, #3572, #3580).
- ServiceNow — a set of connector defects fixed (#3097 — @kemalmahmuljin).
- Zammad — covered against a real Zammad (#3415).
- All connectors — every registered connector is held to the
BaseConnectorcontract (#3178); stream-record response errors are handled (#2783 — @shrikantNemiwal1); connector routes are driven over HTTP, with three bugs fixed (#3505); four small bugs fixed on the workspace connector screens (#3545); crawling-manager fixes for one-time schedules, schedule replacement and remove-all, plus team pictures (#3549).
Agents & AI
- Agent loop — stale plan and verify checks, the deep-mode hand-off check and a Drive credential mix-up are fixed (#3504); a reply cut off at the output limit is saved as one answer (#3517); replan can see its plan in plan-then-execute mode (#3534).
- Agent tools — behaviour tests for the Teams, ClickUp and GitHub tools fixed 14 bugs (#3497), with further fixes from the Calendar, Slack and Teams tests (#3558) and the SharePoint, Gmail and Lumos tests (#3587); Knowledge Hub name search and SQL tool edge cases, with real tests for the MariaDB, Redshift and Knowledge Hub tools (#3535);
list_filessearches by name and stays inside the agent’s sources (#3541); an agent’s name search finds files in its knowledge bases (#3570). - Agent routes and citations — permission and error gaps closed (#3501). User and org context in system prompts is now gated (#3429 — @abhishekgml1991).
- Demo data (Acme Corp) — demo sources are labelled in answers, search results and record lists, and the demo is offered for removal once real data arrives (#3482, #3569); each person can show or hide it (#3512) and an admin can turn it off for everyone or remove it permanently (#3514); the prompt no longer discards demo data (#3500), made-up source links are not sent (#3576), the pricing question is locked for people who cannot see the answer (#3499), and the golden questions are fixed and guarded in agent mode (#3495). Demo persona accounts on the reserved domain get a starting password (#3264).
- Parsing — EPUB support is back, reading books directly and in bounded chunks (#3518, #3525); six parsing bugs fixed by testing the parsers with real files (#3509); HTML tables parse as grids, one row per
<tr>(#3507 — @abhishekgml1991); the YAML parser was updated (#3328 — @jatingaur18). - Embeddings — a null guard on embeddings (#3305 — @Saneajayy) and a retry for Gemini embeddings (#3519 — @kemalmahmuljin).
- Evals — the live harness no longer reports a run that measured nothing as passing (#3187); the no-sources prompt does not name a tool the model cannot see (#3303); golden agent evals run on pull requests (#3177) and answer-quality evals nightly and weekly (#3412).
- Telemetry — activation events for tokens, MCP clients and answers with sources (#3267);
pat_createdreports the lifetime the token was minted with (#3589).
Fixes
- Chat — a failed chat keeps its real error across a reload (#3296 — @Pranjal-wq); seven bugs found by covering the chat controller (#3496) and six more from the chat, message box, message list, knowledge-base page and connector filter tests (#3503); attachments work in shared chats (#3465 — @Pranjal-wq), and Shared Chats shows who shared each one (#3294 — @Pranjal-wq).
- Frontend — long upload filenames scroll inside the file tree (#3309 — @Pranjal-wq); the collapsed sidebar no longer clips the workspace menu (#3392 — @vansh0211); the knowledge-base sidebar uses one loader for folder lists and clears it on sign-out (#3530); the auth store is imported from
config.ts(#3574 — @R0gue-one); bugs found by new unit coverage of chat streaming, sign-in, connectors, Collections and the agent builder (#3339, #3498, #3548). - Localization — German locale coverage completed (#3428 — @nikdav), locale coverage finished and checked for every language (#3588 — @tushar1245), and strings and UI that the locale pass dropped are restored (#3578 — @abhishekgml1991, #3586).
- Knowledge bases — teams are checked before a knowledge base is shared, and All-team members are not re-added (#3371); non-English file names stay intact on upload (#3370); two upload bugs fixed by covering the knowledge base API over HTTP (#3538); hidden collections are excluded from knowledge hub search seeds (#3337 — @shrikantNemiwal1).
- Users and orgs — concurrent signups on a fresh install no longer collide on a slug and return a 500 (#3321); the user is saved before the user-created event is published, and duplicate emails are refused cleanly (#3281).
- Search — Neo4j search filters no longer match labels nothing stores (#3372).
- Timestamps — naive ISO timestamps are treated as UTC in
parse_timestamp(#3470 — @pamod-madubashana). - Nightly findings — three batches of fixes for failures the nightly and end-to-end runs found (#3439, #3440, #3441).
Performance & reliability
- Indexing consumers no longer fail to start or hang on shutdown (#3527), and message consumers skip unreadable messages instead of retrying them, tested against real broker behaviour (#3508).
- ArangoDB keeps one HTTP session per event loop (#3492 — @kemalmahmuljin). The
raise_on_errorargument is keyword-only on every graph lookup that has it (#3483). - Configuration store — four bugs fixed in the encrypted etcd store (#3550); watchers receive decrypted values and directory listings stay inside the directory (#3551); etcd login, timeout units, port default, watch shape and create-if-absent outages (#3559).
- Pluggable backends — every backend is tested against a real server in CI, with three bugs fixed (#3374).
- Kubernetes — a guided AWS EKS deployment with chart-owned MongoDB and Redis; the same PR fixes streamed chat answers failing to save on replica-set installs (#3544 — @abhishekgml1991). The Helm chart installs healthy again and is tested in CI (#3373).
- Resilience and load tests — fault injection for connectors and dependency outages (#3369); database restarts, AI provider outage and unwritable storage (#3387, #3457, #3462); deletes that leave data behind and blocks that leave sessions open (#3235); weekly indexing, search and chat benchmarks with baseline comparison (#3377, #3398) and scale and stress runs (#3402).
Security & authentication
- Five security fixes found by new sign-in, user and config tests: sign-in now enforces the methods the organisation allows, a later sign-in step can no longer be completed as a different account, a one-time code works only once, the internal settings-reload endpoints no longer return server secrets, and unreadable Slack bot settings are no longer treated as “no bots” and overwritten (#3502).
- Microsoft sign-in checks that an ID token was issued for this app and tenant (#3393). The Azure AD provider config is published under the key the frontend reads (#3297 — @rbales79), and the first SSO login of a JIT-provisioned user no longer fails on the org lookup (#3300 — @rbales79).
- CI keeps the PR-validation checkout token out of reach of pull-request code (#3316).
- Permission tests check what an ordinary member can see with realistic files (#3365), what each person can open in Drive and GitHub (#3364), and detect the account lock without relying on the old “blocked” answer (#3566).
Developer experience & infrastructure
- One command for the offline suites —
scripts/verify.sh(#3196), with CI now running the Omnigent helper tests (#3188), the frontend unit tests (#3190), the Python integration tests that need no services (#3189) and the Electron local-sync tests (#3191). - Release automation — release verification, rollback and post-release probing (#3176); the eval install and ArangoDB are checked in the install and release tests (#3368); the arm64 image is built and started from
mainevery night (#3366). - Integration tests — sharded into parallel jobs (#3326, #3400), run on Neo4j by default on pull requests (#3431 — @siddhant-ota), rotated onto Kafka two nights a week (#3385), and run on Azure OpenAI (#3433, #3437 — @siddhant-ota). They now cover MCP (#3289 — @siddhant-ota), the published MCP package against a real PipesHub (#3450), the
pipeshub-ai/examplesrepository and its Go SDK starter (#3600, #3605), and the SMB suite against a Samba share (#3598). The nightly fails when a connector’s credentials or the storage secret are missing (#3409, #3607), and placeholder connectors are left out of the coverage count (#3356). - Test reliability and repairs — OAuth app creation retries (#3193); the connector deletion test can fail (#3200); a missing
Tupleimport (#3315); chat-streaming and stop-generation tests (#3317); user-activity tests (#3320, #3327 — @abhishekgml1991); MinIO images, first from quay.io and then from Chainguard (#3318, #3493); the test client is granted every backend scope (#3342); storage suites (#3410, #3434); admin-only AI model checks (#3418); container-filter tests on all three vector stores (#3432); the graph-entity guard step (#3451); and smaller fixes (#3383, #3384, #3396, #3397, #3414, #3454, #3456, #3460, #3523, #3536, #3552, #3565, #3567, #3555, #3599). - Browser tests — end-to-end tests fail instead of silently passing, with a fast smoke set (#3359); real browser tests for connecting a data source and setting up an AI model (#3360), and for a cited answer, invites, sharing and agents (#3375); Projects tests (#3343, #3442); and smaller fixes (#3336, #3403, #3404, #3405, #3408, #3475). Retrieval tests search the corpus’s own knowledge base (#3335).
- Coverage — mocha worker coverage is no longer lost at shutdown (#3520); lines that mention “password” are no longer hidden and the Python minimum is 89.8 (#3526); the nightly can run the demo suite on its own (#3522).
- API docs — SSE event data is typed as a JSON object, not a string (#3255); the error envelope carries the request id it already sends (#3430); the storage service-to-service routes are described (#3411); populated citations on create and add-message are documented, and the nightly installs the SMB client libraries (#3603).
- Docs — the README leads with what you can build (#3253) and its Quickstart and FAQ no longer describe two different deployment methods (#3322 — @aBiR1D); CONTRIBUTING gains a labeled-issue path and issue templates (#3258).
- Dependencies —
@pipeshub-ai/mcp2.4.2 (#3311 — @siddhant-ota);anyioandsoupsievein the integration tests (#3348, #3324 — @dependabot[bot]).
New contributors
- @kemalmahmuljin made their first contribution in #3097
- @krishsingh120 made their first contribution in #3277
- @aBiR1D made their first contribution in #3322
- @cursor[bot] made their first contribution in #3395
- @vansh0211 made their first contribution in #3392
- @pamod-madubashana made their first contribution in #3470
- @nikdav made their first contribution in #3428
Full commit-level detail: GitHub release · Compare view
0.8.0 — Fair scheduling across connectors, an indexing pipeline that holds up under load, and Redis Cluster readiness
Stable release · View on GitHub0.8.0 brings 103 merged PRs since 0.7.0, and most of the weight is in the indexing pipeline. Each connector now gets its own lane into indexing, so one connector’s backlog no longer blocks every other connector. The consumers size their concurrency from what Neo4j, Redis and the parsing and embedding services can actually take, and they back off when those services struggle. A record whose event is lost or abandoned no longer sits in No more records stuck in
A record could be stored
Full commit-level detail: GitHub release · Compare view
QUEUED forever. Redis access moves behind one connection provider per backend, which prepares PipesHub for Redis Cluster and AWS MemoryDB and makes TLS settings apply everywhere.The release also scopes more things to the organization: MD5 deduplication, connector access, agents, signed URLs, local storage and notifications. Python services now accept only real service tokens as service credentials. Chat messages move out of the conversation documents into their own collections through a one-time migration. Read the upgrade notes before you upgrade: several Redis, TLS and vector-store settings now fail at startup instead of being silently ignored.Highlights
Fair scheduling: every connector gets its own lane into indexing
All record events used to share one queue that indexing drained in arrival order. The first connector to start syncing took the whole pipeline until it finished, and a newly connected source showed no progress at all while an unrelated backlog cleared. Producers now place each record event in a lane chosen from its connector. The indexing consumer reads every lane and dispatches with Deficit Round Robin over per-connector virtual queues, on both Kafka and Redis Streams (#3126 — @abhishekgml1991).An indexing pipeline that sizes itself to what downstream can take
Indexing concurrency used to be derived from CPU alone, with nothing tied to Neo4j’s connection pool, the lease Redis or the parsing and embedding services. The total index budget is now6 × CPU, between 24 and 96. Downstream symptoms (a 429, an exhausted Neo4j or Redis pool, an unreachable service, repeated timeouts, rising hold time) feed a resource governor that cuts the pools within one sample and holds growth until the service recovers. Heavy documents (PDF, Office, images) and light ones (pages, issues) are admitted per tier, so attachments queued behind slow parses no longer starve the light pool. A cancelled graph transaction rolls back instead of leaking its Neo4j connection, and waiting for a parse slot no longer uses up a record’s processing budget (#3108, #3170, #3174 — @abhishekgml1991). The full write-up is in docs/indexing-service.md.No more records stuck in QUEUED
A record could be stored QUEUED before its event was published, or acknowledged by a consumer that gave up on it, and then nothing ever looked at it again. New connector records now start as NOT_STARTED and become QUEUED only once their event is acknowledged, and the stranded-record sweep is on by default (#3163). A consumer that abandons a message first marks the record FAILED with a reason (#3140), the sweep no longer re-queues healthy records whose timestamps looked old, and storage uploads can be retried safely (#3274) — all @abhishekgml1991. Documents are no longer silently dropped when indexing fails to start (#3226 — @shekharkadyan), and a message that crashes its consumer is dead-lettered by its delivery count (#3037 — @blockgroot).Redis: one connection provider, ready for Redis Cluster and AWS MemoryDB
Node.js and Python each build Redis connections through a single provider (IRedisConnectionProvider). REDIS_MODE selects standalone (the default) or cluster, which speaks Redis Cluster and MemoryDB. The REDIS_TLS* settings are now honoured by every Redis client, REDIS_KEY_NAMESPACE isolates keys, and the crawling queue moves to a hash-tagged key prefix so it works on a cluster (#3155, #3254 — @abhishekgml1991). Several of these changes need attention on upgrade; see below.Vector collection strategy and per-org deduplication
A newVECTOR_COLLECTION_STRATEGY setting can group records into one vector collection per connector type instead of a single collection, with vector membership tracked per connector and record group. MD5 deduplication is now scoped to one organization, and connector access and deletion follow clearer rules (#3112 — @abhishekgml1991).Chat messages get their own collections
Messages are split out of the conversation and agent-conversation documents intochatSessions and chatSessionMessages. New chats write there straight away, and a one-time backfill copies existing conversations on first boot (#3148 — @tushar1245).S3 with an instance IAM role
S3 storage no longer needs an access key and secret: when both are left empty, PipesHub uses the AWS default credential chain, so a deployment on EC2 or ECS can run with its instance role. The key pair is all-or-nothing, the health check uses the same resolution as the provider and says which mode it took, and onboarding makes the fields optional (#3143, #3144 — @abhishekgml1991). The S3 health check also verifies content and signed URLs (#3141).Breaking changes & upgrade notes
- Redis TLS is now enforced wherever a Redis client is created. Before, only part of the code read
REDIS_TLS. A deployment runningREDIS_TLS=trueagainst a plaintext Redis will now fail to connect; check that your endpoint supports TLS, or unset the variable.REDIS_TLS_ENABLEDandREDIS_TLS_REJECT_UNAUTHORIZEDaccepttrue/1/yes/onandfalse/0/no/off, and any other value fails startup.REDIS_TLS_REJECT_UNAUTHORIZED=falseis refused when Redis credentials are set; useREDIS_TLS_CA_PATHinstead, which is now read as a file and fails startup if it cannot be read.REDIS_TLS_ENABLEDis OR-ed with the TLS flag stored in the admin UI for most clients, but the Node.js Redis Streams and key-value store clients read onlyREDIS_TLS_ENABLED: if you turned TLS on only in the admin UI, also setREDIS_TLS_ENABLED=true(#3155). REDIS_DBis deprecated. It still works withREDIS_MODE=standalonebut fails startup in any other mode; useREDIS_KEY_NAMESPACEfor isolation.REDIS_KEY_NAMESPACEtogether withMESSAGE_BROKER=redisis rejected at startup, because it does not cover Redis Streams names (#3155).- The crawling queue moves from the
bullkey prefix to{crawling}. The first boot after upgrade removes the old keys and re-creates every connector sync schedule from its stored configuration. If the connector service is not reachable within the startup retry window, the schedules are not re-created until the Node.js service restarts: check that your scheduled syncs are back after the upgrade, and restart the Node.js service if they are not (#3155). VECTOR_DB_TYPE=redisis gated onVECTOR_REDIS_MODE(which defaults toREDIS_MODE), so the app can run on MemoryDB while the vector index stays on a standalone Redis (#3155).- New
VECTOR_COLLECTION_STRATEGYsetting (defaultsingle, the existing behaviour). It is read only on the first startup that finds nothing stored; after that the stored value wins, and a value that contradicts it fails startup. Changing it on a live deployment is an embedding rebuild, not a config edit (#3112). - MD5 deduplication is scoped to one organization. Content that was deduplicated across orgs re-indexes once per org after the upgrade, so expect a one-off rise in indexing volume and vector-store size. Existing records are not rewritten (#3112).
- Connector deletion is “an administrator, or whoever created it”, for team and personal connectors alike, and connector lookups are scoped to the caller’s organization (#3112).
- The stranded-record sweep is on by default (
STRANDED_RECORD_REPUBLISH_AFTER_SECONDS, 3600s); it was off (#3163). - New and changed indexing settings.
MAX_CONCURRENT_INDEXINGstill overrides the new index budget, andMAX_CONCURRENT_PARSING/MAX_CONCURRENT_INDEXINGshould normally stay unset.NEO4J_MAX_CONNECTION_POOL_SIZE(default 100) is new. Real Neo4j transactions are available behindNEO4J_EXPLICIT_TRANSACTIONS=true, off by default: try it on staging first and watch the indexing logs forDeadlockDetected. The parsing client’s read timeout now followsRECORD_PROCESSING_TIMEOUT(#3170). - A document the parsing service cannot parse returns
422, not500, so it fails as a document error on the first attempt instead of tripping the parsing circuit breaker (#3170). - Chat storage migration. The first boot copies every conversation and agent conversation into
chatSessionsandchatSessionMessages. The copy is resumable per document and per collection, and the legacyconversationsandagentconversationscollections are kept, no longer written to. A legacy document without anorgIdstops the migration instead of being copied without one (#3148). - Python services accept a token signed with the scoped secret only as a service token with the
connector:signedUrl,record:content,conversation:createorfetch:configscope. Refresh, password-reset, email-verification, mail, storage and user-lookup tokens now get401there. Refresh, password-reset and verification tokens are signed with a key derived from the scoped secret that the Python services never hold (#3283). - Query-service tuning variables now reach the service.
QUERY_UVICORN_WORKERS(new, default1),PIPESHUB_AGENT_TRANSPORT,PIPESHUB_ACCESSIBLE_RECORDS_CACHE,PIPESHUB_ACCESSIBLE_RECORDS_CACHE_TTLandPIPESHUB_SIGNED_URL_CACHE_SECONDSwere ignored by Compose and Helm before. Every default keeps the current behaviour (#3113 — @shrikantNemiwal1).
Connectors
- Google Drive and Gmail — blocking Google API calls move onto a shared thread pool (#2886); items outside the workspace are fetched (#3052); streaming a record from a shared drive works in the personal Drive connector (#3160) — all @R0gue-one.
- Jira — the Jira connector was refactored (#2775 — @darshangodase). Jira Data Center and Linear send notifications when a sync, a project or team, a permission read or an attachment sync fails (#3123 — @darshangodase).
- Confluence — “Grant Jira user access” defaults to Yes (#3137 — @tushar1245).
- GitLab — permission fixes for confidential work items (#3248 — @darshangodase).
- OneDrive — blocked users are skipped during sync (#3164 — @R0gue-one).
- Notion — an inherited OAuth app is handled, with better logging (#3222), and nested data sources are handled (#3252) — @shrikantNemiwal1.
- Slack — the connector icon is served from the path it declares (#3107).
- All connectors — operating-system metadata files are filtered out before indexing (#3147 — @R0gue-one); the connector factory can unregister a connector (#3162 — @vishwjeet-pawar03); the connector stats endpoint is fixed (#3133 — @vishwjeet-pawar03).
Agents & AI
- Coding sandbox — the sandbox that runs agent code was restructured into Docker, settings, registry and governor modules (#3149 — @abhishekgml1991).
- Embeddings — embedding calls get a timeout and a shared retry policy (#3161 — @abhishekgml1991), and chunks are sized by tokens against the embedding model’s limit instead of by characters, so a long block no longer fails the whole record (#3286 — @rbales79).
- Agent builder — a correct default reasoning effort, with its locale keys (#3166 — @vishwjeet-pawar03, #3173 — @Pranjal-wq); an agent with no knowledge source attached says so (#3269 — @rbales79).
- MCP — fallback MCP configurations are fixed (#3221 — @vishwjeet-pawar03).
- Retrieval — retrieved images are kept after transport deduplication (#3244 — @TatshSiow).
Fixes
- Users and workspaces — when auto-join is off, people can ask to join a workspace, with notify and decision emails (#3130, #3158 — @Pranjal-wq); Groups move out of People, with permission placeholders for the open-source edition (#3068 — @Pranjal-wq); inactive users are left out of team member lists (#3171 — @darshan-pipeshub); the invite button is disabled when SMTP is not configured (#3249 — @tushar1245); org signup answers 400, not 500, for validation errors (#3098 — @dineshyadav03).
- Knowledge base — fetching a deleted record no longer answers 500 (#3246 — @Saneajayy).
- Configuration — AI model and storage settings fixes (#3145) and a rework of how stored secrets are redacted in settings responses (#3091) — @vanshg685; the vector-store actions in Labs show under the right condition (#3127 — @vishwjeet-pawar03).
- Graph databases — the ArangoDB app schema and an optional Knowledge Hub search parameter (#3119 — @shrikantNemiwal1); agent-template soft delete on ArangoDB passes the right arguments (#3125 — @Anai-Guo).
- Logging — the query service logs unhandled exceptions in its auth middleware instead of swallowing them (#3224 — @L4XB); a Slack request-verification log line is removed (#3217 — @tushar1245).
- Smaller fixes in the token manager, the installer, the graph providers and the environment templates (#3288 — @abhishekgml1991).
Security & authentication
- Service tokens and URL fetches — the Python services stop accepting any scoped-secret JWT as a user credential, and the Skills URL import can no longer fetch arbitrary server-side URLs (#3283 — @abhishekgml1991).
- Cross-org isolation — another org can no longer chat as an org’s service agent or probe whether one exists, signed-URL minting and download check identity, record org and permissions, and local storage rejects any path that leaves the org’s folder (#3118 — @Pranjal-wq). Further org-id fixes in sign-in, mail and configuration (#3109 — @vanshg685), and notification lookups filter by org (#3216 — @R0gue-one).
- Sessions and sign-in — a role change ends the user’s sessions in every workspace that uses the same email (#3169 — @Pranjal-wq); the one-time code logic is hardened (#3102 — @rish664); the OAuth client secret is no longer returned when JIT provisioning is disabled (#3099).
- Toolsets — toolset routes no longer fall back to client-supplied headers for the user and org identity (#3103 — @igennova).
- Reporting — the address for security vulnerability reports changed (#3276 — @rish664).
Developer experience & infrastructure
- Installer and Compose — download progress no longer repeats in the terminal (#3086); a MongoDB segfault no longer fails the install or risks data (#3100); the manual quick-start produces a working stack (#3105); a first-run script creates the organization and writes a personal access token to a file without printing it (#3182).
- Docs — the README states what PipesHub is once, at the top (#3168), puts the curl install command first (#3089), drops Bitbucket from the code-search claim (#3088), and moves file-format support and the tech stack to the FAQ and docs (#3256, #3257); the contributor setup guide, the manual Compose examples and the connector playbook are corrected (#3104, #3106, #3111); the Spanish deployment FAQ is updated (#3273 — @defawan); the 0.7.0 changelog was added (#3142 — @rish664).
- Integration and end-to-end tests — Groups Playwright specs (#3087 — @Pranjal-wq); test fixes and updates (#3090 — @jatingaur18, #3101 — @abhishekgml1991, #3156 — @vanshg685, #3172 — @siddhantota); org response validation (#3129 — @R0gue-one); GitHub, GitLab and GitHub Teams environments (#3157, #3146 — @darshangodase).
- Dependencies — Node.js API:
nodemailer9.1.1,sharp0.35.4,morgan,js-yaml,hono,multerand@xmldom/xmldom(#3209, #3227, #3211, #3228, #3229, #3210, #3205); frontend:sharpandnext,js-yaml,vitest,browserslist,fast-uri,@xmldom/xmldomand@humanfs/node(#3213, #3212, #3207, #3132, #3150, #3152, #3151); Python and integration tests:nltk,thriftandsnowflake-connector-python(#3135, #3134, #3131, #3124) — all @dependabot[bot].
New contributors
- @blockgroot made their first contribution in #3037
- @dineshyadav03 made their first contribution in #3098
- @Anai-Guo made their first contribution in #3125
- @darshan-pipeshub made their first contribution in #3171
- @L4XB made their first contribution in #3224
- @rbales79 made their first contribution in #3269
- @defawan made their first contribution in #3273
Full commit-level detail: GitHub release · Compare view
0.7.0 — Personal access tokens, a GitHub connector, AWS Bedrock, and a one-command installer
Stable release · View on GitHub0.7.0 opens PipesHub up to external tooling and new deployment shapes. Any member can now mint a scoped, revocable personal access token to connect an external agent or script to the API and MCP server, and the MCP server itself runs on the new agent loop. A GitHub teams connector and a HackerNews datasource join the connector catalog, a code parser makes source files searchable with correct citations, and multimodal embeddings, an EPUB parser, and AWS Bedrock widen the model and content layer. Self-hosting gets a one-command Docker installer that pulls fresh images, checks host resources, and reports clearly when something fails on first run. Roughly 100 merged PRs since 0.6.0.Operators should read the upgrade notes: org admin privilege moves from admin user groups to a
Full commit-level detail: GitHub release · Compare view
role field on users via a boot migration, a storage-record org-ID backfill runs on startup, the installer renames Compose containers, and MCP / Actions are now controlled from Labs feature flags rather than environment variables.Highlights
Personal access tokens for MCP and API access
Any org member can create a long-lived, scoped, revocable Personal Access Token under Workspace → Developer Settings, for example to connect an external agent to the PipesHub MCP server without borrowing a 24-hour session token or an admin-owned OAuth app that ignores per-user permissions. PATs are minted through the existing OAuth access-token machinery via an auto-created per-org system app, carry aphpat_ prefix so secret scanners recognize them, and default to a 30-day expiry (#2933 — @shekharkadyan). They are documented in the OpenAPI spec (#2940), and a follow-up fixed PATs failing on any route that forwards the auth header to a downstream service (#2971).MCP server on the new agent loop, gated from Labs
The MCP server now runs its tools through the new agent loop (#2830 — @tushar1245). MCP is enabled from the Labs settings page rather than an environment variable, and code execution is now env-only viaPIPESHUB_ENABLE_CODE_EXECUTION (#3044). Actions and toolsets sit behind a new ENABLE_ACTIONS platform flag, enabled by default, so admins can hide them from the navigation, agent builder, and chat (#3045). A schema-loss bug that broke MCP tool arguments was fixed (#3078).GitHub teams connector, HackerNews datasource, and a code parser
A GitHub teams connector lands, with the personal GitHub connector refactored to share its methods (#2989 — @darshangodase). A HackerNews API client and datasource were contributed (#3060 — @igennova). Source files are now parsed by a dedicated code parser (#3014 — @jatingaur18) and citations into code files were fixed (#3064).Multimodal embeddings, EPUB, AWS Bedrock, and pasted text
Multimodal embeddings and an EPUB parser were added (#2919 — @abhishekgml1991), with support for multimodal OpenAI-compatible embedding endpoints (#2952 — @TatshSiow) and image context-engineering changes so images reach the model with better surrounding context (#3084). AWS Bedrock joins the supported model providers (#3062 — @abhishekgml1991). In chat, long pasted text becomes an attachment chip with a preview dialog instead of flooding the input (#2889). Model access on an agent is now optional (#2960).Query service throughput, phase two
Building on the 0.6.0 overhaul, this round targets CPU in the query path: a read-through Redis cache of each user’s accessible record IDs, invalidated from the connector and indexing services; batched graph and storage lookups with a bounded process-wide HTTP session and Redis client; optional direct provider-SDK transports for Azure OpenAI, OpenAI, Anthropic, and Gemini behindPIPESHUB_AGENT_TRANSPORT; and a fix for the Node gateway building a public key on every JWT verify (#2963 — @shrikantNemiwal1). Measured at 4 workers / 32 users: steady-state throughput up from 37.8 to 43.0 req/min, p50 turn latency 34.4 s → 27.9 s, and Node gateway p50 2,738 ms → 573 ms. The accessible-records cache is on by default and can be disabled with PIPESHUB_ACCESSIBLE_RECORDS_CACHE=0; a loadtest harness ships alongside.Admin role moves to the user record
Org admin privilege now lives onUser.role (admin | member) instead of membership in a legacy admin user group. A one-time boot migration promotes admin-group members, defaults everyone else to member, and soft-deletes the admin groups only if at least one admin remains. Access tokens carry the role, role changes force a logout, and last-admin demotion is blocked (#2939 — @Pranjal-wq, integration tests in #2981). Follow-ups let members invite other members (#3023), confirm role changes and show Groups as an Enterprise placeholder (#3005), and allow changing the role on a pending invite (#3056).One-command Docker installer
A newinstall.sh at the repo root installs PipesHub with a single curl | bash or ./install.sh from a clone. It checks Docker, RAM, and disk, offers slim vs full and a choice of graph database, broker, and KV store, writes a .env with random secrets, pulls fresh app and sandbox images, and waits until the app is reachable on the host. First-run failures are clearer: crash-loop detection distinguishes exit 137 from 139, a stale COMPOSE_PROFILES is repaired, and indexing model loaders try the local cache first so air-gapped hosts don’t hang (#2634 — @shekharkadyan). The installer now tells you where to re-run it after a curl or clone (#3083), and CI tests a first-run install against Docker Hub images (#3076).Stateless Docling processing and adaptive parsing
Docling document processing was separated into stateless services, with batched PDF processing for large documents and lightweight table enrichment when advanced enrichment is unavailable; legacy PDF-processing and block-creation endpoints were removed (#2950 — @kaushal1999). An adaptive parsing strategy picks the parse path per document (#2980 — @kaushalwaghela-art), vector-graphics-heavy PDFs no longer stall pdfplumber (#3007), and image-heavy PDF pages are routed to OCR (#3033 — @TatshSiow).Breaking changes & upgrade notes
- Admin role migration. On first boot, admin user-group members are promoted to
role=adminand the admin groups are soft-deleted; user JWTs without a valid role are rejected, so users re-login once. Admin checks now read the role from the database (#2939). - Org-ID backfill for storage records. A startup migration backfills
orgIdon storage documents in MongoDB (#3059 — @vishwjeet-pawar03). - Compose container names change. Existing Docker Compose installs recreate every container on the next
./install.sh; names become{project}-{service}-1(defaultpipeshub-ai-pipeshub-ai-1), sodocker exec pipeshub-aimust becomedocker compose -p pipeshub-ai exec -T pipeshub-ai …. Data volumes are unchanged (#2634). - Feature flags move.
ENABLE_MCPis now controlled only from Labs (thePIPESHUB_ENABLE_MCPenv override is gone); code execution is env-only viaPIPESHUB_ENABLE_CODE_EXECUTIONand its Labs toggle was removed (#3044). Actions/toolsets are gated by a newENABLE_ACTIONSplatform flag, default on (#3045). - New query-path defaults. The accessible-records cache is enabled by default (
PIPESHUB_ACCESSIBLE_RECORDS_CACHE); direct LLM transports (PIPESHUB_AGENT_TRANSPORT=direct) and signed-URL caching (PIPESHUB_SIGNED_URL_CACHE_SECONDS) are opt-in (#2963). - Docling API surface. Legacy PDF-processing and block-creation endpoints were removed from the Docling service (#2950).
- Embedding cleanups are now behind a feature flag (#3077 — @vishwjeet-pawar03).
Connectors
- GitHub — new teams connector; personal connector refactored onto shared methods (#2989 — @darshangodase).
- HackerNews — new API client and datasource (#3060 — @igennova).
- Jira Data Center / Confluence Data Center — placeholder handling and custom hierarchy support (#2878 — @darshangodase); spacing fix in action names (#3034).
- Linear — placeholder handling (#2880 — @darshangodase).
- Notion — reindexing fix and API resilience (#3022 — @shrikantNemiwal1); placeholder handling (#3085).
- Google Drive / Gmail — record streaming now iterates over all permissioned users instead of only the first (#2965 — @R0gue-one); Gmail shared-mailbox search links no longer always point at the synced owner’s account (#3011 — @aesp2008).
- GitLab — connector fixes (#3058 — @darshangodase).
- Web — S3 storage for the web connector fixed (#2983 — @kaushalwaghela-art).
- RSS — record preview no longer fails with “File URL not available” (#3079 — @uncleSlayer).
- Mail — conversation index on mail records (#2972 — @shrikantNemiwal1).
- A broad sync of accumulated changes across the Node.js API — Slack bot integration, configuration manager, mail templates, storage, and user management (#3028 — @vishwjeet-pawar03).
Agents & AI
- Structured JSON output is recovered from validation errors instead of failing the turn (#2948 — @TatshSiow).
- A prompt-injection guard was added to the sub-agent execution rules (#2987 — @abdul-5844).
- Toolset actions for the assistant agent were fixed (#2977 — @vishwjeet-pawar03); dedicated prompts for internal search and web search were removed in favour of the agent loop’s defaults (#3031).
- Reindexing embeddings was fixed (#3080 — @jatingaur18); Qdrant gains off-disk storage support (#2995 — @abhishekgml1991).
- The
webSearchschema description is now endpoint-neutral (#2968 — @uncleSlayer).
Fixes
- Chat mode selection fixed (#2966 — @vishwjeet-pawar03); streamed markdown tables and citations no longer flicker (#3082 — @tushar1245).
- The skills section was removed and the agent sidebar can now expand (#2978); model names display correctly in the UI (#3063); the search UI option was fixed (#3067 — @abhishekgml1991).
- A red dot now flags when default filters have been changed (#2974 — @darshangodase).
- Record preview skips
streamRecordwhen the record is not preview-renderable (#2979 — @Pranjal-wq). - Korean and Chinese (Taiwan and Singapore) UI languages added (#3051 — @rish664).
- A users-controller route had its HTTP method type corrected (#2986 — @vanshg685).
- A batch of OSS bug fixes (#3072 — @jatingaur18).
Performance & reliability
- Vector cleanup is no longer lost on record delete when the broker publish fails (#3013 — @aesp2008).
- Telemetry pushes no longer hit HTTP 413 (#3073 — @rish664).
- Noisy logs were dropped to debug level across services (#3066, #3070 — @abhishekgml1991), with tests updated to match (#3071 — @igennova).
Security & authentication
- An
x-is-adminheader injection path was closed; admin status now comes from the JWT role (#2985 — @Pranjal-wq). - The
uuidpackage was replaced withcrypto.randomUUID()in the Node.js backend (#3020 — @rish664). - Dependency bumps:
cryptography48 → 50,authlib,urllib3,idna,setuptools,langchain-classicin integration tests (#2898, #2268, #2253, #2346, #2755, #2271);ip-address/express-rate-limit,undici,fast-uri,engine.io,body-parserin the Node.js API (#2953, #2954, #2957, #2804, #2746);nanoid,tar/electron-builder/app-builder-lib/builder-util-runtime,nodemailer/monocart-reporterin the frontend (#2934, #2806, #2805, #2803, #2730).
Developer experience & infrastructure
AGENTS.mddocuments the repo for coding agents (#2984 — @shekharkadyan); Windows npm setup clarified (#2998 — @mdakram2002).- A unified system health-check script (#3048 — @Saneajayy) and a changelog CI job (#3061 — @rish664).
- OpenAPI / SDK generation: agent-capability default values (#2949), a duplicate
oauth2requirement that blocked SDK generation (#2956), review-comment descriptions (#2967), andusesOrgDefault/userOrgDefaultin the create-agent response (#2964, #3026) — all @uncleSlayer. - Integration tests: enterprise-search ITs fixed to cut LLM cost (#2924),
x-request-idpropagated (#2970), Notion added to the workflow (#3042 — @shrikantNemiwal1), timeout raised from 180 to 300 minutes (#3075 — @siddhantota). - Unit tests: RSS tests no longer make real network calls (#2982); test updates (#3050 — @jatingaur18).
- Cleanup: the
logsdirectory (#3019 — @rish664) and an unused test script (#3029 — @kaushalwaghela-art) were removed.
New contributors
- @kaushalwaghela-art made their first contribution in #2980
- @abdul-5844 made their first contribution in #2987
- @mdakram2002 made their first contribution in #2998
- @aesp2008 made their first contribution in #3011
- @Saneajayy made their first contribution in #3048
- @igennova made their first contribution in #3060
- @siddhantota made their first contribution in #3075
Full commit-level detail: GitHub release · Compare view
0.6.0 — The new agent loop ships stable, and the query service gets ~1.8× faster
Stable release · View on GitHubThis stable release finalizes 0.6.0-beta; its notes cover the full range since 0.5.0.0.6.0 stabilizes the two engine rewrites introduced in the beta — the new agent loop and the standalone parsing & extraction services — and layers ~50 additional PRs of hardening on top: a query-service performance overhaul (~1.8× throughput, p50 latency halved), a fix for a Redis Streams producer bug that could poison publishing process-wide, OpenAI Responses API compatibility fixes, DOCX/CSV chat attachments, and an Omnigent integration for the PipesHub MCP server. Roughly 195 merged PRs since 0.5.0.Operators upgrading from 0.5.0 should read the upgrade notes: this release runs a knowledge-base record-group migration, introduces the parsing-service flag, removes
Full commit-level detail: GitHub release · Compare view
GRAPH_DB_TYPE, changes the Helm chart’s default message broker to Redis, and raises the Docker image RAM limit.Highlights
New agent loop, now the only mode
The agent runtime was reimplemented with a new loop (#2702 — @abhishekgml1991) and, in this stable release, becomes the sole execution mode (#2879). The Slack bot was moved onto the new loop (#2857 — @kaushal1999), prompts were tuned for it (#2848), and its navigate/lookup tools are now exposed as HTTP endpoints so the MCP server can consume them as MCP tools (#2937 — @uncleSlayer). Reasoning-effort support runs through the stack: model handling (#2858), agent model fixes (#2896 — @vishwjeet-pawar03), friendly provider names with the reasoning flag defaulted on (#2870), a reasoning parameter on indexing LLM calls (#2932 — @tushar1245), anddefaultReasoningEffort declared on agent schemas in the OpenAPI spec (#2877). Deep-agent stale tasks were fixed early in the cycle (#2656 — @vishwjeet-pawar03).Query service performance overhaul
A chat turn was redoing work proportional to the whole answer on every streamed token — roughly 700 times per turn, in three independent places — plus a record-cache bug forced repeat fetches to re-download whole documents. All four were fixed (#2872 — @shrikantNemiwal1): ~1.8× throughput (23 → 43 req/min at 4 workers / 16 users), p50 turn latency halved (36 s → 17.8 s), and SSE traffic down 28×, with the answer itself unchanged.Parsing and data extraction as standalone services
Document parsing and data extraction were split out of the indexing path into their own services (#2541 — @abhishekgml1991), gated by a parsing-service flag (#2734). Follow-ups hardened concurrency (#2738), fixed the HTML parser and other parsing paths (#2749 — @jatingaur18, #2770), added health status for both services (#2845 — @rish664) plus build targets (#2822), and dropped base64 encoding when sending PDFs to the Docling service (#2792 — @kaushal1999).Smarter, cheaper PDF and OCR pipeline
Docling is now the default PDF parser (with a BlockParser bug fix) and falls back to OCR when it fails (#2724, #2672 — @kaushal1999). OCR got safer and faster: an individual VLM-OCR instance per parse call (#2739), a cap on OCR-detection pages (#2790), Docling memory and latency optimizations (#2809), and batched LLM calls for table indexing (#2844).OpenSearch joins the supported backends
OpenSearch is now a supported search backend (#2547 — @abhishekgml1991), extending deployment options for organizations standardized on OpenSearch.Redis Streams producer survives disconnects again
disconnect() on the shared Redis Streams producer used ioredis quit(), which is terminal — one request handler stopping the singleton producer poisoned publishing for the whole process until restart. The client is now recreated on reconnect, restoring producer/consumer recovery after any disconnect (#2867 — @anupPradhan0).MCP grows: Omnigent integration and new tools
A ready-to-run Omnigent agent now ships underintegrations/omnigent/, exposing the full PipesHub MCP tool set with chat-first routing (pipeshub_chat, pipeshub_search, pipeshub_sources, and more) against the existing /mcp server (#2902 — @shekharkadyan). The MCP server itself was updated to v2.2.0 (#2780 — @uncleSlayer), with a scope fix and a fetch-full-record API (#2726) and a fetch-full-record tool bug fix (#2743).Bulk user invites, with a review step
Admins can upload a CSV or Excel file of email addresses — parsed, validated, normalized, and deduplicated server-side, with invitations processed asynchronously (#2715 — @anupPradhan0). The stable release adds a review screen so imports can be inspected before invites are sent (#2912).Breaking changes & upgrade notes
- Knowledge-base record groups are migrated to connectors; the migration runs as part of this release (#2650 — @tushar1245).
- Parsing and extraction now run as separate services controlled by a flag — review your deployment config before enabling (#2541, #2734).
- The env template was refreshed and the redundant
GRAPH_DB_TYPEkey removed from Dockerfiles; the Helm chart now defaults the message broker to Redis, deploying Kafka/ZooKeeper pods only conditionally (#2887 — @tushar1245). - The Atlassian site URL field was removed from connector configuration (#2693).
- The PipesHub Docker image RAM limit was increased — check host sizing (#2853); the database sandbox was disabled (#2854).
Connectors
- Slack — personal (user-scoped) connector added (#2801 — @jatingaur18).
- Box — shared files sync (#2719 — @R0gue-one).
- Google Drive — shared-drive filter (#2620) and folder filter (#2811), plus a NoneType guard before logging (#2691).
- Gmail — indexing fix (#2748).
- Outlook — removed external-user sync (#2742) and fixed idle-closed transport on long-lived connectors (#2772 — @shrikantNemiwal1).
- Jira Data Center — handle users/permission-schema endpoints that differ across DC versions (#2704 — @darshangodase).
- GitLab — connector fixes (#2920 — @darshangodase).
- Web — crawl4ai support for higher-fidelity crawling (#2641 — @R0gue-one) with follow-up bug fixes (#2750).
- RSS — indexing fix (#2729).
Agents & AI
- Jira Data Center and Confluence Data Center toolsets so agents can act against self-hosted Atlassian (#2661, #2667 — @darshangodase), plus Confluence tool fixes (#2812).
- OpenAI Responses API compatibility: an initial fix (#2876 — @abhishekgml1991) plus correct token-limit truncation detection and normalization of structured responses to plain text for image descriptions, streaming, and reflection history (#2917 — @kaushal1999).
- Chat attachments: markdown and txt (#2657), DOCX and CSV (#2894 — @abhishekgml1991); images capped at 25 per message (#2655).
- Retrieved records are enriched with related records from graph edges (parent, child, attachment), carrying parent ticket/project metadata into LLM context (#2596 — @darshangodase), with a follow-up fix for
to_llm_contextand graph enrichment (#2840). - Blocks now carry author and mentioned-user IDs for people-aware retrieval (#2827 — @jatingaur18) and a head tag (#2936).
- Handled the deprecated
temperaturefield for Claude models (#2723). - Fixed the user-ask tool schema (#2873 — @vishwjeet-pawar03), sandbox code execution (#2892), artifact creation (#2916), and the completion-gate artifact trigger (#2888).
Fixes
- Indexing: failures propagate to queued MD5 duplicates (#2694 — @shekharkadyan), YAML support with JSON/YAML/YML handling fixes (#2731, #2752), Unicode preserved in indexing prompts (#2686 — @TatshSiow), semantic metadata added to blob storage in the legacy parsing flow (#2768), default indexing status and reindex pagination (#2735), placeholder-record handling (#2767), reindex API for non-creators (#2733), and a fix for issue #2883 (#2890 — @kaushal1999).
- File preview: reliable PPT/PPTX-to-PDF conversion with LibreOffice and CJK fonts installed in Docker (#2711, #2713 — @TatshSiow, #2732 — @hamza426-ahm).
- Chat & UI: answer-response rendering (#2868), markdown rendering with
$signs (#2922 — @tushar1245), citation markdown (#2678), citation popover no longer closes on preview (#2923 — @Pranjal-wq), Gemini PDF upload crash when the LLM returns content as a list (#2635 — @shekharkadyan), user-query UI (#2834), chat window alignment (#2862, #2875), removed the graph/plot force-download hook (#2866), external-link icons open the source web URL (#2925), folder-upload hierarchy shown with a compact add button (#2928), embedding-model download progress in the UI (#2681), fail reason no longer shown on completed records (#2671), empty manual-indexing tooltip (#2687), connector label typo (#2700). - Knowledge hub: app-scoped search and folder filter (#2709), shared-with-me record groups (#2688), collection record stats (#2777), agent builder shows all configured collections (#2673).
- Graph queries: replaced invalid
coalescewithnot_nullin AQL (#2914 — @tushar1245). - Desktop: the Electron app can now switch servers (#2865 — @abhishekgml1991).
- Cleanup: removed admin/everyone broadcast notifications (#2728), stale
x-oauth-header(#2664), unused redirect-uri field (#2782), user event (#2828); invite-mail error logging fixed (#2658).
Performance & reliability
- Stabilized MongoDB failures in deployment (#2677 — @shekharkadyan).
- Message-broker retry and configuration support (#2626 — @shrikantNemiwal1).
- Increased file-descriptor limits to prevent EMFILE errors under load (#2843 — @anupPradhan0).
Security & authentication
- New token scopes and JWT generators for email verification and OTP (#2784 — @rish664, #2781 — @vanshg685).
- Authentication is skipped for expired refresh tokens instead of failing noisily (#2736).
- SMTP values are masked, with related refactoring (#2793).
- GitHub Actions hardened per GitHub’s new security guidance (#2747).
Developer experience & infrastructure
- Anonymous fleet metrics: new metrics collection with an increased push interval and reduced metric logging (#2644 — @rish664, #2663, #2717).
- OrgContext with AsyncLocalStorage support for request-scoped tenant context in Node.js (#2787 — @rish664).
- Refactoring: KB CRUD operations moved onto the data-source processor (#2718); constants, enums, and optional keys consolidated across frontend and backend (#2785, #2788, #2789, #2794, #2796, #2847).
- OpenAPI/spec: deprecation markers (#2665), incorrect Python-style language removed (#2666), storage doc ID in the record schema and spec (#2737, #2757).
- A
release-changelogskill was added for generating these curated changelogs (#2915 — @rish664). - CI/integration tests: per-backend approval and label selection (#2823 — @uncleSlayer), enterprise-search ITs parallelized with pytest-xdist plus determinism and race fixes (#2871, #2874, #2895, #2903, #2905, #2907), parallel Arango/Neo4j runs (#2753), Redis broker for Arango ITs (#2839), Mailpit as the SMTP sink (#2855, #2856), fail-fast helper unit tests before Docker (#2913 — @shekharkadyan), hardened storage-connector sync tests (#2910), and assorted IT env vars, creds, retries, timeouts, and fixes (#2605, #2662, #2708, #2720, #2721, #2744, #2756, #2774, #2779, #2831, #2835, #2846, #2861).
- Logging: Talon warning log fixed (#2852).
- Docs & README: uv-based install instructions (#2759), Slack approval and graph-DB docs (#2771), README updates (#2679, #2689, #2698, #2838, #2841, #2864).
- Dependency bumps via Dependabot (#2649, #2659, #2696, #2697, #2727, #2741, #2754, #2764, #2765, #2766, #2776, #2807, #2813, #2814, #2815, #2816, #2817, #2818, #2820, #2893, #2897, #2899, #2900, #2908, #2909, #2921, #2929, #2930, #2931, #2935).
New contributors
- @shekharkadyan made their first contribution in #2677
- @hamza426-ahm made their first contribution in #2732
- @Pranjal-wq made their first contribution in #2923
Full commit-level detail: GitHub release · Compare view
0.6.0-beta — New agent loop, standalone parsing & extraction services, OpenSearch arrives
Beta release · View on GitHubThis beta was finalized as 0.6.0.This beta reworks two core engines: the agent runtime gets a new loop implementation, and document parsing and data extraction split out of indexing into their own services with concurrency, memory, and latency fixes to match. OpenSearch joins the supported search backends, web crawling moves to crawl4ai, and admins can bulk-invite users from CSV/Excel. Roughly 140 merged PRs since 0.5.0.Operators upgrading should read the notes below: this release includes a knowledge-base record-group migration, a new parsing-service flag, and a raised Docker RAM limit.
Full commit-level detail: GitHub release · Compare view
Highlights
New agent loop
The agent runtime was reimplemented with a new loop (#2702 — @abhishekgml1991), the release’s largest change to how agents plan and execute. Alongside it, stale tasks in deep agents were fixed (#2656 — @vishwjeet-pawar03) and reasoning-effort handling was updated for models that support it (#2858).Parsing and data extraction become standalone services
Document parsing and data extraction were separated out of the indexing path into their own services (#2541 — @abhishekgml1991), gated by a parsing-service flag (#2734). Follow-ups hardened concurrency (#2738), fixed the HTML parser and other parsing paths (#2749, #2770 — @jatingaur18), added health status for both services (#2845 — @rish664) plus build targets (#2822), and dropped base64 encoding when sending PDFs to the Docling service (#2792 — @kaushal1999).Smarter, cheaper PDF and OCR pipeline
Docling is now the default PDF parser (with a BlockParser bug fix) and falls back to OCR when it fails (#2724, #2672 — @kaushal1999). OCR itself got safer and faster: an individual VLM-OCR instance per parse call (#2739), a cap on OCR-detection pages (#2790), and Docling memory and latency optimizations (#2809). Table indexing now batches its LLM calls (#2844).OpenSearch integration
OpenSearch is now a supported backend (#2547 — @abhishekgml1991), extending the deployment options beyond the existing Qdrant/ArangoDB stack for organizations standardized on OpenSearch.Web connector rebuilt on crawl4ai
Web connectors gained crawl4ai support for higher-fidelity crawling (#2641 — @R0gue-one), with follow-up bug fixes (#2750 — @kaushal1999).Bulk user invites from CSV/Excel
Admins can upload a CSV or Excel file of email addresses; the server parses, validates, normalizes, and deduplicates them, processes invitations asynchronously, and notifies the admin with a result summary — replacing the previously disabled “Import CSV” placeholder (#2715 — @anupPradhan0).Richer retrieval context from the knowledge graph
Retrieved records are now enriched with related records from graph edges (parent, child, attachment), and dependent records such as Jira attachments or Linear docs carry their parent ticket/project metadata into the LLM context (#2596 — @darshangodase), with a follow-up fix for passing location intoto_llm_context and graph enrichment (#2840).Breaking changes & upgrade notes
- Knowledge-base record groups are migrated to connectors; the migration runs as part of this release (#2650 — @tushar1245).
- Parsing and extraction now run as separate services controlled by a flag — review your deployment config before enabling (#2541, #2734).
- The Atlassian site URL field was removed from connector configuration (#2693).
- The PipesHub Docker image RAM limit was increased — check host sizing (#2853).
Connectors
- Slack — personal (user-scoped) connector added (#2801 — @jatingaur18).
- Box — shared files sync (#2719 — @R0gue-one).
- Google Drive — shared-drive filter (#2620) and folder filter (#2811), plus a NoneType guard before logging (#2691).
- Gmail — indexing fix (#2748).
- Outlook — removed external-user sync (#2742) and fixed idle-closed transport on long-lived connectors (#2772 — @shrikantNemiwal1).
- Jira Data Center — handle users/permission-schema endpoints that differ across DC versions (#2704 — @darshangodase).
- RSS — indexing fix (#2729).
Agents & AI
- Jira Data Center and Confluence Data Center toolsets so agents can act against self-hosted Atlassian (#2661, #2667 — @darshangodase), plus Confluence tool fixes (#2812).
- MCP: scope fix and a new fetch-full-record API (#2726 — @uncleSlayer), server updated to v2.2.0 (#2780), and a fetch-full-record tool bug fix (#2743).
- Chat attachments: markdown and txt files supported (#2657); images capped at 25 per message (#2655).
- Handled the deprecated
temperaturefield for Claude models (#2723). - Blocks now carry author and mentioned-user IDs for people-aware retrieval (#2827 — @jatingaur18).
Fixes
- Indexing: failures now propagate to queued MD5 duplicates (#2694 — @shekharkadyan), YAML support with indexing bug fixes and proper JSON/YAML/YML handling (#2731, #2752), Unicode text preserved in indexing prompts (#2686 — @TatshSiow), semantic metadata added to blob storage in the legacy parsing flow (#2768), default indexing status and reindex pagination (#2735), connector placeholder-record handling (#2767), reindex API now works for non-creators (#2733).
- File preview: reliable PPT/PPTX-to-PDF conversion with LibreOffice and CJK fonts installed in Docker (#2711, #2713 — @TatshSiow, #2732 — @hamza426-ahm).
- Chat & UI: citation markdown rendering (#2678), Gemini PDF upload crash when the LLM returns content as a list (#2635 — @shekharkadyan), user-query UI (#2834), chat window alignment (#2862), embedding-model download progress shown in the UI (#2681), fail reason no longer shown on completed records (#2671), empty manual-indexing tooltip (#2687), connector label typo (#2700).
- Knowledge hub: app-scoped search and folder filter (#2709), shared-with-me record groups (#2688), collection record stats added (#2777), agent builder now shows all configured collections (#2673).
- Cleanup: removed admin/everyone broadcast notifications (#2728), stale
x-oauth-header(#2664), unused redirect-uri field (#2782), user event (#2828); invite-mail error logging fixed (#2658).
Performance & reliability
- Stabilized MongoDB failures in deployment (#2677 — @shekharkadyan).
- Message-broker retry and configuration support (#2626 — @shrikantNemiwal1).
- Increased file-descriptor limits to prevent EMFILE errors under load (#2843 — @anupPradhan0).
- Database sandbox disabled (#2854).
Security & authentication
- New token scopes and JWT generators for email verification and OTP (#2784, #2781 — @rish664, @vanshg685).
- Authentication is skipped for expired refresh tokens instead of failing noisily (#2736).
- SMTP values are masked, with related refactoring (#2793).
Developer experience & infrastructure
- Anonymous fleet metrics: new metrics collection with an increased push interval and reduced metric logging (#2644 — @rish664, #2663, #2717).
- OrgContext with AsyncLocalStorage support for request-scoped tenant context in Node.js (#2787 — @rish664).
- Refactoring: KB CRUD operations moved onto the data-source processor (#2718); constants, enums, and optional keys consolidated (#2785, #2788, #2789, #2794, #2796).
- OpenAPI/spec: deprecation markers added (#2665), incorrect Python-style language removed (#2666), storage doc ID added to the record schema and spec (#2737, #2757).
- CI/integration tests: per-backend approval and label selection (#2823 — @uncleSlayer), parallel Arango/Neo4j runs (#2753), Redis broker for Arango ITs (#2839), Mailpit as the SMTP sink (#2855, #2856), GitHub Actions security hardening (#2747), and assorted IT env vars, creds, retries, timeouts, and fixes (#2662, #2708, #2720, #2721, #2744, #2756, #2774, #2779, #2831, #2835, #2846, #2861, #2605).
- Logging: Talon warning log fixed (#2852).
- Docs & README: uv-based install instructions (#2759), Slack approval and graph-DB docs (#2771), README updates (#2679, #2689, #2698, #2838, #2841, #2864).
- Dependency bumps via Dependabot (#2649, #2659, #2696, #2697, #2727, #2741, #2754, #2764, #2765, #2766, #2776, #2807, #2813, #2814, #2815, #2816, #2817, #2818, #2820).
New contributors
- @shekharkadyan made their first contribution in #2677
- @hamza426-ahm made their first contribution in #2732
Full commit-level detail: GitHub release · Compare view
0.5.0 — Jira & Confluence go Data Center, agents get real tools, model providers open up
Stable release · View on GitHubA large stable release: 230+ merged PRs since 0.4.5. The three big stories are enterprise self-hosted reach (full Jira and Confluence Data Center support alongside a rebuilt Confluence content pipeline), agents that can act rather than just answer (Salesforce, Google Drive, storage, and ask-user-question tools), and an open model layer (first-class OpenRouter, LiteLLM proxy, and LM Studio support, plus a dedicated local embedding service).Operators also get a one-command installation script, an in-app notification service, substantial memory-leak and query-performance fixes across ArangoDB and Qdrant, and a much larger validated OpenAPI surface backing the SDK.
Full commit-level detail: GitHub release · Compare view
Highlights
Jira and Confluence Data Center support
PipesHub connectors now work against self-hosted Atlassian Data Center, not just Cloud. Jira DC lands with application-role, role, group, and permission syncing, comment/attachment handling, and blockgroup parsing through the HTML parser (#2435, #2518, #2645 — @abhishekgml1991, @darshangodase), with follow-up fixes for attachment 404s, search retries, and empty project IDs (#2511). Confluence DC support covers personal instances, base URLs, audit logs, permissions, comments, page web URLs, and retrying page/attachment fetches (#2528, #2514, #2520, #2550 — @shrikantNemiwal1).Agents gain action tools
Agents can now do work in external systems: a Salesforce tool (e.g. setting product prices in a pricebook) with connector-level filters (#2223, #2193 — @jatingaur18), a Google Drive file tool (#2210 — @jatingaur18), upload-to-storage and fetch-from-storage tools with a temporary-file flag (#2299 — @jatingaur18), and an ask-user-question tool so agents can pause and request clarification mid-run (#2238 — @vanshg685).Open model layer: OpenRouter, LiteLLM proxy, LM Studio
First-class provider support for OpenRouter (#2621) and for LiteLLM proxy and LM Studio (#2628 — @abhishekgml1991) makes it easier to route PipesHub at whatever model gateway you already run. Model roles can now be assigned per function (#2478), local dense embedding moves into its own service (#2466) with fixes for switching embedding models (#2482) and a UI warning when the default embedding model is in use (#2445 — @R0gue-one). Provider APIs got tests and spec coverage (#2446 — @uncleSlayer), and the MiniMax default model moved to M3 (#2471 — @octo-patch).Document parsing overhaul
New parsers broaden and speed up ingestion: MarkItDown (#2472 — @abhishekgml1991), pdfplumber for attachments and indexing behind an .env flag (#2498, #2548 — @kaushal1999), selectolax for HTML (#2542), and an updated markdown-it parser (#2522 — @jatingaur18). Indexing now covers code files from knowledge bases while restricting to supported code types (#2589, #2432), record summaries are indexed for better retrieval (#2359 — @kaushal1999), and a blocks validator guards against malformed input, including invalid image blocks (#2495, #2618).Confluence content pipeline rebuilt on blocks
The Confluence connector now fetches page content as ADF and parses it into the standard block format the indexing service consumes — comments included — instead of passing raw HTML through (#2497 — @shrikantNemiwal1). Folder sync was added (#2220), and follow-ups refined the format (ADF → HTML → styled view with image handling) and kept older content backward compatible with page streaming (#2631, #2638, #2580).GitLab connector matures
GitLab gets incremental sync (#2438 — @tushar1245), improved search (#2379 — @Kushagra1122), repo-tree pagination with batch fetching for code files (#2422, #2401), code-file timestamp backfill (#2449), and a major sync speedup from dropping per-file timestamp API calls (#2443).In-app notification service
A new notification pipeline publishes events from the Python services to Kafka, consumes them in Node.js, and pushes them to the frontend over WebSockets (#2431 — @R0gue-one). Follow-ups add SharePoint and OneDrive notifications, duplicate suppression, UI polish, and correct attribution of the authenticated user in messages (#2594, #2613, #2538, #2549, #2537 — @darshangodase).Connectors
- Slack — new/reworked Slack connector landed (#2272 — @Ayushman444).
- Jira (Cloud) — application-role fallback (#2382), email-visibility handling (#2390), graceful handling of permission 403s (#2413), and metadata enrichment including full-record fetch (#2530, #2557 — @darshangodase).
- Confluence (Cloud) — email visibility and pagination (#2399), access option changed from checkbox to select (#2430), space-permission handling (#2420), and attachment streaming fix (#2568).
- GitLab — EE fixes (#2369), filter search using filter groups for permissions (#2371), filter-selection sync fix (#2398), auditor changes (#2417), and merge-request block-index fix with increased timeout (#2629).
- Linear — API-token authentication support (#2622 — @darshangodase).
- Notion — sync issue fixes (#2351).
- Outlook — attachment mimetype fix (#2419).
- Local filesystem / desktop app — updated sync strategies with Electron enhancements (#2403 — @Kushagra1122), assorted fixes (#2407), and an admin-access prompt in the native app during connector setup (#2447).
- Web — full-sync fix (#2584).
- S3 — health check added (#2456).
Agents & AI
- Citation resolution fix plus prompt improvements (#2400 — @kaushal1999).
- Fixed a token-limit blowout where whole tables were sent to the LLM (#2418).
- Fetch-URL tool made explicit for agents (#2395); sort-key bug fixed in the agent retrieval tool (#2397).
- Jira tools now check custom fields (#2591); fixed empty tool args and Confluence CQL handling (#2619).
listAgentsAPI now exposes toolsets and knowledge bases (#2510); MCP dependency updated to v1.2.0 (#2526).- Removed the index-videos filter so video records are no longer excluded (#2612).
Fixes
- Frontend/UX: collections deletion error handling (#2353), nested record-group reindex (#2360), manual/failed reindex button in All Records (#2381), reindex options (#2423), full-sync/force-reindex confirmations (#2474), connector-instance toast and redirect naming (#2372), connector-config back buttons and confirm dialogs (#2392), connector filter modal with default filter (#2465), connector page stats handling and other page issues (#2442, #2583), sidebar apps with no children (#2436), toolset tab navigation and banner icon (#2523, #2575), collection-share owner role and role dropdown (#2425), org-name splitter (#2491).
- Chat & files: improved markdown rendering in chat (#2354), file drop zone plus PDF-citation blinker (#2505), file-upload fixes (#2483), storage mimetype list (#2567), zoom-level lock in document preview (#2517 — @rachit367), CJK input no longer replaces English words in chat (#2640), agent toolset message (#2564) and agent model selection (#2572).
- Backend: conversation pagination (#2375), KB upload API (#2396),
crypto.randomUUIDfallback for upload item IDs (#2391 — @TatshSiow), removed over-strict email checks (#2462), friendlier validation errors (#2535), enterprise-search error handling (#2524), fallback screen when the Node.js service is down (#2388), data-message fix (#2404) and temporary streaming-API patch (#2405), frontend API base URL pointing at the backend (#2507). - Data layer:
get_records_by_record_groupArango query (#2468),batch_update_nodesbind vars and transaction query call (#2653), Neo4j update-connector method mismatch (#2134), indexing-service record update operation (#2563), reconciliation/replace fix (#2581). - Parsing edge cases: image handling (#2617), block data passed as none (#2633), empty image alt text in HTML-derived markdown (#2648), block splitter with image tags stripped from table headers (#2642).
- API cleanup: get-all-connectors API cleaned up (#2385) and replaced with the knowledge-hub API on the frontend (#2573); user-graph API removed from the frontend with team API fixes (#2481).
Performance & reliability
- Memory-leak fixes across services (#2408 — @abhishekgml1991) and a latency fix (#2602).
- New ArangoDB indexes for query performance (#2441 — @tushar1245), plus faster connector-stats and knowledge-hub search/filter queries (#2453, #2455).
- Embedding deletion now uses Qdrant’s delete-points API instead of scroll, and stale embeddings are cleaned up after record deletion (#2512 — @kaushal1999).
- Fixed a Redis deadlock on unparseable messages (#2362) and an etcd watcher leak in
close()(#2367); race condition fixed in onboarding steps (#2361). - Increased Neo4j and Qdrant timeouts (#2578); health checks moved into the Python services (#2529).
- All Records sidebar connectors now lazy-load (#2448); SQL access migrated to asyncpg (#2318 — @uncleSlayer).
Security & authentication
- Users created via JIT provisioning are now marked logged-in (#2349).
- Access tokens are refreshed after an OAuth revoke (#2473), and OAuth errors now propagate to the frontend instead of failing silently (#2574).
- Batch of dependency security fixes (#2593).
Developer experience & infrastructure
- One-command installation script for self-hosting (#2590 — @abhishekgml1991) and Dockerfile updates (#2598).
- OpenAPI/SDK:
x-pipeshub-sdkextension introduced, tuned, and later removed from the public spec (#2334, #2476, #2630, #2643); spec fixes for OAuth app routes, web-search providers, backward compatibility, and breaking-change cleanup (#2249, #2479, #2646, #2652, #2637); KB upload APIs merged into one (#2570); model-type list endpoint removed (#2477); unnecessary agent routes removed (#2493). - Zod validation layers added across attachments, conversations, agents, agent conversations, teams, and chat-mode enums (#2384, #2386, #2421, #2440, #2429, #2464, #2467, #2600 — @uncleSlayer, @realaashil, @darshangodase).
- Test coverage: Python unit tests (#2377, #2376, #2374, #2604, #2607, #2614); integration tests for user management, Jira, Confluence, KB CRUD, toolsets, text files, and agent conversations (#1863, #2151, #2565, #2504, #2632, #2601, #2647, #2651); Playwright e2e tests added to CI (#2411).
- CI plumbing: Slack reporting of IT results (#2364, #2368, #2460, #2463), workflow and environment fixes (#2373, #2412, #2415, #2437, #2452, #2480, #2582, #2585, #2592, #2595, #2599, #2609, #2610, #2615, #2623, #2636, #2548, #2566).
- Observability: request and thread IDs on services (#2611), graph-provider log cleanup (#2424), health-check 200 logs hidden (#2534), better Redis logging of unknown messages (#2536).
- Docs: README updates and badges with i18n (#2539, #2639, #2492, #2544, #2556), MariaDB deps documented in CONTRIBUTING (#2509 — @Ayushman444).
- Dependencies: MariaDB client driver v2 (#2555), uuid pinned for CommonJS compatibility (#2506), etcd3 installed from a maintained fork for protobuf 4 (#2606), and routine Dependabot bumps (#2488, #2487, #2490, #2489, #2486, #2553, #2552, #2551, #2561, #2571, #2562, #2543, #2579, #2586, #2587, #2588, #2558, #2560, #2434, #2393, #2533, #2525, #2625).
New contributors
Full commit-level detail: GitHub release · Compare view
0.4.5 — GitLab self-managed (EE) support and slimmer deployments
Stable release · View on GitHubA ~20-PR patch release focused on self-hosted GitLab: the GitLab connector now works against self-managed EE instances. Deployment gets lighter with a slimmer Docker image and simplified port/URL configuration, and sign-in becomes more flexible with support for multiple authentication mechanisms per org.
Full commit-level detail: GitHub release · Compare view
Highlights
GitLab self-managed (EE) support
The GitLab connector now supports self-managed Enterprise Edition instances (#2337 — @abhishekgml1991), with instance-URL fixes (#2350) and an AQL lock-timeout fix during GitLab sync (#2340 — @tushar1245).Slimmer, simpler deployment
The Docker image was slimmed down (#2325 — @abhishekgml1991), and networking was simplified: port 3001 is exposed directly and the separate connector public URL is gone (#2326).More flexible authentication
Orgs can enable multiple authentication mechanisms side by side (#2341 — @vanshg685), and SAML just-in-time provisioning was fixed (#2345).Connectors
- OneDrive toolset fix (#2224 — @jatingaur18).
- Arango cleanup on connector-instance deletion fixed (#2344 — @shrikantNemiwal1).
- Scheduled crawling functionality (and its tests) removed from connectors (#2333 — @Kushagra1122).
Agents & AI
- Deep agent no longer drags previous conversations into a new one (#2332 — @vishwjeet-pawar03).
- Model selection for agents fixed (#2336) and agents now show a creator tag (#2331 — @vishwjeet-pawar03).
Fixes
- File preview moved to a split-screen layout (#2339 — @vishwjeet-pawar03), recent chats are collapsible (#2328), and a workspace overflow issue was fixed (#2343).
- User-group rename API is only called when the name actually changed (#2330 — @realaashil).
- A missing method was restored (#2347 — @abhishek-pipeshub).
Performance & reliability
- Redis consumers drop unparsable messages completely instead of retrying them forever (#2335 — @realaashil).
- GitHub star count is cached instead of fetched per request (#2348 — @abhishekgml1991).
Developer experience & infrastructure
- Electron CI follow-up (#2329 — @realaashil).
Full commit-level detail: GitHub release · Compare view
0.4.4 — Jira and Confluence Data Center connectors
Stable release · View on GitHubA quick patch release (~20 PRs) whose main story is on-prem Atlassian: new connectors for Confluence Data Center and Jira Data Center bring self-hosted Atlassian instances into PipesHub search, alongside a Docker image size reduction and a batch of rendering and filter fixes.
Full commit-level detail: GitHub release · Compare view
Highlights
Atlassian Data Center support
Organizations running self-hosted Atlassian can now index their content: a Confluence Data Center connector (#2302 — @shrikantNemiwal1) and a Jira Data Center connector (#2303 — @darshangodase), with a follow-up fix so Jira ticket titles reach the indexing pipeline (#2323).Smaller Docker images
The Docker image was optimized to cut size and build time (#2304 — @abhishekgml1991) — continued in 0.4.5’s slim image work.Connectors
- Local filesystem records expose a
localFsRelativePathin file-record and service response types (#2311 — @Kushagra1122). - Filters removed after a connector instance is created are now pruned (#2324 — @abhishekgml1991); non-default datetime filters no longer get selected on their own (#2317 — @shrikantNemiwal1).
Agents & AI
- Removing a tool from an agent is now handled cleanly (#2309 — @jatingaur18).
- Agent-builder node height no longer balloons with large system prompts (#2310 — @vishwjeet-pawar03).
Fixes
- Document handling: PPTX format detection (#2305 — @kaushal1999) and Mermaid diagram rendering (#2316 — @vishwjeet-pawar03).
- Chat UI: image display overflow (#2307) and a “show more” control on citations (#2308 — @vishwjeet-pawar03).
- Forgot-password now displays errors (#2315 — @vanshg685).
Developer experience & infrastructure
- Electron CI added for the desktop app (#2312 — @realaashil).
- Dependency bumps (#2296, #2263, #2319), with the tar bump reverted (#2322 — @abhishek-pipeshub).
Full commit-level detail: GitHub release · Compare view
0.4.3 — Production-ready Kubernetes deploys, chat attachments, and Vertex AI
Stable release · View on GitHubThe first patch series on 0.4.x, with roughly 90 merged PRs. Self-hosters get a production-grade Helm chart for Kubernetes, chat picks up file attachments (PDF, JPG, PNG) from the UI and Slack, and the model layer adds Google Vertex AI plus an Exa web-search engine. A new PipesHub CLI and a round of OpenAPI-spec cleanup make the platform easier to script against, alongside a broad set of connector, agent, and UI fixes.
Full commit-level detail: GitHub release · Compare view
Highlights
Production-ready Kubernetes deployment
A new Helm chart delivers a production-shaped Kubernetes deploy — StatefulSets for the stateful backends, horizontal pod autoscaling, and a local Kind-based development flow (#2179 — @anupPradhan0). Docker builds also got faster (#2275 — @abhishekgml1991).Chat attachments and richer model support
Conversations now accept PDF, JPG, and PNG attachments, both from the platform UI and from Slack (#2190 — @kaushal1999). On the model side, Google Vertex AI is supported (#2279 — @abhishekgml1991), Exa joins as a web-search engine (#2241), and Gemini/Whisper and Azure OpenAI configuration issues were fixed (#2245, #2201 — @vanshg685).A CLI and an SDK-ready API surface
A new PipesHub CLI handles environment setup and configuration (#1772 — @Kushagra1122). The search and conversation APIs were made SDK-ready (#2267 — @uncleSlayer), with the OpenAPI spec cleaned up to match reality: broken or non-streaming endpoints removed (#2282, #2283, #2287) and knowledge-hub, knowledge-search, and model-listing specs fixed (#2265, #2286, #2262).Connectors
- SharePoint — toolset added with a shared reference-data interface (#1645 — @darshangodase), filters pagination fixed (#2182 — @R0gue-one).
- GitLab — code-file indexing fix (#2257 — @abhishek-pipeshub), EE user-email visibility fix (#2269), and connector filters (#2291 — @abhishekgml1991).
- Web connector — personal web connector fix (#2214 — @R0gue-one).
- OAuth apps — named OAuth app support (#2149 — @R0gue-one) and a toast when no OAuth app is available (#2212).
- Sync & configuration — filter changes trigger full sync (#2200 — @shrikantNemiwal1), sync schedule fixed (#2260), default filters fixed (#2251), manage-configuration button relocated (#2205), helper text when no connector is selected (#2250 — @vishwjeet-pawar03).
Agents & AI
- Agents know who’s asking: caller name/email passed to service agents (#2215 — @vishwjeet-pawar03) with user-context fixes for service accounts (#2258), and the current time is sent to the LLM in the user’s timezone (#2199).
- Agent UX: new creation dialog (#2244 — @jatingaur18), streaming fixed (#2248), auth name field in toolset setup (#2204).
- Guardrails: AI models and connectors can’t be deleted while an agent depends on them (#2166 — @darshangodase).
- Tools: Confluence tools now retrieve in parallel (#2233 — @vishwjeet-pawar03); the fetch-weburl tool avoids login-walled pages (#2242 — @abhishekgml1991); Redshift toolset schema tool, forced SQL routing, and asyncio fixes (#2294, #2295, #2300 — @Ayushman444); query-block call fix (#2013 — @rish664).
- Citations guarded against missing data before
.getaccess (#2284 — @Ayushman444); internal ids stripped from Neo4j responses (#2280 — @realaashil). - Speech recognition extended to Brave and Edge browsers (#2297 — @Kushagra1122).
Fixes
- Citations: scrolling and fuzzy matching for Markdown files (#2203 — @vishwjeet-pawar03), citation bubbles are links (#2290).
- All-records: scoped search/filter (#2247 — @shrikantNemiwal1), filter param persistence (#2239), search-clear behavior (#2255); collections page defaults to the first collection (#2202 — @R0gue-one); record preview rerouted to
record/:id(#2235 — @vanshg685). - Chat: input removed from shared chats (#2266 — @jatingaur18), web-search filter clearing (#2292), CSV row rendering (#2298), archive-chat Mongo query made DocumentDB-compatible (#2273 — @jatingaur18).
- Errors surfaced properly: API error messages propagate to UI toasts (#2209 — @shrikantNemiwal1), invite-mail and cancel-invite error codes corrected (#2219 — @vanshg685), reset-password “Invalid URL” fixed (#2176).
- User groups API and frontend call fixed (#2234 — @realaashil); service-page links hidden from non-admins (#2246 — @rish664); onboarding confirmation dialog (#2256); an
is_externalfield added to org-fetching methods (#2090 — @jatingaur18); blob-storage URL fix (#2301 — @abhishekgml1991).
Performance & reliability
- Knowledge-hub memory-exceed fix (#2259 — @shrikantNemiwal1).
- Rate limit increased (#2236 — @abhishekgml1991).
- Frontend proactively refreshes tokens before expiry (#2240 — @tushar1245).
Security & authentication
- Secrets are masked in configuration API responses (#2293 — @vishwjeet-pawar03).
- MCP scopes updated for the new MCP server (#2226 — @realaashil).
- Missing SAML certificate now logs a proper error (#2206 — @vanshg685).
Developer experience & infrastructure
- Parsing dependencies slimmed: html2text replaced with markdownify (#2276) and ocrmypdf support removed (#2277 — @abhishekgml1991).
- Event definitions separated (#1917 — @realaashil) and the legacy
baseArangoServiceusage removed (#2187 — @tushar1245). - CI/integration tests: SharePoint workflow with site-name variable (#2198, #2207 — @R0gue-one), Jira credentials (#2230 — @darshangodase), auth-route ITs (#1869), storage suites ordered last (#2225), daily midnight-IST runs (#2288 — @realaashil),
GCS_BUCKET_NAMEvariable (#2289 — @Kushagra1122), Python coverage threshold to 91.5 (#2237), test fix (#2285). - Docs: new README with linked images (#2208, #2211 — @rish664) and an FAQ section (#2243 — @meichuanyi).
- Dependency bumps (#2195, #2227, #2228, #2252).
New contributors
- @meichuanyi made their first contribution in #2243
Full commit-level detail: GitHub release · Compare view
0.4.0 — Next.js frontend replaces the React UI; GitLab, Salesforce, and Zoom connectors land
Stable release · View on GitHubA very large release — 380+ merged PRs since 0.3.0. The headline is a complete frontend replacement: the React SPA was rewritten as a Next.js app and the old frontend removed. Around it, the connector fleet grows with GitLab, Salesforce, Zoom, and personal Outlook; the assistant gains web search, a coding sandbox with artifacts, and image/speech model support; and toolsets get a first-class management experience with several new integrations (Redshift, OneDrive, Lumos, Zoom, Salesforce).For operators, this release adds real deployment flexibility: Redis as an optional message broker in place of Kafka, Windows support, Python 3.12, hot-reloading dev composes, and log rotation. A long tail of fixes hardens chat, citations, knowledge search, and connector sync.
Full commit-level detail: GitHub release · Compare view
Highlights
The frontend is now Next.js
The React SPA was rewritten as a Next.js application (#1882 — @abhishek-pipeshub) and, after stabilizing through the beta cycle, the legacy React frontend was removed so the Next.js app is the only UI (#2169 — @abhishekgml1991). The new frontend has its own build workflow (#1920), Turbopack in dev mode (#1937 — @akshay-pythm), and went through a broad cleanup pass (#1970). Much of this release’s fix volume is polish on the new UI.Coding sandbox, artifacts, and image generation
Conversations can now run code in a sandbox and produce artifacts, backed by a new image-generation model type (#2031 — @abhishekgml1991), with the sandbox enabled in the production compose (#2165). Follow-ups fixed local executor errors (#2048), artifact UI issues (#2050), rendered PPTX artifacts as PDF with debounced SSE updates (#2053), and raised the image-generation timeout (#2072 — @abhishek-pipeshub). Speech-to-text and text-to-speech model types were added alongside (#2033).New connectors: GitLab, Salesforce, Zoom, personal Outlook
GitLab connector v1 syncs work items and merge requests (with notes) plus project code files (#1857 — @jain-ayush-wyld). Salesforce arrives as both a data connector (#1787) and an agent toolset (#1862 — @jatingaur18). Zoom gets a connector (#1809 — @darshangodase) and a toolset (#1687 — @jatingaur18), with meeting web/recording URLs and transcript text highlighting (#1819, #1820, #1752). A personal Outlook connector rounds out the set (#1756 — @shrikantNemiwal1).Toolsets become first-class
Dedicated toolset pages (#1954 — @vishwjeet-pawar03) with documentation links (#1997), plus new toolsets for Redshift (#1686 — @Ayushman444), OneDrive (#1926 — @jatingaur18), and Lumos (#1649 — @vanshg685). Jira and Confluence toolsets/connectors now accept API-token authentication (#1742 — @darshangodase). A developer-settings page manages OAuth 2.0 apps (#1913 — @vanshg685), and OAuth apps are visible to non-admin users (#2138 — @realaashil).Web search and deeper agent modes
The assistant gains web search (#1903 — @kaushal1999), wired into the agent schema and builder UI (#2125, #2143, #2147). The assistant also gets an agent mode (#1874 — @tushar1245), the deep agent adds a critic + reflector loop for self-checking answers (#1739 — @Ayushman444), and the universal agent picks up tools, with built-in tools surfaced in the response prompt (#2100, #2059 — @vishwjeet-pawar03).Indexing reconciliation and SQL connectors
The indexing pipeline gains reconciliation so documents that drop out mid-pipeline are detected and re-driven, arriving together with SQL connectors (#1568 — @Ayushman444). Indexing throughput improved in two rounds (#1692 — @mstcomit, #1759 — @kaushal1999), Docling parse/OCR worker counts were retuned (#1773), and duplicate detection now hashes the latest file content (#1770 — @kaushal1999).More ways to run PipesHub
Redis can now stand in for Kafka as the message broker (#1823 — @realaashil), Windows is supported (#1844, #1833), and dev composes get hot reloading (#1746 — @anupPradhan0, #1782). Neo4j and Mongo database names are configurable via env (#1743 — @tushar1245), Docker logs rotate (#1747), and--wait blocks until the container reports healthy (#2024).Breaking changes & upgrade notes
- The legacy React frontend is removed; the Next.js frontend is the only UI (#2169).
- Python services moved to Python 3.12 (#1755).
- The frontend consolidates on a single backend URL; redundant URL settings were removed (#1780).
- The SMTP step was removed from onboarding (#2180).
- Unnecessary container ports are no longer exposed, alongside a logs cleanup (#1890).
- The backend switched to the new custom MCP server (#2185).
- The dev Docker compose now defaults to Neo4j as the graph store (#2170).
Connectors
- SharePoint — full-sync fix, new-UI fixes, and site filters now apply to site groups (#1736, #2056, #2103 — @R0gue-one).
- Google Drive & Gmail — fixes for the new UI (#2088) and the Drive toolset (#2135).
- Jira & Confluence — multiple-site selection fixed, with a fallback (#1964, #2014); Jira and Linear files full-sync fixes (#2015); record-group/folder/record reindexing plus Linear and Zammad documentation links (#2020 — @darshangodase); email-visibility doc links on config pages (#2189).
- GitHub — assorted fixes (#1728 — @jain-ayush-wyld).
- Nextcloud — Python 3.10 typing compatibility (#1722).
- Microsoft 365 — group filtering (#1843).
- Web connector — visited-URL tracking fix (#1671), pages filter removed (#1750), sync-settings and config-page fixes (#2087, #2107).
- Object storage (S3, GCS, Azure Blob/Files) — record timestamps (#2083 — @Kushagra1122), team-app and personal S3 permission fixes (#1559 — @shrikantNemiwal1), S3-compatible blob storage support (#2154).
- Connector platform — lifecycle management supports pre-existing resources (#1971); instance removal with optimistic deletion handling (#1999, #2037, #2040 — @Kushagra1122); custom per-connector config-page logic (#2011 — @R0gue-one); sync fixes (#1980, #2001, #2005); sync strategy selector and filter dropdowns (#1998); sync filter chips (#2017); connector rename (#2110); info message and sync-confirm modal (#2117); connectors page UI (#2132); connector id display (#2167); connector icons (#1995); docs link in the config header (#2146); filter API fix (#2173).
- Connector OAuth — non-admin users can authenticate their own connectors (#2097, #2034); OAuth flows use config
authorizeUrl/tokenUrlinstead of the registry (#1591 — @shrikantNemiwal1); OAuth scopes reduced (#2029 — @jain-ayush-wyld); required checkboxes must be checked (#2098). - Internal records are excluded from indexing (#1724 — @R0gue-one).
Agents & AI
- LLM providers: MiniMax added as a first-class provider (#1784 — @octo-patch); Ollama model updates no longer hang when no API key is set (#1923 — @JiwaniZakir);
role=Nonevalidation errors in streaming chunks handled (#1785 — @Sangampal11); Azure AI setup hints with session-invalidate recovery (#2028); langchain Google AI package upgraded (#1867). - AI-model management: model add/edit functionality (#1968 — @vanshg685), model name display and rendering visibility (#1961, #1896), settings shortcut in the models box (#2044), optional embedding-model step at onboarding (#1992), fallback to the default model when a conversation’s model is unavailable (#2116 — @tushar1245), agent chat restricted to agent-configured models (#1942), model selection fixes for chats (#2089).
- Agent platform: sharing (#1604), sidebar toolset registry (#1725), canvas fixes (#1898), agent modes in chat (#1912), knowledge retrieval (#1916, #2081), non-OAuth toolsets (#1845), knowledge/tool filters (#2016, #2144, #2145), react-agent handoff on direct answers (#2036), parallel conversation handling (#2175), duplicate streaming and citation hover states (#2060), chat archive and rename (#2051), capability-summary prompt with SQL as an internal domain tool (#2093), one instance of a toolset per agent (#2101), system prompt fix (#1941), agent migration removed (#2133).
- Agent service accounts added (#1767 — @vishwjeet-pawar03) with dialog and behavior fixes (#1865, #1934).
- Slack: toolset DM queries (#2104), response id and timestamp resolution (#2129 — @Ayushman444), bot follow-ups in agents (#2127), link previews (#1944), time context across Slack, assistant, and agents (#1881 — @kaushal1999).
- Citations: refactor with cleanup and bug fixes (#1840 — @kaushal1999), grouping plus CSV support (#1976), consistent single-citation format (#2003, #2021), malformed and bare citation handling (#2159), citation dropping in multi-hop retrieval fixed (#2067), node type in citation URLs (#1991), text-fragment URL rewrite guard (#1821), duplicate popovers prevented (#2121), full-screen highlight fix (#1957), Python-side citation bug fix (#1831).
- Streaming: word-by-word streaming instead of large chunks (#2141 — @kaushal1999), chat stream fix (#2136).
- Knowledge search & graph: KB filter in knowledge search (#1779), result fixes (#1895, #2092), knowledge-hub parent permissions (#1814), document scopes removed and
stream_recordfixed (#1667), parent-child edge update (#1532 — @jatingaur18). - SQL toolsets: query fixes (#2082), downloadable query results (#2006).
Fixes
- Chat UX: search and unsaved-changes dialog (#1943), share/archive fixes (#1951, #2078), time grouping (#2046), scrolling during streaming (#2181, #2186), conversation margins (#1962), filter persistence (#2099), collection filter fixes (#2061, #2071, #2142), agent chats separated from the assistant page (#2130, #2140), three-dots menu reload (#2065), archive restore/delete placement (#2106), chat feedback (#2113, #2118), hardcoded suggestions and follow-ups hidden (#1967), team creation from chat share (#1979).
- All-records & collections: child-record traversal (#2007), filters handling (#2047, #2049, #2111), sidebar and nested-node pagination (#2077, #2084), search results clickable (#2156), connector links (#1993), record detail page (#2019, #2025), record status reason visibility (#2079), collection page fixes (#1956, #2086).
- Files & preview: upload API paths and versioning for local + S3 storage (#1505 — @Ayushman444), folder upload (#2161), upload status (#2009), Markdown uploads in the new UI (#1977), DOCX rendering with resizable preview (#2045), PDF viewer fixes (#2094, #2124), Excel viewer (#2163), web-URL placement in preview details (#2155), open-in-web button (#2096), large queries / file preview / web-URL fixes (#2068), upload-docs scroll bar with citation format (#2021).
- Workspace, teams & users: workspace UI fixes (#1935, #2057, #1982, #2064 — @akshay-pythm), action menu hidden while a sub-menu is open (#1907), pagination reset prevented (#1906), team pages and route guard (#2066, #1989), draggable sidebar with persistent width (#1893 — @akshay-pythm), infinite scrolling in users/teams/shared chats (#1953), user list filters with generic messaging (#2114), unique key fix (#1892).
- Profile, org & onboarding: profile and logo fixes (#1904, #2035, #1938), invite fixes with resend/cancel options (#1894, #1986), language selection at sign-up (#2043), default-group deletion guard (#2032).
- Internationalization: i18n across workspace pages (#1996, #2004 — @akshay-pythm), missing translations added (#1952), key fixes (#2063), unused translations removed (#2150).
- UI polish: loaders and spinners on actions (#1940, #1966, #2002), infra service logos and icon fixes (#1972, #2023, #2109), auth buttons (#2152), toolset UI bugs (#1963), agent chat view button (#1974), wispr drawer (#2039), attachment button hidden until ready plus favicon (#1975),
hrefsupport in UI components (#2052), form validations (#2070), number filters saved as numbers (#2112), assorted minor UI fixes (#2128, #2095, #2080, #2018, #2131). - Misc: error propagation to frontend toasts (#2153), toolset redirect on Docker (#1994), frontend build failure fix (#1921).
Performance & reliability
- Indexing throughput and Docling worker tuning (see Highlights) plus latest-content MD5 dedup (#1770).
- Retry on ArangoDB deadlocks for data-source entities (#1864 — @tushar1245), an optimized KB deletion query (#2184 — @shrikantNemiwal1), and an app-permission subquery fix (#1856).
- Config reads no longer served from cache, avoiding stale credentials (#2126 — @kaushal1999).
- Health-check race condition fixed (#2162), interval moved to 10 minutes (#2008), health checks with user full-name validation (#1978) and a health-page revamp (#1988).
- Frontend memory optimized to prevent OOM crashes (#1766 — @anupPradhan0) and auto-restart if the frontend goes down (#1757).
- Frontend API timeout raised to 60s (#2122); aiohttp content-type check (#2183 — @Ayushman444).
Security & authentication
- Authentication flow changes (#1723 — @vanshg685) and email-change verification via mail (#1748, #1936).
- Reset-password always returns 200 with a generic message to prevent account enumeration (#2041 — @realaashil).
- Blocked users get a 24-hour cooling period (#2062 — @realaashil).
- Frontend URL localhost validation (#1825), vulnerable unused package removed (#2000), deployment key added to the unencrypted config list (#2076).
- SAML and default embedding-model frontend fixes (#2105).
Developer experience & infrastructure
- Unit tests pushed above 90% coverage on Node.js and Python services (#1740, #1762, #1790, #1806, #1853, #1969, #2123) with threshold/fix churn (#1830, #1834, #1854, #2069) and weekly coverage reporting to Slack (#1744, #1754, #1836, #1837, #1838).
- Integration-test infrastructure built out across Arango, storage, Confluence, MCP, and OpenAPI suites (#1727, #1729, #1732, #1733, #1734, #1735, #1737, #1778, #1861, #1866, #1871, #1872, #1879, #1908, #1919, #1922, #1965, #1990, #2157, #2160, #2164, #2174) with CI runner sizing and secrets (#1826, #1900, #1901).
- Frontend test tooling: Playwright integration (#1958), Monocart coverage reports (#1959), Claude Code review workflow (#1955, #1973, #1985, #1987, #1981).
- Validation-failure logging was made a warning, then reverted after review (#1849, #1860).
- Docs: README refresh with TOC (#1800, #1803, #1888, #2177), SDK/MCP repo links (#1777, #1798), contributing guide with dependabot fixes (#2171).
- Cleanup: lint fixes (#1721), noisy logs removed or demoted (#1745, #1771, #1808), opik package removed (#1753), unused Docling files deleted (#1764), Neo4j Makefile (#1817), email templates (#2010), Docker compose/YAML fixes (#1793, #1850), missing lib folder (#1887).
- Dependency bumps via Dependabot across Python, Node.js, and the frontends (#1760, #1761, #1768, #1769, #1775, #1776, #1783, #1786, #1791, #1810, #1811, #1816, #1818, #1827, #1847, #1851, #1852, #1858, #1859, #1868, #1880, #1883, #1884, #1886, #1909, #1910, #1924, #1925, #1928, #1930, #1933, #1946, #1947, #1948, #1949, #1950, #2026, #2027, #2030, #2055, #2058, #2120, #2172), including one axios revert (#1983).
New contributors
- @octo-patch made their first contribution in #1784
- @Sangampal11 made their first contribution in #1785
- @akshay-pythm made their first contribution in #1893
- @JiwaniZakir made their first contribution in #1923
Full commit-level detail: GitHub release · Compare view
0.4.0-beta.2 — Next.js frontend previews; GitLab, Salesforce, and Zoom connectors arrive
Beta release · View on GitHubThis beta was finalized as 0.4.0.The pre-release cut of the 0.4.0 cycle — 350+ merged PRs since 0.3.0. It previews the new Next.js frontend (the legacy React UI still ships in this beta; it was removed in the stable release), adds GitLab, Salesforce, Zoom, and personal Outlook connectors, brings web search, a coding sandbox with artifacts, and image/speech model support to the assistant, and expands toolsets with Redshift, OneDrive, Zoom, and Salesforce. Operators gain Redis as an optional message broker, Windows support, Python 3.12, and hot-reloading dev composes. See the 0.4.0 changelog for the finalized release including the last round of fixes.
Full commit-level detail: GitHub release · Compare view
Highlights
Next.js frontend preview
The React SPA was rewritten as a Next.js application (#1882 — @abhishek-pipeshub), shipping alongside the legacy UI in this beta with its own build workflow (#1920), Turbopack in dev mode (#1937 — @akshay-pythm), and a broad cleanup pass (#1970). Much of this beta’s fix volume is polish on the new UI.Coding sandbox, artifacts, and image generation
Conversations can run code in a sandbox and produce artifacts, backed by a new image-generation model type (#2031 — @abhishekgml1991), with follow-ups for local executor errors (#2048), artifact UI issues (#2050), PPTX-as-PDF rendering with debounced SSE updates (#2053), and a longer image-generation timeout (#2072 — @abhishek-pipeshub). Speech-to-text and text-to-speech model types were added alongside (#2033).New connectors: GitLab, Salesforce, Zoom, personal Outlook
GitLab connector v1 syncs work items and merge requests (with notes) plus project code files (#1857 — @jain-ayush-wyld). Salesforce arrives as a connector (#1787) and toolset (#1862 — @jatingaur18). Zoom gets a connector (#1809 — @darshangodase) and toolset (#1687 — @jatingaur18) with meeting web/recording URLs and transcript highlighting (#1819, #1820, #1752). A personal Outlook connector rounds out the set (#1756 — @shrikantNemiwal1).Toolsets become first-class
Dedicated toolset pages (#1954 — @vishwjeet-pawar03) with documentation links (#1997), new Redshift (#1686 — @Ayushman444) and OneDrive (#1926 — @jatingaur18) toolsets, API-token auth for Jira and Confluence (#1742 — @darshangodase), a developer-settings page for OAuth 2.0 apps (#1913 — @vanshg685), and OAuth apps visible to non-admins (#2138 — @realaashil).Web search and deeper agent modes
The assistant gains web search (#1903 — @kaushal1999), wired into the agent schema and builder UI (#2125, #2143, #2147), plus an agent mode (#1874 — @tushar1245). The deep agent adds a critic + reflector loop (#1739 — @Ayushman444), and the universal agent picks up tools (#2100, #2059 — @vishwjeet-pawar03).Indexing reconciliation, SQL connectors, and deployment flexibility
The indexing pipeline gains reconciliation alongside SQL connectors (#1568 — @Ayushman444), with indexing performance improved in two rounds (#1692 — @mstcomit, #1759 — @kaushal1999) and Docling worker tuning (#1773). Redis can stand in for Kafka as the message broker (#1823 — @realaashil), Windows is supported (#1844, #1833), dev composes hot-reload (#1746 — @anupPradhan0, #1782), Neo4j/Mongo DB names are env-configurable (#1743 — @tushar1245), Docker logs rotate (#1747), and--wait blocks until healthy (#2024).Breaking changes & upgrade notes
- Python services moved to Python 3.12 (#1755).
- The frontend consolidates on a single backend URL; redundant URL settings were removed (#1780).
- Unnecessary container ports are no longer exposed, alongside a logs cleanup (#1890).
Connectors
- SharePoint — full-sync fix, new-UI fixes, site filters apply to site groups (#1736, #2056, #2103 — @R0gue-one).
- Google Drive & Gmail — new-UI fixes (#2088) and Drive toolset fix (#2135).
- Jira & Confluence — multiple-site selection fixed with a fallback (#1964, #2014); Jira and Linear files full-sync fixes (#2015); reindexing for record groups/folders/records plus Linear and Zammad doc links (#2020 — @darshangodase).
- GitHub — assorted fixes (#1728 — @jain-ayush-wyld); Nextcloud — Python 3.10 typing compatibility (#1722); Microsoft 365 — group filtering (#1843).
- Web connector — visited-URL tracking fix (#1671), pages filter removed (#1750), sync-settings and config-page fixes (#2087, #2107).
- Object storage (S3, GCS, Azure Blob/Files) — record timestamps (#2083 — @Kushagra1122), team-app and personal S3 permission fixes (#1559 — @shrikantNemiwal1), S3-compatible blob storage support (#2154).
- Connector platform — lifecycle support for pre-existing resources (#1971); instance removal with optimistic deletion (#1999, #2037, #2040 — @Kushagra1122); custom config-page logic (#2011 — @R0gue-one); sync fixes (#1980, #2001, #2005); sync strategy selector (#1998) and filter chips (#2017); rename (#2110); info message and sync-confirm modal (#2117); page UI (#2132); icons (#1995); docs link in config header (#2146).
- Connector OAuth — non-admin users can authenticate their own connectors (#2097, #2034); OAuth uses config
authorizeUrl/tokenUrl(#1591 — @shrikantNemiwal1); scopes reduced (#2029 — @jain-ayush-wyld); required checkboxes enforced (#2098). - Internal records are excluded from indexing (#1724 — @R0gue-one).
Agents & AI
- LLM providers: MiniMax added (#1784 — @octo-patch); Ollama update no longer hangs without an API key (#1923 — @JiwaniZakir);
role=Nonestreaming chunks handled (#1785 — @Sangampal11); Azure AI hints with session recovery (#2028); langchain Google package upgraded (#1867). - AI-model management: add/edit models (#1968 — @vanshg685), model name display (#1961, #1896), settings shortcut (#2044), optional embedding-model onboarding step (#1992), default-model fallback (#2116 — @tushar1245), agent chat restricted to configured models (#1942), model selection fixes (#2089).
- Agent platform: sharing (#1604), sidebar toolset registry (#1725), canvas (#1898), modes (#1912), knowledge retrieval (#1916, #2081), non-OAuth toolsets (#1845), knowledge/tool filters (#2016, #2144, #2145), react-agent handoff (#2036), duplicate streaming and citation hover states (#2060), chat archive/rename (#2051), capability prompt with SQL as internal tool (#2093), single toolset instance per agent (#2101), system prompt fix (#1941), agent migration removed (#2133).
- Agent service accounts (#1767 — @vishwjeet-pawar03) with dialog and behavior fixes (#1865, #1934).
- Slack: toolset DM queries (#2104), id/timestamp resolution (#2129 — @Ayushman444), bot follow-ups (#2127), link previews (#1944), time context (#1881 — @kaushal1999).
- Citations: refactor with cleanup (#1840 — @kaushal1999), grouping and CSV support (#1976), consistent format (#2003, #2021), multi-hop dropping fix (#2067), node type in URLs (#1991), text-fragment guard (#1821), popover and highlight fixes (#2121, #1957), Python-side bug fix (#1831).
- Streaming: word-by-word streaming (#2141 — @kaushal1999), chat stream fix (#2136).
- Knowledge search & graph: KB filter (#1779), result fixes (#1895, #2092), parent permissions (#1814), document scopes removed and
stream_recordfixed (#1667), parent-child edge update (#1532 — @jatingaur18). - SQL toolsets: query fixes (#2082), downloadable query results (#2006).
Fixes
- Chat UX: search and unsaved-changes dialog (#1943), share/archive fixes (#1951, #2078), time grouping (#2046), margins (#1962), filter persistence (#2099), collection filters (#2061, #2071, #2142), agent chats separated from the assistant page (#2130, #2140), menu reload (#2065), archive buttons (#2106), feedback (#2113, #2118), suggestions hidden (#1967), team creation from chat share (#1979).
- All-records & collections: child-record traversal (#2007), filters handling (#2047, #2049, #2111), sidebar and pagination (#2077, #2084), clickable search results (#2156), connector links (#1993), record detail page (#2019, #2025), status reason visibility (#2079), collection page fixes (#1956, #2086).
- Files & preview: upload API paths and versioning for local + S3 (#1505 — @Ayushman444), upload status (#2009), Markdown uploads (#1977), DOCX rendering and resizable preview (#2045), PDF viewer fixes (#2094, #2124), web-URL placement (#2155), open-in-web button (#2096), large queries / preview / web-URL fixes (#2068).
- Workspace, teams & users: workspace UI fixes (#1935, #2057, #1982, #2064 — @akshay-pythm), action menu (#1907), pagination reset (#1906), team pages and route guard (#2066, #1989), draggable sidebar (#1893 — @akshay-pythm), infinite scrolling (#1953), user filters (#2114), unique key (#1892).
- Profile, org & onboarding: profile/logo fixes (#1904, #2035, #1938), invites with resend/cancel (#1894, #1986), sign-up language selection (#2043), default-group deletion guard (#2032).
- i18n: workspace pages (#1996, #2004 — @akshay-pythm), missing translations (#1952), key fixes (#2063), unused translations removed (#2150).
- UI polish: loaders/spinners (#1940, #1966, #2002), logos/icons (#1972, #2023, #2109), auth buttons (#2152), toolset UI bugs (#1963), agent chat view button (#1974), wispr drawer (#2039), attachment button hidden plus favicon (#1975),
hrefsupport (#2052), form validations (#2070), number filters saved as numbers (#2112), assorted minor fixes (#2128, #2095, #2080, #2018, #2131). - Misc: error propagation to frontend toasts (#2153), toolset redirect on Docker (#1994), frontend build failure fix (#1921).
Performance & reliability
- Latest-content MD5 hashing for duplicate detection (#1770 — @kaushal1999).
- Retry on ArangoDB deadlocks (#1864 — @tushar1245) and an app-permission subquery fix (#1856).
- Config reads no longer served from cache (#2126 — @kaushal1999).
- Health checks: 10-minute interval (#2008), full-name validation (#1978), health-page revamp (#1988).
- Frontend memory optimized against OOM (#1766 — @anupPradhan0), auto-restart if the frontend goes down (#1757), API timeout raised to 60s (#2122).
Security & authentication
- Authentication flow changes (#1723 — @vanshg685) and email-change verification via mail (#1748, #1936).
- Reset-password always returns 200 with a generic message (#2041 — @realaashil); blocked users get a 24-hour cooling period (#2062).
- Frontend URL localhost validation (#1825), vulnerable unused package removed (#2000), deployment key added to the unencrypted list (#2076), SAML and default embedding-model fixes (#2105).
Developer experience & infrastructure
- Unit-test coverage pushed above 90% across Node.js and Python (#1740, #1762, #1790, #1806, #1853, #1969, #2123) with threshold/fix churn (#1830, #1834, #1854, #2069) and weekly reports to Slack (#1744, #1754, #1836, #1837, #1838).
- Integration-test infrastructure across Arango, storage, Confluence, MCP, and OpenAPI suites (#1727, #1729, #1732, #1733, #1734, #1735, #1737, #1778, #1861, #1866, #1871, #1872, #1879, #1908, #1919, #1922, #1990) with runner sizing and secrets (#1826, #1900, #1901).
- Frontend test tooling: Playwright (#1958), Monocart coverage (#1959), Claude Code review workflow (#1955, #1973, #1985, #1987, #1981).
- Validation-failure logging made a warning, then reverted (#1849, #1860).
- Docs: README refresh with TOC (#1800, #1803, #1888), SDK/MCP repo links (#1777, #1798).
- Cleanup: lint fixes (#1721), log noise removed or demoted (#1745, #1771, #1808), opik package removed (#1753), unused Docling files deleted (#1764), Neo4j Makefile (#1817), email templates (#2010), Docker compose/YAML fixes (#1793, #1850), missing lib folder (#1887).
- Dependency bumps via Dependabot across Python, Node.js, and the frontends (#1760, #1761, #1768, #1769, #1775, #1776, #1783, #1786, #1791, #1810, #1811, #1816, #1818, #1827, #1847, #1851, #1852, #1858, #1859, #1868, #1880, #1883, #1884, #1886, #1909, #1910, #1924, #1925, #1928, #1930, #1933, #1946, #1947, #1948, #1949, #1950, #2026, #2027, #2030, #2058), including one axios revert (#1983).
New contributors
- @octo-patch made their first contribution in #1784
- @Sangampal11 made their first contribution in #1785
- @akshay-pythm made their first contribution in #1893
- @JiwaniZakir made their first contribution in #1923
Full commit-level detail: GitHub release · Compare view
0.3.0 — Agents get toolsets and MCP, Slack becomes a real bot platform, Neo4j joins as a graph option
Stable release · View on GitHub0.3.0 spans 150+ merged PRs and is squarely an AI-platform release. Agents gain configurable toolsets — Jira, ClickUp, MariaDB, Microsoft Teams, Outlook, and GitHub — plus a new deep-agent mode, and PipesHub ships an MCP server bundled with the main service so external AI clients can talk to your workspace over the OAuth2 stack that matured this release (RFC 9728 metadata, dedicated frontend pages, admin developer settings). The Slack bot grows up too: streamed answers, multiple bots per deployment, and multi-user conversations per thread with @mention resolution.For operators, Neo4j lands as an alternative graph database alongside ArangoDB (including optional Helm support), the web connector gets a substantial reliability overhaul, and CI gains an integration-test workflow, an OpenAPI validator, and broader lint enforcement. New datasource clients arrive for RSS, ClickHouse, Lattice, Databricks, Lumos, ClickUp, and a personal GitHub connector.
Full commit-level detail: GitHub release · Compare view
Highlights
Agent toolsets and a deep agent
Agents can now be equipped with toolsets (#1506, multi-toolset support #1579 — @vishwjeet-pawar03), and a deep-agent mode arrives together with Microsoft Teams, Outlook, and GitHub toolsets (#1642). The catalog grows with a ClickUp toolset (#1688, merge fix #1719 — @darshangodase) and a MariaDB toolset with conversation tasks (#1674 — @Ayushman444). Agents also became aware of their own capabilities (#1670), gained per-agent instructions in the frontend (#1554), and were promoted to the navbar as a beta (#1520). Follow-up fixes covered the Jira toolset (#1596), deep-agent retrieval (#1652), toolset instance deletion (#1624), the toolset config dialog (#1644), removal of the toolset migration (#1657), and stale agent-chat state (#1659).MCP integration on a maturing OAuth2 stack
An MCP server is now bundled with the main service (#1611, fix #1633 — @realaashil), letting MCP-capable AI clients connect to PipesHub. Supporting it, the OAuth2 stack matured substantially: an OAuth Protected Resource Metadata endpoint per RFC 9728 (#1607), Cursor custom-URI support (#1608), OAuth2 frontend pages (#1542), an admin-only developer-settings section (#1553), confirmation dialogs for deleting OAuth apps or revoking tokens (#1547), redirect required only for the authorization-code grant (#1598), auth-middleware handling (#1509 — @rish664), and a series of OAuth and scope fixes (#1507, #1544, #1617).Slack bot: streaming, multi-bot, multi-user threads
The Slack bot switched to the chat stream API for real-time answers (#1526 — @kaushal1999), supports multiple bots per deployment (#1538), and handles multi-user conversations per thread with @mention resolution (#1593). Slack events are now proxied through the Node.js API (#1531 — @abhishekgml1991). Formatting and robustness fixes cover newline rendering (#1566), table streaming and per-message character limits (#1573), email and HTML entities (#1601), @mention stripping from queries (#1529), startup without a configured bot (#1634), permission management (#1552), and general bot fixes (#1625).Neo4j as an alternative graph database
Neo4j support was merged as a graph-database option alongside ArangoDB (#1427 — @tushar1245), with linting integration (#1577), corrected setup instructions (#1606), a KB-sharing-status query fix (#1701), and optional Neo4j support in the Helm chart (#1696 — @anupPradhan0).Web connector overhaul
The web connector got a sustained reliability push from @R0gue-one: a generator-based crawl function (#1539), retry mechanism (#1551), crawl scoped to stay within the start URL with domain checks at processing time (#1641, #1650), connector filters (#1556), content and metadata processing (#1570), improved HTML cleaning (#1618), AVIF processing and better SVG handling (#1541), parent-child relations (#1643), a settings revert back to sync settings (#1587), and rounds of bug fixes (#1610, #1658, crawl fixes #1527 — @realaashil).Seven new datasources and connectors
New sources this cycle: an RSS connector (#1475 — @uncleSlayer), ClickHouse with org APIs (#1488, #1498 — @uncleSlayer), Lattice (#1545 — @rish664), Databricks (#1638), Lumos (#1640), ClickUp (#1683), and a GitHub personal connector (#1469 — @jain-ayush-wyld). The Zoom client/datasource was also refactored (#1684).Breaking changes & upgrade notes
- Deprecated endpoints were removed from the OpenAPI spec (#1582, #1597); the signed-URL download route was removed everywhere in favor of authenticated downloads (#1470).
- The
connector_disabledandpausedindexing statuses were removed from records (#1663); connectors configured for manual sync no longer sync on service startup (#1592). - The KV migration is skipped when etcd is not set up (#1562).
Connectors
- Google Workspace — credentials-creation fix in google.py (#1473), datasource refresh (#1487), shared-with-me query and Drive workspace-credentials fix (#1484), and folder sync for Drive and KB (#1623, #1629 — @R0gue-one)
- Outlook — group-mail web URL and indexing fixes (#1478), recipients and subject included in indexed mail body (#1493), and guidance plus occurrence-delete updates (#1647 — @jatingaur18)
- Microsoft / SharePoint — user-permission mapping fix (#1558 — @mstcomit) and Graph API pagination so all SharePoint sites are discovered (#1550 — @mstcomit)
- Box — bug and issue fixes (#1501 — @realaashil)
- GitHub — user-repos fixes for the personal connector (#1662 — @jain-ayush-wyld)
- Shared connector framework — full sync triggered on filter change with edge deletion (#1515, #1569 — @shrikantNemiwal1), sync-issue fixes (#1675), config-path fix for connector instance deletion (#1534)
Agents & AI
- AWS Bedrock can optionally read IAM role credentials from EC2 (#1514 — @abhishekgml1991)
- New OpenCV + PyMuPDF parser in the parsing pipeline (#1655 — @kaushal1999)
- Fall back to embedding only when document classification fails (#1575)
- Knowledge-retrieval fix (#1520) and Teams channel/team member get-and-add changes (#1646 — @vanshg685)
- Record message enhancements for indexing (#1513)
Fixes
- Knowledge Hub: scoped search (#1464), origin filter (#1653), KB-sharing status (#1697), KB move API (#1510), record
sizeInBytesand default KB name (#1548), a query-change revert across both graph providers (#1508), and a generic KB implementation refactor (#1672) - Graph layer: wrong argument order in
update_node(#1521), collection argument removed fromdelete_parent_child_edge(#1621),get_usercalled withactiveas a keyword (#1702), permission-edge cleanup whenrecord_group_idchanges (#1536 — @jatingaur18), schema fix (#1588) - Records/indexing: cross-loop indexing error (#1555 — @Ayushman444), record-stream API error handling (#1660), app-user validation (#1590)
- UI: model friendly names (#1491), manual-indexing button in connector stats (#1489), connector-stats card buttons (#1557), missing icon (#1561), connector icon for agent knowledge (#1668), axios errors surfaced via snackbar (#1690), non-editable inputs disabled (#1694)
- Misc: CORS now allows PATCH (#1693), Redis client fix (#1586)
Performance & reliability
- Cross-connector record leakage caused by identical
virtualIds fixed (regression) (#1699 — @tushar1245) - Knowledge Hub search/filter latency reduced (#1472), stats-query response time cut (#1574), and
search_with_filtersquery performance improved (#1673) - Connector instance deletion made async with query optimization (#1619); duplicate embedding deletions skipped during bulk delete on instance removal (#1517)
- Compression for local storage (#1468), cache invalidation published from Node.js (#1474), and config/notification services closed cleanly during shutdown (#1480)
Security & authentication
- JIT SAML SSO support (#1502 — @vanshg685) and admin ability to unblock users, with a separate SMTP settings section (#1495)
- Token refresh added to the axios request interceptor (#1656 — @tushar1245)
- Dependency upgrades: axios (#1471), express-rate-limit (#1630), undici (#1665)
Developer experience & infrastructure
- Integration-test workflow for PRs and scheduled runs (#1613 — @Kushagra1122), with an S3 integration test and in-memory store client property (#1523), runner supervision (#1689), and workflow fixes (#1711, #1715, #1716 — @realaashil)
- OpenAPI validator with PR sanity checks (#1482, #1486, #1500 — @rish664), spec check dropped for internal services (#1628), and OpenAPI spec fixes (#1578, #1585)
- Linting: broader rules (#1595), unused-variable and dead-code rules (#1679), lint PR checks running behind a flag (#1704), Ruff/Pyright and Node.js lint made non-fatal (#1706, #1717)
- Gemini rules added then reverted (#1678, #1714); build-break and build fixes with unused-code removal (#1580, #1664)
- Logger colors for warn/error (#1631), README update (#1637), signed-URL route cleanup (#1470)
New contributors
- @vanshg685 made their first contribution in #1502
- @mstcomit made their first contribution in #1558
- @Ayushman444 made their first contribution in #1555
- @anupPradhan0 made their first contribution in #1696
Full commit-level detail: GitHub release · Compare view
0.2.0 — The connector fleet goes wide: 15+ new sources, multi-instance connectors, and a built-in OAuth2 provider
Stable release · View on GitHub0.2.0 is a very large release — 260+ merged PRs — centered on turning PipesHub’s connector layer into a real platform. More than fifteen new data sources land (Jira, Box, S3, MinIO, Google Cloud Storage, Azure Blob, Azure Files, Nextcloud, Notion, Linear, Zammad, Zoom, Google Drive, Monday, Snowflake, Salesforce), connectors gain multi-instance support with per-instance filters, and knowledge bases are re-architected as first-class connectors with their own migration. Under the hood, a new database abstraction layer makes ArangoDB access fully async and removes the direct Arango dependency from the Node.js API.Operators also get meaningful security hardening (logout token invalidation, captcha, password-reset fixes, the MongoDB “Mongobleed” CVE fix), a PipesHub OAuth2.0 authorization server with JIT account provisioning, and new deployment options: a Helm chart, Kafka SASL, Redis TLS, and S3-compatible object storage for internal blobs.
Full commit-level detail: GitHub release · Compare view
Highlights
15+ new connectors and datasources
The connector catalog roughly triples this release: Jira (#1098 — @darshangodase), Box (#1136 — @SharmaNishchay), S3 (#1235 — @Kushagra1122), MinIO via S3-compatible API (#1249 — @abhishekgml1991), Google Cloud Storage (#1315), Azure Blob Storage (#1316), Azure Files (#1433 — @Kushagra1122), Nextcloud (#1310 — @SharmaNishchay), Notion (#1302 — @shrikantNemiwal1), Linear (#1198 — @darshangodase), Zammad (#1346 — @darshangodase), Zoom (#1002 — @roy-sid), and dedicated Google Drive personal and enterprise connectors (#1258 — @R0gue-one). New datasource clients also arrive for Monday (#1299), Snowflake (#1303, #1304 — @rish664), and Salesforce (#1289 — @jatingaur18).Multi-instance connectors with filters and lifecycle management
You can now run multiple configured instances of the same connector (#1151 — @vishwjeet-pawar03), each with its own credentials and sync filters. The surrounding lifecycle matured across the release: connector filters with dynamic filter-option APIs (#1202, #1169 — @shrikantNemiwal1), separate API routes for saving auth and filters (#1192), instance rename (#1166), instance deletion (#1350), a connector-status check before indexing (#1191), and a corrected default admin scope of “team” (#1168).Knowledge bases become connectors, plus a Knowledge Hub API
Knowledge bases were re-architected as a connector type with an automated migration (#1371 — @tushar1245, follow-ups #1403, #1406) and renamed to “Collections” in the UI (#1386 — @vishwjeet-pawar03). A new Knowledge Hub API unifies browsing and search over all knowledge (#1232, #1334 — @shrikantNemiwal1), backed by KB and folder migrations (#1170, #1179) and an all-records page in the frontend (#1374).Graph database abstraction layer, async ArangoDB
A new database abstraction layer introduces anIGraphDBProvider interface, an aiohttp-based HTTP client for fully async ArangoDB operations, and a GraphDataStore with transaction management via context managers; connectors were migrated off the old BaseArangoService (#1145 — @tushar1245, follow-up fixes #1194, #1195, #1197). The syncPoint collection was flattened (#1181) and the Node.js API dropped its direct ArangoDB dependency entirely (#1455 — @vishwjeet-pawar03).PipesHub as an OAuth2.0 provider, JIT provisioning, and security hardening
PipesHub now ships its own OAuth2.0 support (#1321 — @rish664) with the spec published in OpenAPI (#1324), JIT account provisioning (#1347 — @abhishekgml1991) and generic OAuth JIT support (#1453). Hardening includes token invalidation on logout (#1162 — @tushar1245), captcha verification on auth flows (#1241, #1294), password change/reset fixes (#1257), a user-enumeration fix (#1273), and the MongoDB “Mongobleed” CVE-2025-14847 fix (#1252 — @loganaden).Citations that are actually usable
Citation handling in answers was overhauled: filenames now appear in citations (#1187 — @vishwjeet-pawar03), citations for the same file are grouped (#1200), and numbering was fixed across streaming, non-sequential, and overflow cases (#1172, #1188, #1205, #1206). Citation metadata gained apreviewRenderable flag so the UI knows what it can preview (#1226), and source links were fixed (#1300).Smarter document parsing: VLM OCR, structured output, spreadsheets
A VLM-based OCR strategy joins the parsing pipeline (#1148 — @kaushal1999) alongside structured output for specific LLMs in indexing and query (#1144, fix #1178). Spreadsheet handling matured significantly: multi-row header handling with LLM header detection in the Excel parser (#1368), refactored CSV processing (#1456, #1336, #1344), TSV support including in-chat rendering (#1339, #1354), and SVG image indexing (#1199).Breaking changes & upgrade notes
- Knowledge bases are migrated into connector form on upgrade (#1371); related KB/folder migrations run automatically (#1170, #1179, #1406, #1452).
- The deprecated “Public connector URL” setting was removed from frontend and backend (#1233, #1337).
- Individual account creation was removed (#1382);
commonis no longer the default Microsoft tenant ID (#1267). - New environment variables control rate limiting and access/refresh-token lifetimes (#1255); LLM row-processing count for tables is now env-configurable (#1319); Kafka partitions default to 1 (#1384).
Connectors
- Jira — connector-ID fixes, dynamic
project_keysfilter options, web URLs on comment and attachment records, scope fixes, site URL removed from credentials, multi-project sync fix, block-group implementation, and Arango-service removal from record deletion (#1180, #1186, #1204, #1298, #1247, #1417, #1356, #1197 — @darshangodase) - Box — file-extension filters, incremental folder sync, folder collaborations, date filters with scheduled sync as the default strategy, CCG authentication replacing manual token handling, and URL/reindexing fixes (#1190, #1240, #1277, #1283, #1275 — @SharmaNishchay)
- SharePoint & OneDrive — reindex and incremental sync, group-sync patches, record-group edges with custom site groups, and assorted bug fixes (#1177, #1305, #1362, #1385, #1442 — @R0gue-one)
- Google Workspace — individual-user sync fix, auth fix, Gmail refactor, shared-drive sync events, shared-with-me record group, drive streaming patch, and drive/frontend bug fixes (#1174, #1287, #1340, #1398, #1415, #1369, #1313)
- Confluence — user-sync premature termination fix, permission handling for users without email, and email-warning/web-URL/reindex-event fixes (#1219 — @codingiran, #1221, #1239 — @shrikantNemiwal1)
- Outlook — filter options, user groups, and default filters (#1210, #1271 — @shrikantNemiwal1)
- S3 / GCS / Azure Blob / Azure Files — rename/move and content-change detection, revision handling and file-state detection, folder-hierarchy derivation, multi-select file-extension filters, and follow-up fixes (#1297, #1342, #1363, #1429, #1426, #1332, #1355, #1254 — @Kushagra1122)
- Web — general fixes, record group support, and patches (#1229, #1379, #1392 — @R0gue-one)
- Dropbox — personal
previewRenderablerecord-type check and folder fix (#1222, #1404) - GitHub —
starred_atfix (#1211 — @rish231294) - Linear — fix for existing files as child records (#1443)
- Nextcloud — stop storing paths for Nextcloud records (#1437 — @realaashil)
- Workday — client moved to its correct path (#1251)
- Shared connector framework —
DataSourceEntitiesProcessorderives parent external records (#1396), fix for hierarchical record structure with multi-instance connectors (#1183), scope deletion on auth change (#1351), streaming fix for attachments with special characters (#1335), and cached-credentials validation (#1160)
Agents & AI
- Optimized agent execution with reduced latency and improved tool handling (#1096 — @vishwjeet-pawar03), plus agent and agent-streaming fixes (#1349, #1365) and removal of non-working bind-tools code (#1149)
- Hybrid Qdrant search and token-limit handling in tool calls (#1421 — @kaushal1999)
- Custom system prompts, backend and frontend (#1161, #1230)
- Embedding model priority ordering (#1147 — @jain-ayush-wyld)
- Manual indexing, with UI display (#1173 — @R0gue-one, #1361) and record-group reindex (#1175)
- MD5-based deduplication across all record types (#1208)
- Docling BytesIO handling and mimetype-to-extension fallback in parsing (#1201, #1218)
Fixes
- Connector configuration: trailing spaces and whitespace at init (#1165, #1185), trailing slashes in URLs (#1164), removed 10-character minimum-length validation (#1167), filter key property and instance destroy on toggle (#1184), duplicate instance-name error message and no-subject mail sync (#1209)
- Query/retrieval: record access bug (#1182), retrieval bug (#1288), region mapper for search queries (#1425), query update (#1428), org-record filters (#1216)
- Knowledge Hub / KB: empty items list (#1301), records fetching with filters (#1306), record stream (#1333), duplicate results (#1410), KB records API (#1397), folder-creation bug (#1323), deletion query (#1402), document download (#1377, #1408), owner-role changes (#1454), records permissions with query refactoring (#1439), view-details on empty KBs/folders (#1401)
- Records & record groups: creation (#1383), processing order (#1330), groups and relations (#1391), placeholder-record connections (#1407), root record group and app edge with migration fix (#1450, #1452), record-group types (#1451), type display (#1411),
isInternalfield (#1431), record deletion (#1326), record-name encoding (#1224), block/block-group ordering and handling (#1405, #1416) - Indexing: skip records from deleted connector instances (#1268, #1272), in-progress KB records failing to reindex after service restart (#1171 — @abhishekgml1991), status set to queued (#1312), clearer error message on indexing failure (#1290)
- Schema: keep deprecated Arango fields instead of removing them (#1317), entityRelation/project/link schemas added to the base service (#1353), Arango query execution/validation fix and its revert (#1445, #1447), schema-change reverts (#1393)
- UI: 404-page logo (#1196), web-URL highlighting (#1231) and hide-web-URL support (#1307), white-label logo (#1292), PDF-highlighter and chip styling (#1265), refresh after image upload (#1276), filter-settings next button (#1256), file-extension filter rendering (#1322), form autoscroll and error handling (#1381), frontend-URL/services section removal (#1263), all-records issues and pagination (#1390, #1364, #1458), record-details source header (#1399), filter cleared on record click (#1395), PPT rendering (#1459), non-admin redirect from connector routes (#1446)
- Misc: upload API payload structure (#1295), exception handling (#1296), organization permission fix (#1348), all-records count with dead-code removal (#1370), minor fixes (#1394)
Performance & reliability
- Kafka: producer-initialization race fixed (#1248), semaphore-based event-consumption control later decoupled from consumption (#1176, #1291), and indexing semaphore tuned to 15 (#1309)
- Record JSON size reduction — empty-field stripping and index ranges for Block/BlockGroup children — landed, was reverted, then re-landed (#1380, #1387, #1388)
- Parallel record fetching from blob storage (#1436) and minimal batch size for CPU embeddings (#1449)
- Knowledge Hub filter queries moved into ArangoDB and API queries refactored (#1412, #1457)
Security & authentication
- Removed emails from the getUsers API (#1234), general security bug fix (#1238), AWS region input sanitization (#1242), and input validation fix (#1253)
- Token handling: removed unnecessary token generation (#1280), auth tokens used for signed-URL record downloads (#1282), redirect-URI fix (#1246), and OAuth configuration support (#1225)
- Dependency upgrades for vulnerabilities: aiohttp (#1217), qs (#1223), config-resolver (#1243), jwk-to-pem (#1244), react-router (#1236), undici (#1308), lodash-es (#1341) with a lodash dependency fix (#1360), multer (#1423), fast-xml-parser and python-multipart (#1422), and a protobuf bump that was subsequently reverted (#1420, #1424)
Developer experience & infrastructure
- Helm chart for Kubernetes deployment (#1338 — @KrKOo)
- Kafka SASL support and configuration (#1359, #1357), Redis TLS support (#1367), Redis as a key-value store for config (#1281), and S3-compatible object storage as an internal storage backend (#1400)
- Consolidated, cleaned OpenAPI specs with improved docs UI (#1311, #1329), API documentation for authentication, configuration, and crawling (#1139), and docker/npm-start fixes for the spec tooling (#1325, #1327, #1328)
- CI/build: lint-job fix (#1212), env flag (#1215), missing cachetools package (#1220), environment config variable (#1462)
- Cleanup: unused domain-extraction logic (#1237), TEST_EVIDENCE.md deleted (#1250), debug-level logging in GraphDataStore (#1270), schema cleanup and ticket enum/edge-type standardization (#1320, #1259), ticketRelation schema removal (#1352), unused AWS Amplify removal (#1419), unused code removal (#1440)
New contributors
- @codingiran made their first contribution in #1219
- @Kushagra1122 made their first contribution in #1235
- @loganaden made their first contribution in #1252
- @roy-sid made their first contribution in #1002
- @KrKOo made their first contribution in #1338
- @realaashil made their first contribution in #1437
Full commit-level detail: GitHub release · Compare view
0.1.0 — First stable release: security hardening and connector filters mature
Stable release · View on GitHubPipesHub’s first stable release finalizes the 0.1.0-beta and the alpha series before it (0.1.0-alpha → 0.1.1-alpha → 0.1.2-alpha). The 23 merged PRs on top of the beta concentrate on production readiness: a security hardening pass across the Node.js API (configurable JWT expiry, stack traces stripped from responses, stricter validation middleware), connector filters extended to Outlook and Confluence with manual sync, SharePoint page support, and Google Slides/Docs/Sheets moved onto the unified blocks parsing pipeline.
Full commit-level detail: GitHub release · Compare view
Highlights
Security hardening for production
JWT expiry moved to an environment variable (#1153 — @tushar1245, first contribution), stack traces removed from API responses (#1155 — @tushar1245), email added to validation middleware (#1157 — @vishwjeet-pawar03), and two further batches of security fixes (#1152 — @vishwjeet-pawar03, #1154 — @tushar1245).Connector filters mature
The filter system introduced in the beta now covers Outlook and Confluence (#1122 — @shrikantNemiwal1) and supports manually triggered filtered syncs (#1132 — @shrikantNemiwal1).SharePoint pages and Google file parsing
The SharePoint connector now indexes SharePoint pages, not just files (#1129 — @R0gue-one), and Google Slides, Docs, and Sheets are converted through the unified blocks pipeline for higher-fidelity chunking and citations (#1130 — @jain-ayush-wyld).Connectors
- Google Drive — handle a missing refresh-token-expiry key during OAuth (#1123 — @abhishekgml1991).
- Trello — Trello datasource and client added (#1115 — @JustChaos10, first contribution).
- Microsoft Graph — fixed a pagination error (#1150 — @R0gue-one).
- Added a generic OAuth class for testing external connector example files (#1134 — @uncleSlayer).
Agents & AI
- Fixed a metadata-enhancement bug in the query pipeline (#1081 — @kaushal1999) and a bug in OpenAI-compatible embeddings (#1125).
- Multiple citations inside a single bracket pair are now handled (#1124 — @kaushal1999), and the reflection retry count was raised to 2 (#1128).
Fixes
- Empty-list handling for connector
on_new_*methods (#1133 — @shrikantNemiwal1) and re-index no longer sends an empty MIME type to indexing (#1135). - Fixed schema issues (#1158 — @abhishekgml1991) and added a placeholder implementation (#1159 — @R0gue-one).
Developer experience & infrastructure
- Telemetry and analytics: GitHub lead tracking (#1137 — @rish231294) and names added to metrics (#1138 — @rish664).
New contributors
- @JustChaos10 made their first contribution in #1115
- @tushar1245 made their first contribution in #1153
Full commit-level detail: GitHub release · Compare view
0.1.0-beta — Connector filters, five new data sources, and a security hardening sweep
Beta release · View on GitHubThis beta was finalized as 0.1.0.The first beta after the alpha series focuses on controlling what gets synced and broadening where data comes from: connector filters let operators scope which content a connector ingests, and Dropbox, NextCloud, Trello, Bitbucket, and Workday all gain data sources. A long run of dependency security fixes, an MD5-based file version control scheme, and a fix for HTTP connections dying after a day push the platform toward stable (40 merged PRs).
Full commit-level detail: GitHub release · Compare view
Highlights
Connector filters
Connectors can now be configured with filters that scope which content is synced, with an Autocomplete-based management UI and improved types (#1058 — @shrikantNemiwal1, #1083 — @vishwjeet-pawar03).Five new data sources
Community contributions widen the connector fleet: a Dropbox individual connector (#1067 — @SharmaNishchay, first contribution), NextCloud (#1090 — @SharmaNishchay), Trello (#1001 — @gunnuh, first contribution), Bitbucket (#1118 — @uncleSlayer), and Workday via code generation (#1114, #1117 — @PhantomInTheWire, first contribution; generator fixes and cleanup in #1119, #1120 — @rish664).MD5 checksum file version control
Files are now versioned by MD5 checksum, so unchanged files can be detected and skipped instead of re-processed (#1091 — @anirudh7371, first contribution).Team management UI
Organizations get a team management interface in the frontend (#1095 — @vishwjeet-pawar03).Opik LLM observability
Opik integration adds tracing/observability for LLM calls in the query pipeline (#1093 — @kaushal1999).Connectors
- Confluence — permission changes are now synced using the audit log (#1063 — @shrikantNemiwal1).
- Outlook — fixed empty attachment web URLs (#1072 — @shrikantNemiwal1).
- Added a generic delete-record method shared across connectors (#1079 — @R0gue-one).
Agents & AI
- Token counting switched to the
cl100k_basetokenizer (#1085 — @kaushal1999). - Bedrock: max output tokens raised to 16K for Anthropic models (#1075 — @kaushal1999) and a tool-call issue fixed (#1094 — @abhishekgml1991); Claude 4.5 models get a 64K max token length (#1089).
- Fixed a page-number bug in query-pipeline metadata enhancement (#1076 — @kaushal1999) and model switching / previous-conversation handling in agents (#1092 — @vishwjeet-pawar03).
Fixes
- Render OAuth errors to the user instead of failing silently (#1082 — @abhishek-pipeshub) and increased a timeout (#1074).
- Added GIF and SVG image support (#1077 — @vishwjeet-pawar03) and removed the “unknown” filter option (#1088 — @abhishek-pipeshub).
Performance & reliability
- Fixed HTTP connections breaking after roughly a day of uptime (#1099 — @abhishekgml1991).
- Services now start their processes in a defined order (#1121 — @abhishekgml1991).
Security & authentication
- A sustained dependency-security sweep: multiple rounds of security fixes and version pins (#1105, #1106, #1107, #1109, #1112, #1108 — @abhishekgml1991) plus Dependabot batches and lock-file updates (#1100, #1102, #1104).
Developer experience & infrastructure
New contributors
- @SharmaNishchay made their first contribution in #1067
- @anirudh7371 made their first contribution in #1091
- @gunnuh made their first contribution in #1001
- @PhantomInTheWire made their first contribution in #1114
Full commit-level detail: GitHub release · Compare view
0.1.2-alpha — Confluence and SharePoint connectors land, Azure AI models, indexing pipeline overhaul
Alpha release · View on GitHubThis alpha line was finalized as 0.1.0.The last alpha before the beta is the largest of the point releases: 72 merged PRs. Two major connectors — Confluence and SharePoint — graduate to full sync support, Azure-hosted AI models (OpenAI, Claude, Grok, DeepSeek) join the provider list, and the indexing pipeline gets a substantial overhaul: reordered stages, batched embedding writes, faster Qdrant operations, and more file formats converted through the unified blocks schema. The rest is a wide stabilization pass across query, citations, viewers, and the graph layer.
Full commit-level detail: GitHub release · Compare view
Highlights
Confluence connector
Confluence spaces and pages can now be synced and searched as a first-class connector (#1017 — @shrikantNemiwal1).SharePoint connector
SharePoint sync arrives (#1018 — @R0gue-one), with a display-name typo fix (#980 — @vishwjeet-pawar03).Azure AI models and OpenAI-compatible embeddings
Azure-hosted models — OpenAI, Claude, Grok, and DeepSeek — are now supported as LLM providers (#1048 — @abhishekgml1991), and any OpenAI-compatible embedding endpoint can be configured (#1033 — @vishwjeet-pawar03). Model configuration also gained explicit context-length settings, used by the query pipeline instead of hard-coded limits (#1008, #1059), and amax_tokens attribute for Anthropic models (#1027 — @kaushal1999).Indexing pipeline overhaul
The indexing pipeline was reordered (#975 — @kaushal1999), document additions are now batched (#982),create_embeddings was refactored (#992), and Qdrant operations were sped up (#996 — @abhishekgml1991). Blocks conversion expanded to more formats: PyMuPDF and Azure Document Intelligence output (#981), PPT (#1046 — @jain-ayush-wyld, first contribution), TXT parsed directly as Markdown (#990), and SVG images in HTML/Markdown (#954). Deadlock handling in indexing and fixes for empty-record indexing round it out (#1045 — @kaushal1999), plus a timeout on Docling PDF processing (#991) and a fix for re-indexing the same document (#930).Platform settings and refreshed branding
A new platform settings page (#977 — @vishwjeet-pawar03), image previews for records (#1000), a new logo (#1006), and a replaced sign-in page image (#1031).Connectors
- Google Workspace — fixed multi-user sync for the Google and Drive connectors (#1028 — @vishwjeet-pawar03).
- OneDrive — sync patch (#984 — @R0gue-one).
- ServiceNow — fixed permissions, role hierarchy, and attachment streaming (#993 — @shrikantNemiwal1).
- Outlook — fixed record streaming (#1022 — @shrikantNemiwal1).
- BookStack — role handling patch, documentation fix, and a fix for records not visible to new users (#966, #983, #1069 — @R0gue-one).
- Re-index now correctly emits and processes failed events (#1030 — @shrikantNemiwal1), and the reindex button is visible for failed records (#1042 — @vishwjeet-pawar03).
Agents & AI
- Query responses that come back malformed now trigger reflection, with a fallback to reflection when JSON parsing fails (#1020, #1060 — @kaushal1999).
- Retrieval limit reduced to 400 chunks after a tool call (#1023 — @kaushal1999) and a confidence-score bug fixed (#1038 — @vishwjeet-pawar03).
- Citation improvements: Chinese square-bracket citations handled (#1005 — @abhishekgml1991), Excel citation highlighting fixed (#1035), and web-URL citation text matching added and then enhanced (#1036, #1039 — @vishwjeet-pawar03).
- Fixed answer regeneration (#1047), streaming (#1007 — @kaushal1999), and metadata-enhancement bugs in search-result flattening and domain extraction (#1019, #972).
- The model name is shown with each response (#1051 — @vishwjeet-pawar03), LLM health checks use a better test image and clearer messages (#1011, #1049 — @kaushal1999), and queries with no accessible records return a proper message (#1050).
Fixes
- Image handling: images without URIs (#1016), 403 errors when fetching images in HTML/Markdown (#1024), and a cairosvg package bug (#998 — @kaushal1999).
- Parser bugs: PyMuPDF processing (#1052), an uninitialized
first_child_block_indexvariable (#1004), a wrong error type (#999), a wrong log in query (#1064), and one general bug fix (#1012 — @kaushal1999). - Graph layer: storage doc IDs are deleted from the graph DB on record delete (#1029 — @kaushal1999); permissions/permissionsToKb edge cleanup with migration code (#1044 — @stushar0711, first contribution); redundant code removed from the
get_accessible_recordsquery (#1054); duplicate code in base Arango that failed indexing (#1068 — @shrikantNemiwal1); Arango collection initialization moved out of the connector service (#1057 — @stushar0711). - A TypeError in etcd
create_key(#1055 — @stushar0711). - Frontend: navbar flickering (#1041), PDF highlight brackets and chat message overflow (#1056), Google Docs/Sheets viewer (#1061), and file preview for filenames with special characters (#1066 — @vishwjeet-pawar03).
- Uploads and routing: URL normalization in the backend (#970), files with the same name but different MIME types allowed (#1043), and enhanced route validation (#1040 — @vishwjeet-pawar03).
Performance & reliability
- Faster Qdrant operations (#996) and credential caching to avoid repeated lookups (#1026 — @abhishekgml1991).
- Indexing deadlock handling (#1045) and a Docling processing timeout (#991).
Developer experience & infrastructure
- Added pikepdf to
pyproject(#979 — @kaushal1999) and fixed Dependabot-reported issues (#1073 — @abhishekgml1991).
New contributors
- @stushar0711 made their first contribution in #1044
- @jain-ayush-wyld made their first contribution in #1046
Full commit-level detail: GitHub release · Compare view
0.1.1-alpha — BookStack and ServiceNow connectors arrive, SAML gets JIT provisioning
Alpha release · View on GitHubThis alpha line was finalized as 0.1.0.A week after the founding 0.1.0-alpha, this release adds two new full connectors — BookStack and ServiceNow Knowledge Base — improves SAML sign-in with just-in-time user provisioning, and lands a broad stabilization pass across indexing, the agent pipeline, and the frontend (27 merged PRs).
Full commit-level detail: GitHub release · Compare view
Highlights
BookStack connector
A new connector for the BookStack wiki platform, bringing self-hosted documentation into PipesHub search (#887 — @R0gue-one), with a follow-up patch for record web URLs (#960).ServiceNow Knowledge Base connector
ServiceNow KB articles can now be synced and searched (#894 — @shrikantNemiwal1).SAML just-in-time provisioning
SAML authentication now provisions users on first sign-in instead of requiring a pre-existing account (#959 — @GauravAhuja7, first contribution), with a follow-up fix (#969 — @abhishekgml1991).Agent pipeline and LLM health checks
The agent execution pipeline was updated (#931 — @vishwjeet-pawar03), and model configuration now runs a modality-aware LLM health check so misconfigured vision/text models are caught up front (#947 — @kaushal1999).Connectors
- Web — fixed HTML image handling in the web connector (#932 — @kaushal1999).
- Gmail — fixed a local-assignment bug in the Gmail change handler (#938 — @vishwjeet-pawar03) and image handling in mail indexing (#939 — @kaushal1999).
- Outlook — fixed next-link handling and pagination during sync (#957 — @shrikantNemiwal1).
- Removed redundant OAuth scopes from connector configuration (#945 — @vishwjeet-pawar03) and added guards for connectors with no auth type set (#940).
- Fixed scheduled-sync deletion and filtered folders out of record listings (#948 — @R0gue-one).
Agents & AI
- Plain-text files are now converted to blocks for indexing (#953 — @kaushal1999).
- Fixed the token counter for tool calls (#951 — @kaushal1999) and a query bug in
build_group_text(#965).
Fixes
- Qdrant collections are no longer recreated when points already exist (#933 — @kaushal1999).
- Fixed file uploads, including multilingual filenames (#937, #962 — @vishwjeet-pawar03).
- Fixed table rendering in answers (#944 — @vishwjeet-pawar03).
- Connector UI, onboarding URL trimming, scheduler logic, and chat reset fixes (#967 — @vishwjeet-pawar03); documentation URLs and other bugs (#956).
- General bug-fix batches across services (#935 — @kaushal1999; #950, #958, #964 — @abhishekgml1991).
New contributors
- @GauravAhuja7 made their first contribution in #959
Full commit-level detail: GitHub release · Compare view
0.1.0-alpha — The founding release: enterprise search platform, RAG pipeline, and a fleet of connectors from zero
Alpha release · View on GitHubThis alpha line was finalized as 0.1.0.This is PipesHub’s first public release, and its notes enumerate the project’s entire initial development history — nearly 700 merged PRs (#1 through #928). It stands up the whole platform in one release: a Node.js Express API for auth, users, and knowledge bases; Python FastAPI microservices for connectors, indexing, and query/RAG; a React frontend; and a stateful backbone of ArangoDB, Qdrant, MongoDB, Redis, Kafka, and etcd, all shipped as a self-hostable Docker Compose deployment under the Apache 2.0 license (#357 — @abhishek-pipeshub).Given the founding scope, this changelog takes a thematic view with representative PR citations rather than the usual per-PR accounting; the GitHub release has the exhaustive list.
Full commit-level detail: GitHub release · Commit history
Highlights
Platform architecture and core services
The initial architecture comes together across the release: an etcd-backed configuration manager (#11 — @khushijainslack, later generalized to any key-value store in #500 — @abhishekgml1991), Kafka-driven async record processing (#83), ArangoDB graph schema and record permissions (#8 — @rohilbansal-pipeshub), and internal service routes with token-based service auth (#23, #27). The services tree was restructured into thebackend/ layout that persists today (#423 — @abhishekgml1991), and the connectors service moved to its long-term port 8088 (#252).RAG pipeline: from first Chat API to token-level streaming
The query service grew from an initial Chat API (#33 — @abhishekgml1991) into a full retrieval pipeline: query rewrite and expansion with async API calls (#66), multi-question query decomposition (#74), a reranker (#96), LangGraph orchestration (#277), and follow-up query transformation (#420). Answers stream token-by-token end to end — streaming API (#431), model-native streaming (#456), citation-safe chunking (#457), and frontend streaming support (#451 — @vishwjeet-pawar03). Normalized citations with web URLs (#438, #360) and a low-latency Quick mode as the default (#458, #645) round out the pipeline.Bring-your-own-model: 10+ LLM and embedding providers
Model support expanded from OpenAI-only to a broad provider matrix: Gemini (#114), Anthropic (#120 — @abhishek-pipeshub), AWS Bedrock (#128, #506), Ollama for local models (#313, #475), any OpenAI-compatible endpoint (#346), and xAI, Mistral, Cohere, Together, Groq, and Fireworks in one refactor that made adding new providers trivial (#483, #484 — @abhishekgml1991). Embeddings got the same treatment: Cohere and Gemini (#338), Ollama (#480), OpenAI-compatible APIs (#413), and Voyage, JinaAI, and Mistral (#485).Connector fleet and data-source SDK
First-class connectors arrived for Google Workspace (Drive and Gmail with webhooks, watches, and resync — #250 — @rohilbansal-pipeshub), OneDrive (#594), SharePoint Online (#635), Confluence Cloud (#785), Jira (#542), Slack (#546 — @kaushal1999), Outlook (#802 — @shrikantNemiwal1), Dropbox (#808 — @R0gue-one), and web pages (#928). Underneath, an OpenAPI-driven client generator (#580, #584 — @rish231294) and a connector registry (#653 — @vishwjeet-pawar03) enabled a wave of community-built data sources: GitHub (#771 — @uncleSlayer), GitLab (#795), Notion (#663), S3 (#694), Azure Blob (#697), Box (#703), Linear (#740), Airtable (#746), Zendesk (#751), Discord (#815 — @MinuteHanD), Freshdesk (#821), LinkedIn (#826 — @darshangodase), PagerDuty (#912), BookStack (#823), ServiceNow (#829), Evernote (#852), Asana (#834), and Zammad (#902), plus a connector integration playbook (#850 — @shrikantNemiwal1) and generic OAuth support (#396 — @ShawnSack).Blocks-based document parsing and indexing
Indexing converged on a unified blocks schema (#406, #648 — @kaushal1999) with format-specific converters for DOCX (#679), Excel (#684), Gmail (#698), and Slack mrkdwn (#553). Image indexing and multimodal support landed (#863, #688 — @vishwjeet-pawar03), Docling handles complex PDFs with thread-safety and slowness workarounds (#909, #739), vector points are quantized to Uint8 to cut Qdrant memory (#468), and records stuck in-progress after a crash are recovered (#814).Agents and enterprise tools
Beyond RAG, the release seeds the agent runtime: agent tools (#522 — @rish231294), Google enterprise tools (#535), a no-code agent builder (#600 — @vishwjeet-pawar03), agentic RAG streaming (#463), agent citation handling (#791 — @kaushal1999), and improved tool calling (#845).Knowledge bases, search UI, and auth
Users get per-org knowledge bases with multi-KB support (#286, #487 — @vishwjeet-pawar03), in-app viewers with citation highlighting for PDF, DOCX, Excel, HTML, text, and Markdown (#154, #168), knowledge search with filters (#334), dark mode (#364, #417), and document summaries (#268 — @rohilbansal-pipeshub). On the auth side: SAML SSO (#105 — @khushijainslack), JWT secret handling (#144), secret key hashing (#262), Microsoft MSAL login fixes (#558), and a run of dependency security patches (multer, samlify, pdf.js, xlsx, Vite — #388, #389, #259, #274, #256).Developer experience & infrastructure
- Production Docker Compose with simplified config, model downloads baked into images, and slim Python base images (#178, #290, #143, #918, #474).
- PR validation via GitHub Actions with Node.js and Python linting, typed-Python enforcement, and CodeQL scanning (#237, #238, #371, #654).
- Community scaffolding: contribution guidelines, code of conduct, security policy, issue and PR templates (#289, #612, #778, #752, #779).
- Swagger/OpenAPI docs for storage APIs, Prometheus metrics collection, feature flags, and PostHog analytics (#93, #246, #865, #839 — @jatingaur18).
New contributors
- @abhishekgml1991 made their first contribution in #1
- @vishwjeet-pawar03 made their first contribution in #6
- @rohilbansal-pipeshub made their first contribution in #8
- @rish231294 made their first contribution in #16
- @abhishek-pipeshub made their first contribution in #81
- @dependabot[bot] made their first contribution in #388
- @ShawnSack made their first contribution in #396
- @kaushal1999 made their first contribution in #489
- @ParmodBisht made their first contribution in #637
- @rish664 made their first contribution in #652
- @uncleSlayer made their first contribution in #771
- @MinuteHanD made their first contribution in #815
- @darshangodase made their first contribution in #826
- @shrikantNemiwal1 made their first contribution in #850
- @jatingaur18 made their first contribution in #839
- @R0gue-one made their first contribution in #808
Full commit-level detail: GitHub release · Commit history