minder-cli 0.3.4__tar.gz → 0.3.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. {minder_cli-0.3.4 → minder_cli-0.3.8}/PKG-INFO +57 -41
  2. {minder_cli-0.3.4 → minder_cli-0.3.8}/pyproject.toml +2 -2
  3. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/config.py +1 -1
  4. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/state.py +1 -0
  5. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/llm/litert.py +8 -4
  6. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/query.py +32 -0
  7. {minder_cli-0.3.4 → minder_cli-0.3.8}/.gitignore +0 -0
  8. {minder_cli-0.3.4 → minder_cli-0.3.8}/LICENSE +0 -0
  9. {minder_cli-0.3.4 → minder_cli-0.3.8}/README-pypi.md +0 -0
  10. {minder_cli-0.3.4 → minder_cli-0.3.8}/README.md +0 -0
  11. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/__init__.py +0 -0
  12. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/api/routers/prompts.py +0 -0
  13. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/application/__init__.py +0 -0
  14. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/application/admin/__init__.py +0 -0
  15. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/application/admin/dto.py +0 -0
  16. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/application/admin/jobs.py +0 -0
  17. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/application/admin/use_cases.py +0 -0
  18. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/__init__.py +0 -0
  19. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/context.py +0 -0
  20. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/middleware.py +0 -0
  21. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/principal.py +0 -0
  22. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/rate_limiter.py +0 -0
  23. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/rbac.py +0 -0
  24. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/auth/service.py +0 -0
  25. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/bootstrap/__init__.py +0 -0
  26. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/bootstrap/providers.py +0 -0
  27. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/bootstrap/transport.py +0 -0
  28. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/cache/__init__.py +0 -0
  29. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/cache/providers.py +0 -0
  30. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/chunking/__init__.py +0 -0
  31. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/chunking/code_splitter.py +0 -0
  32. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/chunking/splitter.py +0 -0
  33. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/cli.py +0 -0
  34. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/continuity.py +0 -0
  35. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/dev.py +0 -0
  36. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/embedding/__init__.py +0 -0
  37. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/embedding/base.py +0 -0
  38. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/embedding/local.py +0 -0
  39. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/embedding/openai.py +0 -0
  40. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/__init__.py +0 -0
  41. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/edges.py +0 -0
  42. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/executor.py +0 -0
  43. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/graph.py +0 -0
  44. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/__init__.py +0 -0
  45. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/evaluator.py +0 -0
  46. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/guard.py +0 -0
  47. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/llm.py +0 -0
  48. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/planning.py +0 -0
  49. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/reasoning.py +0 -0
  50. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/reranker.py +0 -0
  51. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/retriever.py +0 -0
  52. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/verification.py +0 -0
  53. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/nodes/workflow_planner.py +0 -0
  54. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/graph/runtime.py +0 -0
  55. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/llm/__init__.py +0 -0
  56. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/llm/base.py +0 -0
  57. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/llm/factory.py +0 -0
  58. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/llm/openai.py +0 -0
  59. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/__init__.py +0 -0
  60. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/base.py +0 -0
  61. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/client.py +0 -0
  62. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/document.py +0 -0
  63. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/error.py +0 -0
  64. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/graph.py +0 -0
  65. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/history.py +0 -0
  66. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/job.py +0 -0
  67. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/prompt.py +0 -0
  68. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/repository.py +0 -0
  69. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/rule.py +0 -0
  70. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/session.py +0 -0
  71. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/skill.py +0 -0
  72. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/user.py +0 -0
  73. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/models/workflow.py +0 -0
  74. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/observability/__init__.py +0 -0
  75. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/observability/audit.py +0 -0
  76. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/observability/logging.py +0 -0
  77. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/observability/metrics.py +0 -0
  78. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/observability/tracing.py +0 -0
  79. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/__init__.py +0 -0
  80. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/__init__.py +0 -0
  81. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/commands/auth.py +0 -0
  82. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/commands/ide.py +0 -0
  83. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/commands/mcp.py +0 -0
  84. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/commands/sync.py +0 -0
  85. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/commands/update.py +0 -0
  86. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/main.py +0 -0
  87. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/utils/common.py +0 -0
  88. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/utils/config.py +0 -0
  89. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/utils/git.py +0 -0
  90. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/cli/utils/version.py +0 -0
  91. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/__init__.py +0 -0
  92. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/__init__.py +0 -0
  93. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/api.py +0 -0
  94. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/context.py +0 -0
  95. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/dashboard.py +0 -0
  96. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/jobs.py +0 -0
  97. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/memories.py +0 -0
  98. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/prompts.py +0 -0
  99. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/routes.py +0 -0
  100. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/runtime.py +0 -0
  101. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/search.py +0 -0
  102. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/presentation/http/admin/skills.py +0 -0
  103. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/prompts/__init__.py +0 -0
  104. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/prompts/formatter.py +0 -0
  105. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/resources/__init__.py +0 -0
  106. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/retrieval/__init__.py +0 -0
  107. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/retrieval/hybrid.py +0 -0
  108. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/retrieval/mmr.py +0 -0
  109. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/retrieval/multi_hop.py +0 -0
  110. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/runtime.py +0 -0
  111. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/server.py +0 -0
  112. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/__init__.py +0 -0
  113. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/document.py +0 -0
  114. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/error.py +0 -0
  115. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/feedback.py +0 -0
  116. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/graph.py +0 -0
  117. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/history.py +0 -0
  118. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/interfaces.py +0 -0
  119. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/milvus/__init__.py +0 -0
  120. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/milvus/client.py +0 -0
  121. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/milvus/collections.py +0 -0
  122. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/milvus/vector_store.py +0 -0
  123. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/mongodb/__init__.py +0 -0
  124. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/mongodb/client.py +0 -0
  125. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/mongodb/indexes.py +0 -0
  126. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/mongodb/operational_store.py +0 -0
  127. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/relational.py +0 -0
  128. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/repo_state.py +0 -0
  129. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/rule.py +0 -0
  130. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/store/vector.py +0 -0
  131. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/__init__.py +0 -0
  132. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/auth.py +0 -0
  133. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/graph.py +0 -0
  134. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/ingest.py +0 -0
  135. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/memory.py +0 -0
  136. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/registry.py +0 -0
  137. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/repo_scanner.py +0 -0
  138. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/search.py +0 -0
  139. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/session.py +0 -0
  140. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/skills.py +0 -0
  141. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/tools/workflow.py +0 -0
  142. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/transport/__init__.py +0 -0
  143. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/transport/base.py +0 -0
  144. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/transport/sse.py +0 -0
  145. {minder_cli-0.3.4 → minder_cli-0.3.8}/src/minder/transport/stdio.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minder-cli
