v0.0.13
What's Changed
- feat(plugins): ES/OpenSearch datasource — connection foundation (#3261) by @msywulak in #3291
- ci(publish): enable @useatlas/elasticsearch CI publishing (#3272) by @msywulak in #3292
- feat(plugins): @useatlas/elasticsearch SQL query surface (#3262) by @msywulak in #3293
- feat(datasource): @useatlas/elasticsearch Admin → Integrations install + credential mask/restore (#3270) by @msywulak in #3296
- feat: ES/OpenSearch — atlas init + diff mapping→entity-YAML profiler (#3268) by @msywulak in #3294
- feat(api): wire DB-stored plugin datasources via createFromConfig seam (#3253) by @msywulak in #3297
- feat(datasource): url-optional adapter-only plugin registration for SaaS per-workspace connections by @msywulak in #3299
- fix(saas): gate non-saas_eligible datasources out of the SaaS marketplace + mark duckdb saas_eligible=false (#3301) by @msywulak in #3305
- feat(plugins): generic DatasourceFormInstallHandler — ClickHouse/Snowflake/BigQuery form-installable on SaaS (#3300) by @msywulak in #3304
- feat(plugins): ES/OpenSearch Query DSL tool (queryElasticsearch) + read-only validator (#3267) by @msywulak in #3308
- refactor(datasource): keep Salesforce on the OAuth path; drop inert bridge registration (#3302) by @msywulak in #3306
- feat(elasticsearch): Basic + Cloud ID + SigV4 auth modes & OpenSearch engine (#3263 #3264 #3265 #3266) by @msywulak in #3310
- fix(plugins): enforce per-index/object semantic whitelist in ES Query DSL & SOQL tools (#3307) by @msywulak in #3312
- fix(plugins): fail closed on semantic-layer scan failure for plugin query tools (#3313) by @msywulak in #3314
- feat(elasticsearch): index patterns / aliases / data-streams as single entities (#3269) by @msywulak in #3316
- fix(api): don't split dotted ES index-pattern names into bogus whitelist keys (#3317) by @msywulak in #3318
- docs(roadmap): tidy — v0.0.13 code-complete; v0.0.14 seed #3319 by @msywulak in #3320
- fix(plugins): exclude system backing indices in parseAliases when includeSystem is false by @msywulak in #3321
- fix(plugins): v0.0.13 pre-closeout review hardening for ES/OpenSearch datasource by @msywulak in #3322
- fix(plugins): wire OAuth Salesforce agent query tool (#3311) by @msywulak in #3324
- fix(plugins): clear CodeQL ReDoS in SOQL stripStringLiterals (follow-up to #3324) by @msywulak in #3327
- chore/fix: lint all top-level trees (#3323) + close auto-LIMIT literal bypass (#3325) by @msywulak in #3328
- fix(api): handle Postgres dollar-quoted literals in auto-LIMIT sanitizer + scope plugin install hints by @msywulak in #3329
- docs(roadmap): tidy — record v0.0.13 OAuth-Salesforce + auto-LIMIT/lint tail; reseed v0.0.14 by @msywulak in #3330
- feat(cli): ES profiler supports all plugin auth modes + OpenSearch by @msywulak in #3331
- feat(plugin-sdk): semantic-whitelist load policy module by @msywulak in #3343
- refactor(plugins): wire ES + Salesforce dialect tools onto the SDK semantic-whitelist policy by @msywulak in #3344
- fix(security): sidecar fail-closed auth, no default admin password in prod, auto-LIMIT comment bypass by @msywulak in #3352
- fix(security): remediate all ten Medium findings from the June 2026 security review by @msywulak in #3353
- chore(security): dependency vulnerability triage — lockfile refresh clears 103 of 106 advisories by @msywulak in #3354
- chore(security): low-severity hardening backlog + chat-adapter verification audit follow-ups by @msywulak in #3355
- refactor(integrations): shared lazy-plugin tool scaffolding + boot-time tool-shadow warning (#3326) by @msywulak in #3359
- refactor(scheduler): one shaped result behind the three delivery renderers by @msywulak in #3360
- feat(web): deepen admin config pages behind a useConfigForm hook by @msywulak in #3356
- refactor(install): collapse the form-install persistence spine — and fix the three handlers it exposed as broken by @msywulak in #3358
- fix(api): pivot Salesforce + Jira OAuth installs onto the form-install upsert spine (#3357) by @msywulak in #3362
- feat(api): recover from upstream OpenAPI spec drift at query time (#3315) by @msywulak in #3363
- fix(web): blur-time clamp for numeric retention inputs (#3361) by @msywulak in #3364
- docs(roadmap): tidy — record spec-drift recovery (#3363) + retention blur-clamp (#3364) by @msywulak in #3366
- feat(plugin-sdk): per-workspace onUninstall hook to revoke external subscriptions (#3188) by @msywulak in #3365
- docs: record arch-win #92 (onUninstall hook) + roadmap entries for #3364/#3365 by @msywulak in #3367
- feat(sandbox): add railway-sandbox explore backend (self-hosted opt-in) (#3231) by @msywulak in #3369
- docs: deploy-mode parity contract (out of the #3374 drift audit) by @msywulak in #3380
- fix(sandbox): one backend-id vocabulary for ATLAS_SANDBOX_BACKEND end to end by @msywulak in #3383
- fix(api): warn at scheduled-task create/update when the delivery channel has no sender; surface permanent failures distinctly by @msywulak in #3385
- fix(api): saasWritable axis — settings PUT/DELETE enforce the saasVisible boundary for SaaS workspace admins by @msywulak in #3390
- fix(web): route Add-datasource picker plugin tiles to the marketplace form-install by @msywulak in #3384
- fix(web): useDeployMode consumers stop committing to a guessed mode (parity Rule 2 tiers) by @msywulak in #3391
- chore(ci): settings-registry reader-presence drift check (parity contract Rule 1) by @msywulak in #3393
- refactor(catalog): expose formInstallable on the pillar listing — picker derives tiles from the handler registry (#3387) by @msywulak in #3394
- fix(api): close settings write-path guard gaps — DELETE immutable bypass, fail-closed mode probe, no-org edge (#3389) by @msywulak in #3396
- docs(api): document 422 for shared-validationHook failures where route docs claimed 400 (#3388) by @msywulak in #3397
- fix(semantic): read ATLAS_EXPERT_* keys through getSetting so admin overrides apply (#3392) by @msywulak in #3398
- fix(integrations): resolve ATLAS_ROW_LIMIT lazily per call in salesforce-tool (#3400) by @msywulak in #3401
- fix(api): block no-org SaaS workspace admins from the global row of workspace-scoped settings (#3395) by @msywulak in #3403
- fix(api): scope SaaS requiresRestart suppression to hot-reloaded keys (#3399) by @msywulak in #3404
- fix(integrations): resolve ATLAS_QUERY_TIMEOUT lazily per call in salesforce-tool (#3402) by @msywulak in #3405
- fix(api): thread org context into every workspace-scoped settings reader (#3406) by @msywulak in #3407
- fix(sandbox): consume BYOC provider credentials at runtime in the explore tool (#3370) by @msywulak in #3411
- feat(deploy): ship E2B + Daytona BYOC sandbox runtimes in the SaaS image (#3409) by @msywulak in #3412
- feat(sandbox): BYOC selection covers the Python tool for Vercel by @msywulak in #3413
- fix(billing): wire org-scoped Stripe subscriptions — organization mode + authorizeReference (#3416) by @msywulak in #3440
- fix(billing): plugin-owned org Stripe customer id — portal via Better Auth, retire dead column writers (#3417) by @msywulak in #3441
- feat(billing): self-serve checkout and plan picker — close the trial→paid dead end (#3418) by @msywulak in #3442
- fix(billing): churned SaaS orgs land on the locked tier, never free (#3421) by @msywulak in #3443
- feat(billing): durable Stripe webhook sync via onEvent + event ledger (#3423) by @msywulak in #3444
- chore(api): swap MIN_PLAN_TIERS local tuple for the @useatlas/types value export by @msywulak in #3448
- chore(ci): add obsidian-reader-v* publish train by @msywulak in #3449
Full Changelog: v0.0.12...v0.0.13