Skip to content

Commit 6461ec1

Browse files
Merge pull request #97 from multimindlab/bug-fix-overall-feature-develop
Fix existing features and improve production readiness
2 parents bbc333b + a9a5cb0 commit 6461ec1

31,980 files changed

Lines changed: 33867 additions & 3396790 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"WebFetch(domain:api.github.com)",
5+
"WebSearch",
6+
"Bash(/private/tmp/claude-501/-Users-darshankumar-Daemongodwiz-Ai2innovate-multimind-sdk/5c3561ca-6846-4472-9f6f-897fe573ecb9/scratchpad/simvenv/bin/python -m pytest /Users/darshankumar/Daemongodwiz/Ai2innovate/multimind-sdk/tests/ -q -p no:cacheprovider)",
7+
"Bash(.venv/bin/python -)"
8+
]
9+
}
10+
}

.dockerignore

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# VCS
2+
.git
3+
.github
4+
.gitignore
5+
6+
# Docs, examples, tests — never ship in the image
7+
multimind-docs/
8+
docs/
9+
examples/
10+
tests/
11+
htmlcov/
12+
*.md
13+
!README.md
14+
15+
# Local model weights and media
16+
models/
17+
assets/
18+
chat_sessions/
19+
logs/
20+
21+
# Python build/runtime artifacts
22+
__pycache__/
23+
*.py[cod]
24+
*.egg-info/
25+
build/
26+
dist/
27+
.venv/
28+
venv/
29+
.pytest_cache/
30+
.ruff_cache/
31+
.mypy_cache/
32+
.coverage
33+
coverage.xml
34+
35+
# Secrets and local config — must never be baked into an image
36+
.env
37+
.env.*
38+
*.pem
39+
*.key
40+
41+
# Docker files themselves (not needed inside the build context output)
42+
Dockerfile
43+
docker-compose*.yml
44+
.dockerignore
45+
46+
# Editor/OS scratch
47+
.idea/
48+
.vscode/
49+
.DS_Store
50+
*.swp
51+
*.tmp
52+
scratch*

.github/workflows/ci.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,10 @@ jobs:
212212
-k "gateway or api or mcp"
213213
214214
# ---------------------------------------------------------------------------
215-
# Full suite with everything installed. Acts as the historical
215+
# Full suite with everything installed, including the framework-interop
216+
# extras (langchain-core, llama-index-core) and the MCP SDK (already part
217+
# of `all`). This is the only job where tests that `importorskip` those
218+
# packages actually execute instead of skipping. Acts as the historical
216219
# "must reach 95% pass rate" gate.
217220
# ---------------------------------------------------------------------------
218221
test-full:
@@ -229,13 +232,14 @@ jobs:
229232
run: |
230233
python -m pip install --upgrade pip
231234
pip install "torch>=2.0.0" --index-url https://download.pytorch.org/whl/cpu
232-
pip install -e ".[all,dev]"
235+
pip install -e ".[all,dev,langchain,llamaindex]"
233236
- name: Run full suite with coverage
234237
run: |
235238
pytest tests/ \
236239
--cov=multimind \
237240
--cov-report=term-missing \
238241
--cov-report=xml \
242+
--cov-fail-under=20 \
239243
--junitxml=test-results-full.xml \
240244
-v --tb=short \
241245
| tee pytest-summary.txt