3
- Version: 0.3.4
3
+ Version: 0.3.8
4
4
  Summary: Minder CLI is the command-line interface for the Minder self-hosted MCP platform.
5
5
  Project-URL: Homepage, https://github.com/hiimtrung/minder
6
6
  Project-URL: Repository, https://github.com/hiimtrung/minder
@@ -37,83 +37,99 @@ Requires-Dist: zipp>=3.21.0; extra == 'server'
37
37
  Requires-Dist: zstandard>=0.25.0; extra == 'server'
38
38
  Description-Content-Type: text/markdown
39
39
 
40
- # minder-cli
40
+ # Minder
41
41
 
42
42
  [![PyPI version](https://img.shields.io/pypi/v/minder-cli.svg)](https://pypi.org/project/minder-cli/)
43
43
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
44
44
 
45
- **minder-cli** is the command-line interface for [Minder](https://github.com/hiimtrung/minder) a self-hosted MCP platform for repository-aware engineering intelligence.
45
+ **Minder** is a self-hosted MCP (Model Context Protocol) platform for repository-aware engineering intelligence.
46
46
 
47
- The CLI handles IDE scaffolding, repository sync, authentication, and self-updates. It connects to a **Minder Server** which runs the MCP gateway, RAG pipeline, memory engine, and admin console.
47
+ It combines a local-first inference stack, a persistent memory and workflow engine, and a developer-facing CLI into a single deployable unit.
48
48
 
49
- ## Installation
49
+ ## What's in this repo
50
50
 
51
- ```bash
52
- # Recommended
53
- uv tool install minder-cli
51
+ | Component | Description |
52
+ |-----------|-------------|
53
+ | **Minder Server** | MCP gateway — SSE + stdio transport, RAG pipeline, workflow engine, memory, admin HTTP |
54
+ | **Minder CLI** (`minder-cli` on PyPI) | Edge CLI — IDE scaffold, repo sync, login, self-update |
55
+ | **Minder Dashboard** | Astro admin console — client management, onboarding, skill catalog |
54
56
 
55
- # Alternative
56
- pipx install minder-cli
57
- ```
57
+ ## Architecture
58
58
 
59
- ## Requirements
59
+ ```
60
+ Developer → minder-cli → Minder Server ←→ AI agents (Codex / Copilot / Claude)
61
+
62
+ ┌──────────────┼──────────────┐
63
+ │ │ │
64
+ MongoDB Redis Milvus
65
+ (graph/memory) (cache) (vector search)
66
+
67
+ ┌─────┴──────┐
68
+ │ │
69
+ LiteRT-LM FastEmbed
70
+ (LLM gen) (embedding)
71
+ ```
60
72
 
61
- A running [Minder Server](https://github.com/hiimtrung/minder) — see the [server setup guide](https://github.com/hiimtrung/minder/blob/main/docs/minder-server.md) to get one running in minutes with Docker.
73
+ - **LLM inference**: LiteRT-LM (Google AI Edge) — on-device, hardware-accelerated, no HTTP overhead
74
+ - **Embedding inference**: FastEmbed running natively in-process (`mxbai-embed-large-v1`) — zero-dependency ONNX acceleration
62
75
 
63
76
  ## Quick Start
64
77
 
65
- ### 1. Connect to your server
78
+ ### Run the server
66
79
 
67
80
  ```bash
68
- minder login --client-key mkc_your_client_key --server-url http://localhost:8800/sse
81
+ # 1. Download the LiteRT-LM model
82
+ ./scripts/download_models.sh
83
+
84
+ # 2. Start infra (MongoDB + Redis + Milvus)
85
+ docker compose -f docker/docker-compose.local.yml up -d
86
+
87
+ # 3. Run Minder Server
88
+ uv run python -m minder.server
69
89
  ```
70
90
 
71
- ### 2. Set up IDE integration
91
+ Or use the one-command release installer (Docker only, no local uv needed):
72
92
 
73
93
  ```bash
74
- # In your project root — scaffolds MCP config for your editor
75
- minder install-ide --target vscode --target claude-code
94
+ curl -fsSL https://raw.githubusercontent.com/hiimtrung/minder/main/scripts/release/install-minder-release.sh | bash
76
95
  ```
77
96
 
78
- Supported targets: `vscode`, `cursor`, `claude-code`.
79
-
80
- ### 3. Sync a repository
97
+ ### Connect the CLI
81
98
 
82
99
  ```bash
83
- minder sync --repo-id <repository-uuid>
84
- ```
100
+ # Install
101
+ uv tool install minder-cli
85
102
 
86
- Indexes code and documentation so AI agents can use semantic search and RAG tools.
103
+ # Log in with your client key
104
+ minder login --client-key mkc_your_key --server-url http://localhost:8800/sse
87
105
 
88
- ## Commands
106
+ # Set up IDE integration (VS Code, Cursor, Claude Code)
107
+ minder install-ide --target vscode --target claude-code
89
108
 
90
- | Command | Description |
91
- |---------|-------------|
92
- | `minder login` | Authenticate the CLI against a Minder Server |
93
- | `minder install-ide` | Scaffold MCP assets for VS Code / Cursor / Claude Code |
94
- | `minder sync` | Index a repository into the Minder Server |
95
- | `minder check-update` | Check for available CLI and server updates |
96
- | `minder self-update` | Update CLI or server in place |
109
+ # Sync a repository
110
+ minder sync --repo-id <uuid>
111
+ ```
97
112
 
98
- ## MCP Tools (once connected)
113
+ ## MCP Tools
99
114
 
100
- Your AI agents will have access to:
115
+ When connected, Minder exposes these tools to your AI agents:
101
116
 
102
117
  | Tool | Description |
103
118
  |------|-------------|
104
119
  | `minder_query` | Full RAG pipeline: retrieve → reason → verify → respond |
105
- | `minder_search_code` | Semantic code search across indexed repositories |
120
+ | `minder_search_code` | Semantic code search across indexed repos |
106
121
  | `minder_memory_recall` | Retrieve persisted engineering memory |
107
122
  | `minder_workflow_get` | Read current workflow state |
108
123
  | `minder_session_restore` | Restore session continuity across context windows |
109
124
 
110
- ## Links
125
+ ## Documentation
111
126
 
112
- - [GitHub Repository](https://github.com/hiimtrung/minder)
113
- - [Server Setup Guide](https://github.com/hiimtrung/minder/blob/main/docs/minder-server.md)
114
- - [Local Dev Setup](https://github.com/hiimtrung/minder/blob/main/docs/guides/local-setup.md)
115
- - [System Design](https://github.com/hiimtrung/minder/blob/main/docs/system-design.md)
127
+ - [System Design](docs/system-design.md)
128
+ - [Server Setup](docs/minder-server.md)
129
+ - [Local Dev Setup](docs/guides/local-setup.md)
130
+ - [Production Deployment](docs/guides/production-deployment.md)
131
+ - [Admin & Client Onboarding](docs/guides/admin-client-onboarding.md)
116
132
 
117
133
  ## License
118
134
 
119
- Apache License 2.0. See [LICENSE](https://github.com/hiimtrung/minder/blob/main/LICENSE) for details.
135
+ Apache License 2.0. See [LICENSE](LICENSE) for details.
@@ -4,9 +4,9 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "minder-cli"
7
- version = "0.3.4"
7
+ version = "0.3.8"
8
8
  description = "Minder CLI is the command-line interface for the Minder self-hosted MCP platform."
9
- readme = "README-pypi.md"
9
+ readme = "README.md"
10
10
  requires-python = ">=3.14"
11
11
  keywords = ["mcp", "cli", "ai", "code-search", "workflow"]
12
12
  classifiers = [
@@ -46,7 +46,7 @@ class LLMConfig(BaseModel):
46
46
  litert_model_path: str = "~/.minder/models/gemma-4-E2B-it.litertlm"
47
47
  litert_backend: str = "auto" # "auto" (GPU on Mac, CPU elsewhere) | "cpu" | "gpu"
48
48
  litert_cache_dir: str = "~/.minder/cache/litert"
49
- context_length: int = 131072
49
+ context_length: int = 32768
50
50
  temperature: float = 0.1
51
51
  openai_api_key: Optional[str] = None
52
52
  openai_model: str = "gpt-4o-mini"
@@ -24,3 +24,4 @@ class GraphState(BaseModel):
24
24
  transition_log: list[dict[str, Any]] = Field(default_factory=list)
25
25
  retry_count: int = 0
26
26
  metadata: dict[str, Any] = Field(default_factory=dict)
27
+ chat_history: list[dict[str, Any]] = Field(default_factory=list)
@@ -28,7 +28,7 @@ logger = logging.getLogger(__name__)
28
28
 
29
29
  _ENGINE_CACHE: dict[str, Any] = {}
30
30
  _CONVERSATION_CACHE: OrderedDict[uuid.UUID, Any] = OrderedDict()
31
- MAX_CACHED_CONVERSATIONS = 5
31
+ MAX_CACHED_CONVERSATIONS = 3
32
32
 
33
33
 
34
34
  class LiteRTModelLLM:
@@ -39,7 +39,7 @@ class LiteRTModelLLM:
39
39
  model_path: str = "~/.minder/models/gemma-4-E2B-it.litertlm",
40
40
  backend: str = "cpu",
41
41
  cache_dir: str = "~/.minder/cache/litert",
42
- context_length: int = 131072,
42
+ context_length: int = 32768,
43
43
  ) -> None:
44
44
  self._model_path = str(Path(model_path).expanduser())
45
45
  self._backend = backend
@@ -189,12 +189,14 @@ class LiteRTModelLLM:
189
189
 
190
190
  reasoning_output = getattr(state, "reasoning_output", {}) or {}
191
191
  prompt = reasoning_output.get("prompt") or state.query
192
+ chat_history = getattr(state, "chat_history", []) or []
192
193
  text = self.complete_text(
193
194
  str(prompt),
194
195
  max_tokens=256,
195
196
  temperature=0.1,
196
197
  fallback=fallback,
197
198
  session_id=state.session_id,
199
+ chat_history=chat_history,
198
200
  )
199
201
 
200
202
  return {
@@ -235,11 +237,12 @@ class LiteRTModelLLM:
235
237
  try:
236
238
  reasoning_output = getattr(state, "reasoning_output", {}) or {}
237
239
  prompt = str(reasoning_output.get("prompt") or state.query)
240
+ chat_history = getattr(state, "chat_history", []) or []
238
241
 
239
242
  # Use session cache if available. Reusing the conversation preserves the KV-cache state.
240
243
  # For linear conversations, we don't pass 'messages' to send_message_async because
241
244
  # it builds on top of the existing state in the Conversation object.
242
- conv = self._get_conversation(state.session_id, initial_messages=[])
245
+ conv = self._get_conversation(state.session_id, initial_messages=chat_history)
243
246
 
244
247
  for chunk in conv.send_message_async(prompt):
245
248
  for item in chunk.get("content", []):
@@ -267,13 +270,14 @@ class LiteRTModelLLM:
267
270
  temperature: float = 0.1,
268
271
  fallback: str = "",
269
272
  session_id: uuid.UUID | None = None,
273
+ chat_history: list[dict[str, Any]] | None = None,
270
274
  ) -> str:
271
275
  """Simple text-in/text-out completion."""
272
276
  if self.runtime != "litert":
273
277
  return fallback
274
278
 
275
279
  try:
276
- conv = self._get_conversation(session_id, initial_messages=[])
280
+ conv = self._get_conversation(session_id, initial_messages=chat_history or [])
277
281
  response = conv.send_message(prompt)
278
282
  return cast(str, response["content"][0]["text"])
279
283
  except Exception as e:
@@ -86,6 +86,21 @@ class QueryTools:
86
86
  "query_reasoning",
87
87
  self._store,
88
88
  )
89
+ chat_history = []
90
+ if session_id:
91
+ try:
92
+ history_docs = await self._store.list_history_for_session(session_id)
93
+ chat_history = [
94
+ {
95
+ "role": str(getattr(doc, "role", "")).replace("assistant", "model"),
96
+ "content": str(getattr(doc, "content", "")),
97
+ }
98
+ for doc in history_docs
99
+ if getattr(doc, "role", "") and getattr(doc, "content", "")
100
+ ]
101
+ except Exception:
102
+ pass
103
+
89
104
  state = GraphState(
90
105
  query=query,
91
106
  session_id=session_id,
@@ -93,6 +108,7 @@ class QueryTools:
93
108
  repo_id=repo_id,
94
109
  repo_path=repo_path,
95
110
  workflow_context=workflow_context,
111
+ chat_history=chat_history,
96
112
  metadata={
97
113
  "verification_payload": verification_payload,
98
114
  "max_attempts": max_attempts,
@@ -181,6 +197,21 @@ class QueryTools:
181
197
  "query_reasoning",
182
198
  self._store,
183
199
  )
200
+ chat_history = []
201
+ if session_id:
202
+ try:
203
+ history_docs = await self._store.list_history_for_session(session_id)
204
+ chat_history = [
205
+ {
206
+ "role": str(getattr(doc, "role", "")).replace("assistant", "model"),
207
+ "content": str(getattr(doc, "content", "")),
208
+ }
209
+ for doc in history_docs
210
+ if getattr(doc, "role", "") and getattr(doc, "content", "")
211
+ ]
212
+ except Exception:
213
+ pass
214
+
184
215
  state = GraphState(
185
216
  query=query,
186
217
  session_id=session_id,
@@ -188,6 +219,7 @@ class QueryTools:
188
219
  repo_id=repo_id,
189
220
  repo_path=repo_path,
190
221
  workflow_context=workflow_context,
222
+ chat_history=chat_history,
191
223
  metadata={
192
224
  "verification_payload": verification_payload,
193
225
  "max_attempts": max_attempts,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes