Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@ All notable changes to this project will be documented in this file. The format

## [Unreleased]

### Added
## [0.3.2] - 2026-07-21

### Fixed

- [#106](https://github.com/mohanagy/miftah/issues/106) Miftah now recognizes the strict PostHog command-wrapper grammar only at the canonical official MCP endpoint, so documented read/discovery commands can run under destructive-routing safeguards without a per-user routing workaround. Generic `exec` tools, alternate origins, malformed commands, and unknown nested operations remain fail-closed; route preview now exposes the same local policy-enforcement block as a real call.
- [#112](https://github.com/mohanagy/miftah/issues/112) Shutdown now completes upstream process containment even when a downstream transport close rejects, then rethrows the original close error after cleanup.
- [#120](https://github.com/mohanagy/miftah/issues/120) The development build toolchain now resolves `esbuild` 0.28.1, removing the known low-severity development-server path-traversal advisory.

## [0.3.1] - 2026-07-18

Expand Down
2 changes: 1 addition & 1 deletion docs/presets-and-clients.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
This is the compatibility source of truth for generated `miftah init` configurations and client snippets.

- Catalog version: `1`
- Miftah package version: `0.3.1`
- Miftah package version: `0.3.2`
- Last tested / validation boundary: the catalog builds strict Miftah configuration that `validateConfig` accepts. The docs contract test checks generated configuration only; it does **not** construct a runtime, start, authenticate to, or smoke-test external providers.

Miftah itself requires Node.js `>=20`. That does not establish an upstream server's Node requirement.
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lubab/miftah",
"version": "0.3.1",
"version": "0.3.2",
"description": "Wrap any MCP. Use the right account without reconnecting.",
"keywords": [
"mcp",
Expand Down
18 changes: 9 additions & 9 deletions tests/release-version.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";

const releaseVersion = "0.3.1";
const releaseVersion = "0.3.2";

function readRepositoryFile(path: string): string {
return readFileSync(new URL(`../${path}`, import.meta.url), "utf8");
Expand All @@ -21,13 +21,13 @@ function releaseNotes(changelog: string, version: string): string {
return changelog.slice(match.index, end < 0 ? undefined : end);
}

describe("v0.3.1 release artifacts", () => {
describe("v0.3.2 release artifacts", () => {
it.each([
"## [0.3.1] - 2026-7-18\n\n### Fixed\n",
"Release candidate: ## [0.3.1] - 2026-07-18\n\n### Fixed\n"
"## [0.3.2] - 2026-7-21\n\n### Fixed\n",
"Release candidate: ## [0.3.2] - 2026-07-21\n\n### Fixed\n"
])("requires a dated release heading at the start of a line", (changelog) => {
expect(() => releaseNotes(changelog, releaseVersion)).toThrow(
"Unable to find the 0.3.1 changelog entry."
`Unable to find the ${releaseVersion} changelog entry.`
);
});

Expand Down Expand Up @@ -65,14 +65,14 @@ describe("v0.3.1 release artifacts", () => {
}
});

it("documents the full release while retaining the experimental package status", () => {
it("documents the security and containment fixes while retaining the experimental package status", () => {
const changelog = readRepositoryFile("CHANGELOG.md");
const notes = releaseNotes(changelog, releaseVersion);

expect(notes).toContain("### Fixed");
expect(notes).toContain("### Changed");
expect(notes).toMatch(/force-kills a retained POSIX descendant/iu);
expect(notes).toMatch(/product value and quick-start/iu);
expect(notes).toMatch(/PostHog command-wrapper grammar/iu);
expect(notes).toMatch(/upstream process containment/iu);
expect(notes).toMatch(/esbuild.*0\.28\.1/iu);
const readme = readRepositoryFile("README.md");
expect(readme).toContain("One MCP connector. Deliberate account selection.");
expect(readme).toContain("experimental and pre-1.0");
Expand Down