.github/workflows/release.yml

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: Release
2+
3+
# Triggers on a published GitHub release (the normal flow) and on pushing a
4+
# `v*` tag directly (useful for testing the build/test-wheel jobs without
5+
# cutting a full GitHub release). Publishing to PyPI only runs for the
6+
# `release: published` event — see the `publish` job's `if:` condition.
7+
on:
8+
release:
9+
types: [published]
10+
push:
11+
tags:
12+
- "v*"
13+
workflow_dispatch:
14+
15+
concurrency:
16+
group: release-${{ github.workflow }}-${{ github.ref }}
17+
cancel-in-progress: false
18+
19+
env:
20+
PIP_DISABLE_PIP_VERSION_CHECK: "1"
21+
22+
jobs:
23+
# ---------------------------------------------------------------------------
24+
# Build sdist + wheel, validate metadata with twine, upload as artifacts
25+
# for the downstream jobs (and for manual inspection on tag-only runs).
26+
# ---------------------------------------------------------------------------
27+
build:
28+
name: Build distribution
29+
runs-on: ubuntu-latest
30+
steps:
31+
- uses: actions/checkout@v4
32+
- uses: actions/setup-python@v5
33+
with:
34+
python-version: "3.11"
35+
cache: pip
36+
- name: Install build tools
37+
run: |
38+
python -m pip install --upgrade pip
39+
pip install build twine
40+
- name: Build sdist + wheel
41+
run: python -m build
42+
- name: Validate distribution metadata (twine check)
43+
run: twine check dist/*
44+
- name: Upload distribution artifacts
45+
uses: actions/upload-artifact@v4
46+
with:
47+
name: dist
48+
path: dist/
49+
if-no-files-found: error
50+
51+
# ---------------------------------------------------------------------------
52+
# Install the *built wheel* (not the editable/source checkout) in a clean
53+
# environment and run a small smoke subset — this is what actually catches
54+
# packaging mistakes (missing package-data, wrong `packages.find` excludes,
55+
# etc.) that `pip install -e .` in CI would never surface.
56+
# ---------------------------------------------------------------------------
57+
test-wheel:
58+
name: Test built wheel
59+
runs-on: ubuntu-latest
60+
needs: [build]
61+
steps:
62+
- uses: actions/checkout@v4
63+
- uses: actions/setup-python@v5
64+
with:
65+
python-version: "3.11"
66+
cache: pip
67+
- name: Download distribution artifacts
68+
uses: actions/download-artifact@v4
69+
with:
70+
name: dist
71+
path: dist/
72+
- name: Install the built wheel (+ test runner only, no editable install)
73+
run: |
74+
python -m pip install --upgrade pip
75+
python -m pip install dist/*.whl
76+
python -m pip install "pytest>=9.0.3" "pytest-asyncio>=0.21.0"
77+
- name: Import smoke test
78+
run: python -c "import multimind; print('multimind', multimind.__version__)"
79+
- name: Run smoke test subset against the installed wheel
80+
run: |
81+
pytest tests/test_import.py tests/test_basic.py -v --tb=short \
82+
-m "not integration and not slow and not requires_api_key"
83+
84+
# ---------------------------------------------------------------------------
85+
# Publish to PyPI via OIDC trusted publishing — no long-lived API token
86+
# secrets are stored or referenced. Requires a one-time trusted-publisher
87+
# registration on pypi.org (see docs/releasing.md). Only runs for an
88+
# actual published GitHub release, never for a bare tag push or
89+
# workflow_dispatch, so tag-based testing of build/test-wheel can't
90+
# accidentally publish.
91+
# ---------------------------------------------------------------------------
92+
publish:
93+
name: Publish to PyPI
94+
runs-on: ubuntu-latest
95+
needs: [test-wheel]
96+
if: github.event_name == 'release' && github.event.action == 'published'
97+
environment:
98+
name: pypi
99+
url: https://pypi.org/project/multimind-sdk/
100+
permissions:
101+
id-token: write # required for OIDC trusted publishing — no API token needed
102+
steps:
103+
- name: Download distribution artifacts
104+
uses: actions/download-artifact@v4
105+
with:
106+
name: dist
107+
path: dist/
108+
- name: Publish to PyPI
109+
uses: pypa/gh-action-pypi-publish@release/v1
110+
with:
111+
packages-dir: dist/
112+
113+
# --- TestPyPI variant (commented out) ---------------------------------
114+
# Useful while setting up trusted publishing for the first time, or for
115+
# dry-running a release without touching the real index. Requires its
116+
# own trusted-publisher registration on test.pypi.org and a separate
117+
# `testpypi` environment (see docs/releasing.md).
118+
#
119+
# - name: Publish to TestPyPI
120+
# uses: pypa/gh-action-pypi-publish@release/v1
121+
# with:
122+
# repository-url: https://test.pypi.org/legacy/
123+
# packages-dir: dist/

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,4 @@ site/
114114
multimind-docs/node_modules/
115115
multimind-docs/.next/
116116
multimind-docs/out/
117+
multimind-docs/build/

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ Targets `0.3.0` — first release after the packaging modernization, lazy-import
1111
and test-stabilization passes.
1212

1313
### Added
14+
- Guard proxy: `multimind serve` — an OpenAI-compatible reverse proxy that
15+
adds PII guarding, budgets, and audit logging to any existing app
16+
(see `docs/guard-proxy.md`)
17+
- AI inventory and chargeback: `multimind audit` CLI (see `docs/ai-inventory.md`)
18+
- `multimind scan-text` CLI for scanning text for PII/sensitive data
19+
- Compliance MCP server (`python -m multimind.mcp_server`) for Claude
20+
Desktop / Claude Code and other MCP clients (see `docs/mcp-server.md`)
21+
- Framework adapters for LangChain, LlamaIndex, CrewAI, and the OpenAI SDK
22+
(see `docs/integrations.md`)
23+
- New extras: `mcp`, `langchain`, `llamaindex`, `crewai`
1424
- `pyproject.toml` with modular extras: `rag`, `vector-stores`, `agents`,
1525
`memory`, `documents`, `finetune`, `finetune-gpu`, `compliance`, `gateway`,
1626
`dev`, `all` (#41)

0 commit comments

Comments
 (0)