marvisx-cli 0.3.5__tar.gz → 0.3.7b1__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 (628) hide show
  1. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/LICENSE +12 -13
  2. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/MANIFEST.in +1 -0
  3. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/PKG-INFO +2 -1
  4. marvisx_cli-0.3.7b1/README.md +124 -0
  5. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/config.py +21 -8
  6. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/db.py +11 -7
  7. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/learnings.py +53 -0
  8. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/tasks.py +1 -2
  9. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/jobs.py +14 -1
  10. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/_brain_opportunistic.py +2 -4
  11. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/_brain_schedule.py +67 -9
  12. marvisx_cli-0.3.7b1/core/cli/_update_check.py +164 -0
  13. marvisx_cli-0.3.7b1/core/cli/guides/__init__.py +6 -0
  14. marvisx_cli-0.3.7b1/core/cli/guides/marvis-way.md +177 -0
  15. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_brain.py +113 -2
  16. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_doctor.py +91 -1
  17. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_feedback.py +4 -5
  18. marvisx_cli-0.3.7b1/core/cli/marvis_guide.py +112 -0
  19. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_init.py +106 -49
  20. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_runtime.py +32 -1
  21. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_telemetry.py +3 -8
  22. marvisx_cli-0.3.7b1/core/platform/__init__.py +177 -0
  23. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/client.py +36 -22
  24. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/byok_vault.py +5 -8
  25. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/defaults.py +7 -14
  26. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/marvisx_cli.egg-info/PKG-INFO +2 -1
  27. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/marvisx_cli.egg-info/SOURCES.txt +15 -1
  28. marvisx_cli-0.3.7b1/marvisx_cli.egg-info/entry_points.txt +3 -0
  29. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/marvisx_cli.egg-info/requires.txt +1 -0
  30. marvisx_cli-0.3.7b1/migrations/146_drop_kg_backup_tables.sql +37 -0
  31. marvisx_cli-0.3.7b1/migrations/146_drop_kg_backup_tables_down.sql +9 -0
  32. marvisx_cli-0.3.7b1/projects/_template/context.md +28 -0
  33. marvisx_cli-0.3.7b1/projects/_template/docs/brainstorms/YYYY-MM-DD-example-brainstorm.md +19 -0
  34. marvisx_cli-0.3.7b1/projects/_template/docs/plans/YYYY-MM-DD-example-plan.md +23 -0
  35. marvisx_cli-0.3.7b1/projects/_template/docs/solutions/YYYY-MM-DD-example-solution.md +21 -0
  36. marvisx_cli-0.3.7b1/projects/_template/input/README.md +6 -0
  37. marvisx_cli-0.3.7b1/projects/_template/memory/handoff.md +27 -0
  38. marvisx_cli-0.3.7b1/projects/_template/output/README.md +7 -0
  39. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/projects/_template/project.yaml +2 -2
  40. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/pyproject.toml +10 -4
  41. marvisx_cli-0.3.5/README.md +0 -95
  42. marvisx_cli-0.3.5/marvisx_cli.egg-info/entry_points.txt +0 -3
  43. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/__init__.py +0 -0
  44. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/agents/__init__.py +0 -0
  45. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/agents/session_health.py +0 -0
  46. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/agents/session_manager.py +0 -0
  47. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/bin/marvisx-state-hook.py +0 -0
  48. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/dependencies/__init__.py +0 -0
  49. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/dependencies/tenant.py +0 -0
  50. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/main.py +0 -0
  51. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/__init__.py +0 -0
  52. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/_adapter.py +0 -0
  53. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/server.py +0 -0
  54. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/__init__.py +0 -0
  55. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/brain.py +0 -0
  56. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/graph.py +0 -0
  57. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/handoffs.py +0 -0
  58. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/ingest.py +0 -0
  59. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/projects.py +0 -0
  60. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/pull_requests.py +0 -0
  61. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/safety.py +0 -0
  62. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/search.py +0 -0
  63. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/tasks.py +0 -0
  64. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/workflow_playbooks/brainstorm.md +0 -0
  65. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/workflow_playbooks/compound.md +0 -0
  66. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/workflow_playbooks/plan.md +0 -0
  67. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/mcp/tools/workflows.py +0 -0
  68. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/middleware/__init__.py +0 -0
  69. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/middleware/tool_call_audit.py +0 -0
  70. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/__init__.py +0 -0
  71. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/auth.py +0 -0
  72. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/brain.py +0 -0
  73. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/common.py +0 -0
  74. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/costs.py +0 -0
  75. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/graph.py +0 -0
  76. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/graph_cosmo.py +0 -0
  77. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/graph_pr_impact.py +0 -0
  78. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/graph_ux.py +0 -0
  79. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/inbox.py +0 -0
  80. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/ingest_keys.py +0 -0
  81. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/kg.py +0 -0
  82. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/llm_config.py +0 -0
  83. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/monitoring.py +0 -0
  84. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/projects.py +0 -0
  85. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/search.py +0 -0
  86. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/sessions.py +0 -0
  87. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/teams.py +0 -0
  88. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/models/users.py +0 -0
  89. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/observability/__init__.py +0 -0
  90. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/observability/tracing.py +0 -0
  91. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/paths.py +0 -0
  92. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/rate_limit.py +0 -0
  93. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/rbac.py +0 -0
  94. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/__init__.py +0 -0
  95. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/_adapter.py +0 -0
  96. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/admin_pr_impact.py +0 -0
  97. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/admin_settings.py +0 -0
  98. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/agent.py +0 -0
  99. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/agent_tokens.py +0 -0
  100. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/app_settings.py +0 -0
  101. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/audit.py +0 -0
  102. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/auth.py +0 -0
  103. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/bench.py +0 -0
  104. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/brain.py +0 -0
  105. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/brain_directions.py +0 -0
  106. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/ci_checks.py +0 -0
  107. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/comments.py +0 -0
  108. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/costs.py +0 -0
  109. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/docs_coverage.py +0 -0
  110. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/docs_governance.py +0 -0
  111. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/documents.py +0 -0
  112. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/files.py +0 -0
  113. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/finder.py +0 -0
  114. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/graph.py +0 -0
  115. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/handoffs.py +0 -0
  116. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/inbox.py +0 -0
  117. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/ingest_api_keys.py +0 -0
  118. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/ingest_triage.py +0 -0
  119. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/judge.py +0 -0
  120. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/kg.py +0 -0
  121. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/learnings.py +0 -0
  122. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/llm_config.py +0 -0
  123. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/monitoring.py +0 -0
  124. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/notifications.py +0 -0
  125. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/pr_impact.py +0 -0
  126. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/projects.py +0 -0
  127. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/pull_requests.py +0 -0
  128. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/push.py +0 -0
  129. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/raci.py +0 -0
  130. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/search.py +0 -0
  131. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/sessions.py +0 -0
  132. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/settings.py +0 -0
  133. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/share_repo.py +0 -0
  134. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/status_updates.py +0 -0
  135. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/tags.py +0 -0
  136. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/tasks.py +0 -0
  137. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/teams.py +0 -0
  138. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/terminal.py +0 -0
  139. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/users.py +0 -0
  140. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/routers/webhooks.py +0 -0
  141. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/runtime_settings.py +0 -0
  142. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/security.py +0 -0
  143. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/__init__.py +0 -0
  144. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/_fts.py +0 -0
  145. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/audit.py +0 -0
  146. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/auto_approval.py +0 -0
  147. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/__init__.py +0 -0
  148. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/baseline.py +0 -0
  149. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/capabilities.py +0 -0
  150. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/cascade_rollup.py +0 -0
  151. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/compound_bridge.py +0 -0
  152. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/cycle.py +0 -0
  153. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/cycle_snapshot.py +0 -0
  154. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/digest_collector.py +0 -0
  155. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/direction.py +0 -0
  156. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/drift.py +0 -0
  157. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/drift_router.py +0 -0
  158. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/edge_metrics.py +0 -0
  159. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/events_reader.py +0 -0
  160. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/findings.py +0 -0
  161. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/findings_reader.py +0 -0
  162. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/journal.py +0 -0
  163. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/knowledge_forms.py +0 -0
  164. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/__init__.py +0 -0
  165. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/_runner.py +0 -0
  166. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/base.py +0 -0
  167. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/cache.py +0 -0
  168. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/constants.py +0 -0
  169. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/direction_alignment.py +0 -0
  170. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/factory.py +0 -0
  171. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/finding_reasoning.py +0 -0
  172. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/finding_summary.py +0 -0
  173. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/grounding.py +0 -0
  174. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/journal_polish.py +0 -0
  175. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/local_gateway.py +0 -0
  176. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/parsers.py +0 -0
  177. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/llm/router_glue.py +0 -0
  178. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/memory_ops.py +0 -0
  179. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/models.py +0 -0
  180. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/owner_hint.py +0 -0
  181. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/recap.py +0 -0
  182. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/__init__.py +0 -0
  183. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/_signals.py +0 -0
  184. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr1_activity_without_status.py +0 -0
  185. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr2_decision_without_adr.py +0 -0
  186. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr3_stale_open_loop.py +0 -0
  187. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr4_docs_governance_drift.py +0 -0
  188. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr5_playbook_changed.py +0 -0
  189. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr6_external_update_unpropagated.py +0 -0
  190. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr7_claimed_decision_gap.py +0 -0
  191. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/rules/dr8_direction_misalignment.py +0 -0
  192. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/runs_reader.py +0 -0
  193. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/scope.py +0 -0
  194. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/__init__.py +0 -0
  195. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/base.py +0 -0
  196. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/git_kg.py +0 -0
  197. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/handoffs.py +0 -0
  198. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/ingestor.py +0 -0
  199. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/learnings.py +0 -0
  200. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/sources/pir_tasks.py +0 -0
  201. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/warehouse_consolidate.py +0 -0
  202. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/watermarks.py +0 -0
  203. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/brain/ws_emitter.py +0 -0
  204. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/cc_tasks_reader.py +0 -0
  205. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ci_service.py +0 -0
  206. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/claude_metrics.py +0 -0
  207. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/codex_metrics.py +0 -0
  208. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/conversation_reader.py +0 -0
  209. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/cost_service.py +0 -0
  210. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/crypto.py +0 -0
  211. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/__init__.py +0 -0
  212. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/confidence.py +0 -0
  213. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/config.py +0 -0
  214. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/enrichment.py +0 -0
  215. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/frontmatter_validator.py +0 -0
  216. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/hard_gates.py +0 -0
  217. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/docs_governance/triage_orchestrator.py +0 -0
  218. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/embedding_backends/__init__.py +0 -0
  219. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/embedding_internal.py +0 -0
  220. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/embedding_service.py +0 -0
  221. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/event_dispatcher.py +0 -0
  222. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/events.py +0 -0
  223. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/git_ops.py +0 -0
  224. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/graph_cosmo_service.py +0 -0
  225. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/graph_ranker.py +0 -0
  226. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/graph_service.py +0 -0
  227. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox.py +0 -0
  228. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_digest.py +0 -0
  229. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_digest_deep_research.py +0 -0
  230. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_digest_jobs.py +0 -0
  231. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_gmail_sync.py +0 -0
  232. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_llm_classifier.py +0 -0
  233. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_source_identity.py +0 -0
  234. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_sources.py +0 -0
  235. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_taxonomy.py +0 -0
  236. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_tldr.py +0 -0
  237. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/inbox_triage.py +0 -0
  238. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/__init__.py +0 -0
  239. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/api_key_auth.py +0 -0
  240. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/auto_approve.py +0 -0
  241. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/classifier.py +0 -0
  242. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/confidence.py +0 -0
  243. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/dispatch.py +0 -0
  244. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/embedding_router.py +0 -0
  245. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/events.py +0 -0
  246. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/ignore_patterns.py +0 -0
  247. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/image_probe.py +0 -0
  248. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/ingress.py +0 -0
  249. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/insert_saga.py +0 -0
  250. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/__init__.py +0 -0
  251. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/anthropic_haiku.py +0 -0
  252. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/base.py +0 -0
  253. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/byok_provider.py +0 -0
  254. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/classification_context.py +0 -0
  255. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/config_store.py +0 -0
  256. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/factory.py +0 -0
  257. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/kg_enricher.py +0 -0
  258. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/local_gateway.py +0 -0
  259. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/local_vllm.py +0 -0
  260. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/llm/openai_nano.py +0 -0
  261. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/lock_advisory.py +0 -0
  262. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parser_router.py +0 -0
  263. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/__init__.py +0 -0
  264. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/docling_parser.py +0 -0
  265. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/docparse_gateway.py +0 -0
  266. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/docx_parser.py +0 -0
  267. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/folder_unpacker.py +0 -0
  268. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/gateway_aux.py +0 -0
  269. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/image_parser.py +0 -0
  270. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/internal_markdown.py +0 -0
  271. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/ocr_gateway.py +0 -0
  272. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/ocr_pdf_parser.py +0 -0
  273. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/pdf_types.py +0 -0
  274. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/transcript_parser.py +0 -0
  275. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/vision_gateway.py +0 -0
  276. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/xlsx_parser.py +0 -0
  277. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/parsers/zip_unpacker.py +0 -0
  278. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/preflight.py +0 -0
  279. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/routing_policy.py +0 -0
  280. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/serializers/__init__.py +0 -0
  281. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/serializers/xlsx_to_markdown.py +0 -0
  282. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/skip_log.py +0 -0
  283. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/ingest/watcher.py +0 -0
  284. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/__init__.py +0 -0
  285. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/audit.py +0 -0
  286. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/hybrid_search.py +0 -0
  287. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/lens.py +0 -0
  288. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/pr_impact.py +0 -0
  289. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/queries.py +0 -0
  290. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/ranking.py +0 -0
  291. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg/rrf.py +0 -0
  292. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/kg_watcher_control.py +0 -0
  293. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/local_llm/__init__.py +0 -0
  294. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/local_llm/async_client.py +0 -0
  295. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/local_llm/client.py +0 -0
  296. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/local_llm/url_validator.py +0 -0
  297. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/metrics_collector.py +0 -0
  298. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/metrics_providers.py +0 -0
  299. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/model_registry.py +0 -0
  300. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/model_router.py +0 -0
  301. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/n8n_client.py +0 -0
  302. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/newsletter_llm_gateway.py +0 -0
  303. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/notification_service.py +0 -0
  304. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/openai_responses.py +0 -0
  305. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/opencode_metrics.py +0 -0
  306. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/opencode_sessions.py +0 -0
  307. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pii_redactor.py +0 -0
  308. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/__init__.py +0 -0
  309. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/differ.py +0 -0
  310. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/dispatcher.py +0 -0
  311. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/gc.py +0 -0
  312. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/languages.py +0 -0
  313. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/parser.py +0 -0
  314. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_impact_pipeline/writer.py +0 -0
  315. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/pr_service.py +0 -0
  316. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/project_paths.py +0 -0
  317. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/project_status_updates.py +0 -0
  318. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/providers.py +0 -0
  319. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/push_service.py +0 -0
  320. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/reminder_service.py +0 -0
  321. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/runas.py +0 -0
  322. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/salience_service.py +0 -0
  323. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/security_collector.py +0 -0
  324. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/session_catalog.py +0 -0
  325. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/session_metrics_service.py +0 -0
  326. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/session_ops.py +0 -0
  327. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/session_state.py +0 -0
  328. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/share_links.py +0 -0
  329. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/task_transitions.py +0 -0
  330. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/terminal_metrics.py +0 -0
  331. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/terminal_metrics_dump.py +0 -0
  332. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/tmux.py +0 -0
  333. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/webhook_service.py +0 -0
  334. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/services/workspace_sync.py +0 -0
  335. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/templates/__init__.py +0 -0
  336. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/templates/markdown_share.py +0 -0
  337. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/terminal.py +0 -0
  338. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/__init__.py +0 -0
  339. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_agent_facing_auth_dependencies.py +0 -0
  340. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_audit_permissions.py +0 -0
  341. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_backfill_session_conversations.py +0 -0
  342. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_backfill_working_seconds_msg.py +0 -0
  343. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_claude_metrics.py +0 -0
  344. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_codex_metrics.py +0 -0
  345. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_config_env_aliases.py +0 -0
  346. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_finder_paths.py +0 -0
  347. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_git_ops_merge.py +0 -0
  348. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_learnings_check_search.py +0 -0
  349. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_metrics_providers.py +0 -0
  350. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_migration_087.py +0 -0
  351. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_migration_088.py +0 -0
  352. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_migration_089.py +0 -0
  353. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_openai_responses.py +0 -0
  354. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_opencode_metrics.py +0 -0
  355. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_opencode_sessions.py +0 -0
  356. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_pr_workflow_e2e.py +0 -0
  357. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_projects_handoffs.py +0 -0
  358. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_providers.py +0 -0
  359. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_require_scope_empty_deny.py +0 -0
  360. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_safety_bridge.py +0 -0
  361. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_session_catalog.py +0 -0
  362. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_session_conversations.py +0 -0
  363. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_session_metrics_service.py +0 -0
  364. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_session_resume_paths.py +0 -0
  365. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_session_theme_mode_migration.py +0 -0
  366. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_sessions_rbac.py +0 -0
  367. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_share_edit.py +0 -0
  368. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_share_repo.py +0 -0
  369. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_terminal_session_manager.py +0 -0
  370. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_terminal_upload.py +0 -0
  371. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_tmux.py +0 -0
  372. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_workspace_sync.py +0 -0
  373. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/tests/test_ws_ticket_in_memory.py +0 -0
  374. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/__init__.py +0 -0
  375. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/_context.py +0 -0
  376. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/_errors.py +0 -0
  377. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/_roles.py +0 -0
  378. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/audit.py +0 -0
  379. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/brain.py +0 -0
  380. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/costs.py +0 -0
  381. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/graph.py +0 -0
  382. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/handoffs.py +0 -0
  383. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/ingest_triage.py +0 -0
  384. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/learnings.py +0 -0
  385. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/projects.py +0 -0
  386. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/pull_requests.py +0 -0
  387. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/search.py +0 -0
  388. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/use_cases/tasks.py +0 -0
  389. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/api/visibility.py +0 -0
  390. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/README.md +0 -0
  391. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/__init__.py +0 -0
  392. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/_index_source.py +0 -0
  393. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/_runtime_ctx.py +0 -0
  394. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/_transmute.py +0 -0
  395. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_account.py +0 -0
  396. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_governance.py +0 -0
  397. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_hooks.py +0 -0
  398. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/cli/marvis_mcp.py +0 -0
  399. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/_drift_check.py +0 -0
  400. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/_frontmatter.py +0 -0
  401. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/_graph_writer.py +0 -0
  402. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/ast_parser.py +0 -0
  403. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/__init__.py +0 -0
  404. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/_config.sh +0 -0
  405. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/block-dangerous-bash.sh +0 -0
  406. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/block-db-direct-write.sh +0 -0
  407. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/block-push-no-task.sh +0 -0
  408. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/block-staging-to-prod.sh +0 -0
  409. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/block-subtree-push.sh +0 -0
  410. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/config.json +0 -0
  411. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/enforce-no-merge-main.sh +0 -0
  412. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/enforce-worktree.sh +0 -0
  413. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/quality-gate.sh +0 -0
  414. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/safety_bridge.py +0 -0
  415. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/install_hooks/secret-scan.sh +0 -0
  416. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/migrate_spike_node_ids.py +0 -0
  417. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_artifacts.py +0 -0
  418. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_cross_project.py +0 -0
  419. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_inbox_nodes.py +0 -0
  420. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_pr_impact.py +0 -0
  421. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_project_nodes.py +0 -0
  422. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/populate_touch_counter.py +0 -0
  423. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/reparse_failed.py +0 -0
  424. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/scripts/safety_bridge.py +0 -0
  425. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/__init__.py +0 -0
  426. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/entitlements.py +0 -0
  427. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/rollup.py +0 -0
  428. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/schema.py +0 -0
  429. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/telemetry/sender.py +0 -0
  430. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/__init__.py +0 -0
  431. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/state.py +0 -0
  432. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/steps.py +0 -0
  433. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/core/wizard/validation.py +0 -0
  434. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/marvisx_cli.egg-info/dependency_links.txt +0 -0
  435. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/marvisx_cli.egg-info/top_level.txt +0 -0
  436. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/001_initial.sql +0 -0
  437. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/002_tasks.sql +0 -0
  438. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/003_session_management.sql +0 -0
  439. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/004_projects_comments.sql +0 -0
  440. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/005_session_intelligence.sql +0 -0
  441. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/006_settings.sql +0 -0
  442. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/007_task_scoring.sql +0 -0
  443. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/008_cost_tracking.sql +0 -0
  444. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/009_session_card_metrics.sql +0 -0
  445. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/010_monitoring.sql +0 -0
  446. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/012_agent_api.sql +0 -0
  447. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/013_session_complete.sql +0 -0
  448. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/015_pull_requests.sql +0 -0
  449. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/015_pull_requests_down.sql +0 -0
  450. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/016_users_raci.sql +0 -0
  451. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/017_task_cost_entries.sql +0 -0
  452. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/018_agents.sql +0 -0
  453. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/018_agents_down.sql +0 -0
  454. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/019_review_feedback.sql +0 -0
  455. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/020_pr_commit_sha.sql +0 -0
  456. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/021_webhook_events.sql +0 -0
  457. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/022_devx_agent_managed.sql +0 -0
  458. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/022_devx_agent_managed_down.sql +0 -0
  459. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/023_devx_p1_gate.sql +0 -0
  460. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/023_devx_p1_gate_down.sql +0 -0
  461. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/024_chat_messages.sql +0 -0
  462. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/024_pr_conversation_id.sql +0 -0
  463. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/024_task_indexes.sql +0 -0
  464. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/024_task_indexes_down.sql +0 -0
  465. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/025_audit_log.sql +0 -0
  466. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/026_agent_tokens.sql +0 -0
  467. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/027_teams_auth_phase_b.sql +0 -0
  468. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/028_learnings.sql +0 -0
  469. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/029_team_roles.sql +0 -0
  470. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/030_finder_pins.sql +0 -0
  471. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/031_pr_deploy_status.sql +0 -0
  472. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/032_task_reminders.sql +0 -0
  473. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/033_events_retry_count.sql +0 -0
  474. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/033_session_owner.sql +0 -0
  475. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/034_notifications.sql +0 -0
  476. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/035_shared_links.sql +0 -0
  477. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/036_session_index_upgrade.sql +0 -0
  478. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/037_pr_approval.sql +0 -0
  479. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/038_pr_submitted_by.sql +0 -0
  480. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/039_push_subscriptions.sql +0 -0
  481. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/040_semantic_search.sql +0 -0
  482. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/041_workspaces.sql +0 -0
  483. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/042_oidc_providers.sql +0 -0
  484. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/043_ci_checks.sql +0 -0
  485. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/044_agent_metrics.sql +0 -0
  486. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/045_documents_doc_type.sql +0 -0
  487. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/046_salience.sql +0 -0
  488. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/047_seed_missing_agents.sql +0 -0
  489. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/048_fix_agent_paths_roles.sql +0 -0
  490. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/049_agent_role_and_learnings_schema.sql +0 -0
  491. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/050_session_provider.sql +0 -0
  492. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/051_session_launch_profile.sql +0 -0
  493. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/052_session_theme_mode.sql +0 -0
  494. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/052_task_kind.sql +0 -0
  495. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/053_inbox_items.sql +0 -0
  496. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/054_inbox_triage_contract.sql +0 -0
  497. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/055_inbox_topic_treatment.sql +0 -0
  498. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/056_inbox_treatment_read_save.sql +0 -0
  499. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/057_session_theme_mode_backfill.sql +0 -0
  500. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/058_inbox_item_status_lifecycle.sql +0 -0
  501. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/059_inbox_tldr_and_source_scores.sql +0 -0
  502. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/060_newsletter.sql +0 -0
  503. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/061_inbox_redesign.sql +0 -0
  504. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/062_fix_inbox_sources_backfill.sql +0 -0
  505. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/063_task_completion_mode.sql +0 -0
  506. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/064_judge_mode_setting.sql +0 -0
  507. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/065_knowledge_graph_spike.sql +0 -0
  508. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/066_digest_ranking_inputs.sql +0 -0
  509. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/066_kg_artifact_nodes.sql +0 -0
  510. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/067_inbox_digest_selections.sql +0 -0
  511. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/067_kg_temporal.sql +0 -0
  512. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/068_inbox_digest_app_settings.sql +0 -0
  513. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/068_kg_touch_counter.sql +0 -0
  514. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/069_kg_doc_types.sql +0 -0
  515. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/070_digest_ranking_inputs_recovery.sql +0 -0
  516. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/071_inbox_digest_selections_recovery.sql +0 -0
  517. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/072_inbox_digest_app_settings_recovery.sql +0 -0
  518. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/073_kg_cross_project.sql +0 -0
  519. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/073_kg_cross_project_down.sql +0 -0
  520. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/074_kg_infra_types.sql +0 -0
  521. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/074_kg_infra_types_down.sql +0 -0
  522. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/075_kg_file_state_recovery.sql +0 -0
  523. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/075_kg_file_state_recovery_down.sql +0 -0
  524. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/076_kg_watcher_state.sql +0 -0
  525. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/076_kg_watcher_state_down.sql +0 -0
  526. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/077_kg_doc_types_extend.sql +0 -0
  527. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/077_kg_doc_types_extend_down.sql +0 -0
  528. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/078_kg_fts5.sql +0 -0
  529. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/078_kg_fts5_down.sql +0 -0
  530. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/079_kg_missing_indexes.sql +0 -0
  531. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/079_kg_missing_indexes_down.sql +0 -0
  532. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/080_kg_fts5_extended.sql +0 -0
  533. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/080_kg_fts5_extended_down.sql +0 -0
  534. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/081_kg_lens_indexes.sql +0 -0
  535. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/081_kg_lens_indexes_down.sql +0 -0
  536. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/082_kg_pins.sql +0 -0
  537. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/082_kg_pins_down.sql +0 -0
  538. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/083_kg_graph_nodes_degree.sql +0 -0
  539. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/083_kg_graph_nodes_degree_down.sql +0 -0
  540. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/084_drop_legacy_scheduler_tables.sql +0 -0
  541. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/084_drop_legacy_scheduler_tables_down.sql +0 -0
  542. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/085_kg_edge_resolves_to.sql +0 -0
  543. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/085_kg_edge_resolves_to_down.sql +0 -0
  544. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/086_project_status_updates_feed.sql +0 -0
  545. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/086_project_status_updates_feed_down.sql +0 -0
  546. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/087_session_metrics_dual.sql +0 -0
  547. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/087_session_metrics_dual_down.sql +0 -0
  548. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/088_rename_context_pct_legacy.sql +0 -0
  549. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/088_rename_context_pct_legacy_down.sql +0 -0
  550. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/089_session_metrics_equivalent_cost.sql +0 -0
  551. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/089_session_metrics_equivalent_cost_down.sql +0 -0
  552. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/090_kg_inbox_node_type.sql +0 -0
  553. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/090_kg_inbox_node_type_down.sql +0 -0
  554. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/091_kg_inbox_node_type_check.sql +0 -0
  555. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/091_kg_inbox_node_type_check_down.sql +0 -0
  556. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/092_sessions_activity_state_ts.sql +0 -0
  557. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/092_sessions_activity_state_ts_down.sql +0 -0
  558. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/093_sessions_activity_state_column.sql +0 -0
  559. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/093_sessions_activity_state_column_down.sql +0 -0
  560. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/094_ingest_pending.sql +0 -0
  561. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/094_ingest_pending_down.sql +0 -0
  562. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/095_kg_intent_first.sql +0 -0
  563. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/095_kg_intent_first_down.sql +0 -0
  564. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/096_kg_xlsx_artifact_prefix.sql +0 -0
  565. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/096_kg_xlsx_artifact_prefix_down.sql +0 -0
  566. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/097_ingest_change_history.sql +0 -0
  567. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/097_ingest_change_history_down.sql +0 -0
  568. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/098_kg_node_type_business.sql +0 -0
  569. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/098_kg_node_type_business_down.sql +0 -0
  570. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/099_kg_edges_restore_weight.sql +0 -0
  571. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/099_kg_edges_restore_weight_down.sql +0 -0
  572. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/100_kg_enriched_at.sql +0 -0
  573. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/100_kg_enriched_at_down.sql +0 -0
  574. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/101_local_llm_shadow_comparisons.sql +0 -0
  575. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/101_local_llm_shadow_comparisons_down.sql +0 -0
  576. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/102_promote_llm_costs.sql +0 -0
  577. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/102_promote_llm_costs_down.sql +0 -0
  578. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/103_ingest_skipped_log.sql +0 -0
  579. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/103_ingest_skipped_log_down.sql +0 -0
  580. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/120_docs_governance.sql +0 -0
  581. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/120_docs_governance_down.sql +0 -0
  582. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/121_notification_event_fk_cleanup.sql +0 -0
  583. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/121_notification_event_fk_cleanup_down.sql +0 -0
  584. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/122_docs_drift_history.sql +0 -0
  585. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/122_docs_drift_history_down.sql +0 -0
  586. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/123_ingest_parser_waiting_status.sql +0 -0
  587. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/123_ingest_parser_waiting_status_down.sql +0 -0
  588. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/124_heypocket_recordings.sql +0 -0
  589. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/124_heypocket_recordings_down.sql +0 -0
  590. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/125_kg_node_type_record.sql +0 -0
  591. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/125_kg_node_type_record_down.sql +0 -0
  592. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/126_ingest_terminal_upload_source_kind.sql +0 -0
  593. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/126_ingest_terminal_upload_source_kind_down.sql +0 -0
  594. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/127_brain_v1_substrate.sql +0 -0
  595. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/127_brain_v1_substrate_down.sql +0 -0
  596. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/128_brain_drift_signals.sql +0 -0
  597. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/128_brain_drift_signals_down.sql +0 -0
  598. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/129_brain_memory_operations.sql +0 -0
  599. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/129_brain_memory_operations_down.sql +0 -0
  600. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/130_brain_findings.sql +0 -0
  601. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/130_brain_findings_down.sql +0 -0
  602. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/132_kg_pr_modifies.sql +0 -0
  603. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/132_kg_pr_modifies_down.sql +0 -0
  604. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/133_brain_v1_2_direction_schema.sql +0 -0
  605. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/133_brain_v1_2_direction_schema_down.sql +0 -0
  606. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/134_brain_journal_narrative_polished.sql +0 -0
  607. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/134_brain_journal_narrative_polished_down.sql +0 -0
  608. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/135_kg_edges_provider.sql +0 -0
  609. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/136_documents_fts.sql +0 -0
  610. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/137_promote_llm_costs.sql +0 -0
  611. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/137_promote_llm_costs_down.sql +0 -0
  612. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/138_ingest_api_keys.sql +0 -0
  613. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/138_ingest_api_keys_down.sql +0 -0
  614. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/139_ingest_pending_ingress.sql +0 -0
  615. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/139_ingest_pending_ingress_down.sql +0 -0
  616. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/140_ingest_idempotency_quota.sql +0 -0
  617. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/140_ingest_idempotency_quota_down.sql +0 -0
  618. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/141_ingest_pending_metadata.sql +0 -0
  619. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/141_ingest_pending_metadata_down.sql +0 -0
  620. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/142_llm_function_config.sql +0 -0
  621. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/142_llm_function_config_down.sql +0 -0
  622. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/143_kg_code_embeddings.sql +0 -0
  623. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/143_kg_code_embeddings_down.sql +0 -0
  624. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/144_notifications_pending_sync_index.sql +0 -0
  625. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/145_audit_log_immutable.sql +0 -0
  626. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/145_audit_log_immutable_down.sql +0 -0
  627. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/migrations/__init__.py +0 -0
  628. {marvisx_cli-0.3.5 → marvisx_cli-0.3.7b1}/setup.cfg +0 -0
@@ -5,19 +5,18 @@ Parameters
5
5
  Licensor: Emilio Martucci
6
6
  Licensed Work: MarvisX
7
7
  The Licensed Work is (c) 2026 Emilio Martucci.
8
- Additional Use Grant: You may make production use of the Licensed Work only
9
- for personal, non-commercial purposes (for example,
10
- self-hosting it for your own individual use). Any other
11
- production use is not granted here and requires a separate
12
- commercial license from the Licensor. Uses that are NOT
13
- granted include, without limitation: any commercial use;
14
- any use by, within, or for the benefit of a business,
15
- company, or other organization; offering the Licensed
16
- Work (or a modified or adapted version of it) to third
17
- parties as a hosted or managed service; and using a
18
- modified or adapted version of the Licensed Work as, or
19
- as part of, a product or service that competes with the
20
- Licensor.
8
+ Additional Use Grant: You may make production use of the Licensed Work,
9
+ including for internal business and commercial
10
+ purposes and including self-hosting the Licensed
11
+ Work for your own use, provided that you may not
12
+ provide the Licensed Work to third parties as a
13
+ Hosted or Managed Service. A "Hosted or Managed
14
+ Service" is a commercial offering that gives third
15
+ parties (other than your employees and contractors)
16
+ access to the substantial functionality of the
17
+ Licensed Work, or of a modified or derived version
18
+ of it, or that otherwise competes with a product or
19
+ service the Licensor offers using the Licensed Work.
21
20
  Change Date: 2030-01-01
22
21
  Change License: Apache License, Version 2.0
23
22
 
@@ -10,4 +10,5 @@ recursive-include migrations *.sql
10
10
  recursive-include core/scripts/install_hooks *.sh *.json *.py
11
11
  recursive-include core/api/templates *.md *.j2
12
12
  recursive-include core/api/mcp/tools/workflow_playbooks *.md
13
+ recursive-include core/cli/guides *.md
13
14
  recursive-include projects/_template *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: marvisx-cli
3
- Version: 0.3.5
3
+ Version: 0.3.7b1
4
4
  Summary: MarvisX OSS — agent-native company-brain CLI runtime (init, status, brief, triage)
5
5
  Author: MarvisX maintainers
6
6
  License: BSL-1.1
@@ -31,6 +31,7 @@ Requires-Dist: click>=8
31
31
  Requires-Dist: pydantic>=2.5
32
32
  Requires-Dist: pydantic-settings>=2.7.0
33
33
  Requires-Dist: PyYAML>=6
34
+ Requires-Dist: platformdirs>=4.0
34
35
  Requires-Dist: cryptography>=42
35
36
  Requires-Dist: fastapi>=0.115.0
36
37
  Requires-Dist: slowapi>=0.1.9
@@ -0,0 +1,124 @@
1
+ # Marvis
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/marvisx-cli.svg)](https://pypi.org/project/marvisx-cli/) [![License: BSL 1.1](https://img.shields.io/badge/license-BSL%201.1-blue.svg)](LICENSE) [![Change Date: Apache-2.0 2030](https://img.shields.io/badge/change%20date-Apache--2.0%20(2030)-lightgrey.svg)](LICENSE)
4
+
5
+ **The Company Brain your agents install.** Use Claude Code, or whatever coding agent you run, to manage projects and coordinate your agents, not just write code. Marvis captures what your agents do as they work, structures it into a cross-project Knowledge Graph, and hands it back to them, so your work stays on track and the system learns from it. Self-hosted, EU-resident, with a tamper-evident audit log.
6
+
7
+ **Open-core and free to run.** Marvis is the free core: you self-host it, read the source, fork it, audit it, at no cost. MarvisX is the commercial tier on top of the same brain: multi-department teams, data sovereignty and managed hosting, and autonomous, hands-off-the-keyboard operation. Marvis is what you install today; MarvisX is what you reach for when a single self-hosted instance is no longer enough.
8
+
9
+ ## Install
10
+
11
+ Marvis runs as a CLI your agent drives. Install it, then let the agent you already use take it from there:
12
+
13
+ ```bash
14
+ uv tool install marvisx-cli
15
+ marvis init
16
+ ```
17
+
18
+ `marvis init` scaffolds the project and installs the governance hooks, then exposes the MCP surface to your agent. Python 3.10–3.13; on 3.14, pin the interpreter: `uv tool install --python 3.13 marvisx-cli`. No `uv` yet? `curl -LsSf https://astral.sh/uv/install.sh | sh`.
19
+
20
+ To run the full Console + API stack yourself, see [Self-hosting the full stack](#self-hosting-the-full-stack).
21
+
22
+ ## What it does, in plain terms
23
+
24
+ - **Your agents stop forgetting.** Decisions, specs, playbooks, learnings and mistakes are captured as a side effect of the work your agents already do, not retyped by hand.
25
+ - **Your work stays on track.** A reflective Brain layer compares what agents produce against your intent and surfaces drift early, before it compounds across sessions.
26
+ - **One brain, many projects and teams.** A cross-project Knowledge Graph links decisions, code and documents, so an agent working in one project can see what was decided in another.
27
+ - **Governed by default.** Constitution rules enforced at the hook level, plus a foreign-key-immutable audit log: every action traces back to the human who approved it.
28
+ - **It lives in your terminal, not a dashboard.** An agent-native MCP surface keeps your existing Claude Code / Codex / Cursor as the place you work.
29
+
30
+ ## Under the hood
31
+
32
+ - **Cross-project Knowledge Graph** with 17 deterministic edge types covering code, work-chain artifacts, knowledge-chain documents, cross-project references, and bridge edges. Canonical IDs follow `{prefix}:{kind}:{slug}`.
33
+ - **Append-only audit log** (foreign-key + trigger enforced) with provenance pinned at the SQLite level. The managed **MarvisX** tier builds on it to cover the logging surface required by EU Regulation 2024/1689 (AI Act) Article 12.
34
+ - **Brain reflection pipeline** in five layers — substrate, digest and journal, drift checker, memory operations, findings — closed by a Direction-Aware loop.
35
+ - **Constitution-enforced safety rules** enforced by deterministic hook gates and an MCP mirror for providers without native hooks.
36
+ - **Agent-native MCP surface** exposing 91 tools, callable identically from Claude Code, Codex, Gemini, OpenCode, and a web console.
37
+
38
+ ## Search and embedding quality
39
+
40
+ Marvis defaults to **IBM Granite-Embedding-97m-Multilingual-R2** self-hosted via ONNX, blended with SQLite BM25 keyword search through Reciprocal Rank Fusion. Backend is selectable through `EMBEDDING_MODE`.
41
+
42
+ This is a deliberate tradeoff: EU residency, self-hosting, and zero external embedding cost come at the cost of retrieval quality that is below commercial managed embedding providers. See [`docs/SEARCH-QUALITY.md`](docs/SEARCH-QUALITY.md) for the benchmark numbers, affected workflows, mitigations available today, and the Phase 2 fine-tune roadmap.
43
+
44
+ ## License posture
45
+
46
+ - **Free to self-host and use internally**, including for commercial purposes. Code is **source-available** under the **Business Source License 1.1**; a paid license is required only to offer Marvis to third parties as a hosted or managed service. The change date automatically converts the code to **Apache License 2.0** four years after release.
47
+ - Documentation and architectural patterns: **CC-BY 4.0**.
48
+
49
+ This is open-core, not OSI open source: the core is free to run, read and fork, and the BSL holds back only competing commercial-as-a-service use until the change date. GitHub does not recognize the BSL and labels the repo `NOASSERTION`; the authoritative terms are in [`LICENSE`](LICENSE).
50
+
51
+ ## Architecture map
52
+
53
+ The system groups capabilities into eight functional domains (`M1 Capture`, `M2 Index`, `M3 Retrieve`, `M4 Reflect`, `M5 Act`, `M6 Agent-native I/O`, `M7 Compliance`, `M8 Productization`). The Knowledge Graph stitches them together with canonical IDs and an audit chain.
54
+
55
+ The full architectural description is the MarvisX preprint on Zenodo: [`10.5281/zenodo.20341860`](https://doi.org/10.5281/zenodo.20341860).
56
+
57
+ ## Repository layout
58
+
59
+ ```
60
+ core/
61
+ ├── api/ # FastAPI service: KG, ingest, brain, MCP transport
62
+ ├── console/ # Next.js web console
63
+ ├── kb/ # Project-local knowledge base templates
64
+ ├── mcp-pir/ # MCP server (stdio) exposing the 91-tool surface
65
+ └── scripts/ # Deployment, migration, and operational scripts
66
+
67
+ deploy/
68
+ └── _template/ # Reference deployment template
69
+ # (Docker Compose + environment scaffolding)
70
+ ```
71
+
72
+ ## Self-hosting the full stack
73
+
74
+ The CLI above runs Marvis against a local SQLite database. To run the full Console + API stack yourself, use the reference Docker Compose deployment. Clone the repository, copy `deploy/_template/.env.example` to `.env`, populate the required secrets, and bring the stack up:
75
+
76
+ ```bash
77
+ cp deploy/_template/.env.example deploy/_template/.env
78
+ cd deploy/_template/
79
+ docker compose up -d
80
+ ```
81
+
82
+ The Console becomes available on the configured `CONSOLE_PORT` and the API on the configured `API_PORT`. Detailed first-run instructions are inside the deployment template.
83
+
84
+ ## MCP surface
85
+
86
+ Marvis ships an MCP server exposing 91 tools across 11 categories: project and session context, tasks, handoffs, semantic search, learnings, costs, pull requests, knowledge graph queries, ingest triage, brain reflection layer, and audit-and-monitoring controls.
87
+
88
+ The same surface is used by autonomous agents and by humans through the web console. The intent is parity: any action a user can take through the console, an agent can also take through MCP, and the reverse.
89
+
90
+ ## Single-user local runtime (`MARVIS_OSS_LOCAL`)
91
+
92
+ The MCP server runs in-process: it calls the same use_cases the HTTP API calls, against the local SQLite database, with no uvicorn and no Node bridge. In this single-user mode there is no HTTP API in front of the database, so the HTTP audit chokepoint (which in the managed deployment forces every mutation through the API) does not exist.
93
+
94
+ Audit is still recorded: the extracted use_cases write the audit log themselves (`core/api/use_cases/{tasks,pull_requests,audit}.py`), so a mutation issued through MCP still produces an audit row at the use_case level. What is lost is only the additional HTTP-surface chokepoint.
95
+
96
+ Setting `MARVIS_OSS_LOCAL=1` (truthy: `1`/`true`/`yes`/`on`) makes the `block-db-direct-write` safety rule **advisory** — direct writes to a Marvis SQLite database are allowed with a warning instead of being blocked. When the variable is unset or falsey the rule is unchanged: direct DB writes are blocked fail-closed, exactly as in the managed deployment. This trade-off is intentional for single-user self-hosting and never weakens the default.
97
+
98
+ **No-fork guarantee.** The HTTP API and the MCP server are not two implementations: both are thin adapters over the same `core/api/use_cases`, differing only in how they fill the per-call `CallerContext`. The proof is the API test suite staying green after the extraction — the same behaviour, exercised through the HTTP surface, over the identical use_cases the MCP server calls.
99
+
100
+ ## Telemetry
101
+
102
+ Marvis sends anonymous, opt-out usage telemetry to help improve it: coarse event counts plus version and OS buckets, tied to a random install id (a plain UUID, never derived from your machine, user, or email). It never sends file content, project data, or personal information.
103
+
104
+ Turn it off at any time:
105
+
106
+ ```bash
107
+ marvis telemetry off
108
+ ```
109
+
110
+ Or per environment: `MARVIS_TELEMETRY=0`, the universal `DO_NOT_TRACK=1`, or `telemetry: false` in `~/.marvis/settings.yaml`. With `MARVIS_TELEMETRY=log`, Marvis prints exactly what it would send to stderr and transmits nothing.
111
+
112
+ ## Documentation
113
+
114
+ - [`docs/SEARCH-QUALITY.md`](docs/SEARCH-QUALITY.md) — search quality expectations, affected workflows, and mitigations
115
+
116
+ ## Contributing
117
+
118
+ Issues and bug reports are welcome through the repository tracker.
119
+
120
+ ## References
121
+
122
+ - Preprint (Zenodo): [`10.5281/zenodo.20341860`](https://doi.org/10.5281/zenodo.20341860)
123
+ - License (code): Business Source License 1.1, change date converts to Apache License 2.0 four years after release
124
+ - License (documentation): CC-BY 4.0
@@ -8,6 +8,8 @@ from typing import Literal
8
8
  from pydantic import AliasChoices, Field, SecretStr
9
9
  from pydantic_settings import BaseSettings, SettingsConfigDict
10
10
 
11
+ from core.platform import current_user, db_default_path
12
+
11
13
  # Prod (Hetzner/Docker) ships the vec0 loadable at this path; it stays the
12
14
  # final fallback so prod keeps working unchanged.
13
15
  _VEC0_PATH_PROD_DEFAULT = "/data/pir/lib/vec0"
@@ -70,9 +72,22 @@ class Settings(BaseSettings):
70
72
  ),
71
73
  )
72
74
  db_path: str = Field(
73
- default="console.db",
75
+ # Fallback when no MARVIS_DB_PATH/PIR_DB_PATH/DB_PATH env is set: the
76
+ # platformdirs data root (was a CWD-relative "console.db" that opened a
77
+ # different DB per launch directory — split-brain, and on Windows a
78
+ # nonsense root). The env aliases still win via pydantic; this factory
79
+ # runs ONLY when none are set.
80
+ default_factory=lambda: str(db_default_path()),
74
81
  validation_alias=AliasChoices("MARVIS_DB_PATH", "PIR_DB_PATH", "DB_PATH"),
75
82
  )
83
+ db_backup_dir: str = Field(
84
+ # Where pre-migration / pre-rebuild console.db snapshots land. Empty (the
85
+ # OSS default) keeps them next to the DB. In a managed deployment set this
86
+ # to a roomy data volume: the snapshots are full DB copies (>1GB) and a
87
+ # couple of them fill a small root disk — the recurring 90%-full cause.
88
+ default="",
89
+ validation_alias=AliasChoices("MARVIS_DB_BACKUP_DIR", "PIR_DB_BACKUP_DIR"),
90
+ )
76
91
  cookie_domain: str | None = Field(default=None, alias="COOKIE_DOMAIN")
77
92
  cors_origins_prod: list[str] = Field(
78
93
  default_factory=list,
@@ -544,16 +559,14 @@ class Settings(BaseSettings):
544
559
 
545
560
  Returns '' when GIT_RUNAS_USER is unset or already matches the current
546
561
  OS user (no privilege hop needed)."""
547
- import pwd
548
-
549
562
  user = (self.git_runas_user or "").strip()
550
563
  if not user:
551
564
  return ""
552
- try:
553
- if pwd.getpwuid(os.getuid()).pw_name == user:
554
- return ""
555
- except (KeyError, OSError):
556
- pass
565
+ # current_user() is pwd.getpwuid(os.getuid()).pw_name on POSIX (identical
566
+ # to the previous inline lookup) and getpass-based on Windows; the bare
567
+ # `import pwd` here crashed `marvis project list` on Windows.
568
+ if current_user() == user:
569
+ return ""
557
570
  return user
558
571
 
559
572
 
@@ -617,20 +617,24 @@ def run_migrations() -> None:
617
617
  and int(f.stem.split("_")[0]) > current_version
618
618
  ]
619
619
 
620
- # Pre-migration backup (enterprise rollback strategy)
621
- # Keep only last 2 backups to prevent disk fill (was unbounded)
620
+ # Pre-migration backup (enterprise rollback strategy).
621
+ # Snapshots go to settings.db_backup_dir (a roomy data volume in prod)
622
+ # when set, otherwise next to the DB. Rotation is GLOBAL keep-2 across
623
+ # ALL tags in that dir (migration `backup-v*`, kg `backup-pre-rebuild-*`,
624
+ # etc.) — full DB copies are >1GB, so only the two newest are retained.
622
625
  if pending:
623
- backup_path = f"{settings.db_path}.backup-v{current_version}"
626
+ db_name = os.path.basename(settings.db_path)
627
+ backup_dir = settings.db_backup_dir or os.path.dirname(settings.db_path) or "."
628
+ backup_path = os.path.join(backup_dir, f"{db_name}.backup-v{current_version}")
624
629
  try:
630
+ os.makedirs(backup_dir, exist_ok=True)
625
631
  shutil.copy2(settings.db_path, backup_path)
626
632
  logger.info("Pre-migration backup: %s", backup_path)
627
- # Rotate: keep only the 2 most recent backups
633
+ # Rotate: keep only the 2 most recent backups (global, all tags)
628
634
  import glob
629
635
 
630
- db_dir = os.path.dirname(settings.db_path) or "."
631
- db_name = os.path.basename(settings.db_path)
632
636
  backups = sorted(
633
- glob.glob(os.path.join(db_dir, f"{db_name}.backup-v*")),
637
+ glob.glob(os.path.join(backup_dir, f"{db_name}.backup-*")),
634
638
  key=os.path.getmtime,
635
639
  )
636
640
  for old_backup in backups[:-2]:
@@ -109,6 +109,59 @@ def register(mcp) -> None:
109
109
  except ServiceError as e:
110
110
  raise_mcp_error(e)
111
111
 
112
+ @mcp.tool()
113
+ async def update_learning(
114
+ learning_id: Annotated[str, Field(min_length=1)],
115
+ title: Annotated[str, Field(min_length=1, max_length=200)] | None = None,
116
+ category: LearningCategory | None = None,
117
+ description: Annotated[str, Field(min_length=1)] | None = None,
118
+ prevention: Annotated[str, Field(min_length=1)] | None = None,
119
+ severity: LearningSeverity | None = None,
120
+ module: str | None = None,
121
+ tags: list[str] | None = None,
122
+ project: str | None = None,
123
+ ) -> dict[str, Any]:
124
+ """Update an existing learning (operator+), then re-embed it so search/check_learnings see the new content immediately.
125
+
126
+ QUANDO USARLO: il contenuto di un learning e' obsoleto/incompleto (prevention piu' precisa, severity ricalibrata, nuovo modulo) ma vuoi PRESERVARE la history. BOUNDARY: update_learning aggiorna in-place + re-embed; delete_learning cancella permanente; create_learning scrive nuovo.
127
+ QUANDO NON USARLO: NOT per un learning nuovo -> usa create_learning. NOT per azzerare un campo a null: la superficie MCP NON puo' settare null (omettere un campo lo lascia invariato) -> usa l'HTTP PATCH se devi pulire un campo.
128
+ RESTITUISCE: il learning aggiornato {id, title, category, severity, prevention, tags, module, project, updated_at} — gia' ri-embeddato (retrievable by meaning, non solo keyword)."""
129
+ fields = {
130
+ k: v
131
+ for k, v in {
132
+ "title": title,
133
+ "category": category,
134
+ "description": description,
135
+ "prevention": prevention,
136
+ "severity": severity,
137
+ "module": module,
138
+ "tags": tags,
139
+ "project": project,
140
+ }.items()
141
+ if v is not None
142
+ }
143
+ try:
144
+ async with acquire_write_db(label="mcp.update_learning") as db:
145
+ result = await learnings_uc.update_learning(
146
+ LOCAL_CTX, db, learning_id=learning_id, fields=fields
147
+ )
148
+ # Writer lock released: re-embed-on-write (mirror create_learning) so the
149
+ # updated content is retrievable by meaning immediately, not stale until
150
+ # a manual reindex.
151
+ await mcp_embed_learning(
152
+ learning_id=result.id,
153
+ title=result.title,
154
+ description=result.description,
155
+ category=result.category,
156
+ severity=result.severity,
157
+ prevention=result.prevention,
158
+ project=result.project,
159
+ workspace_id=LOCAL_CTX.workspace_id,
160
+ )
161
+ return dump(result)
162
+ except ServiceError as e:
163
+ raise_mcp_error(e)
164
+
112
165
  @mcp.tool()
113
166
  async def list_learnings(
114
167
  project: str | None = None,
@@ -18,7 +18,6 @@ VALID_STATUSES = {
18
18
  VALID_PRIORITIES = {"high", "medium", "low"}
19
19
  VALID_KINDS = {"normal", "idea"}
20
20
  VALID_SOURCES = {
21
- "reflectx_proposal",
22
21
  "telegram",
23
22
  "manual",
24
23
  "session",
@@ -51,7 +50,7 @@ class TaskCreateRequest(BaseModel):
51
50
  priority: str = Field("medium", pattern=r"^(high|medium|low)$")
52
51
  source: str = Field(
53
52
  ...,
54
- pattern=r"^(reflectx_proposal|telegram|manual|session|console|rem_proposal)$",
53
+ pattern=r"^(telegram|manual|session|console|rem_proposal)$",
55
54
  )
56
55
  source_ref: str | None = Field(None, max_length=500)
57
56
  owner_id: str | None = Field(
@@ -283,7 +283,20 @@ async def _execute_cycle(
283
283
  event_count = 0
284
284
  journal_count = 0
285
285
 
286
- collectors = collectors if collectors is not None else registered_collectors()
286
+ if collectors is None:
287
+ collectors = registered_collectors()
288
+ if not collectors:
289
+ # Standalone runtime (`marvis brain run` / brain_cycles_recompute via
290
+ # the CLI + stdio MCP) never runs the API lifespan startup hook that
291
+ # registers the source collectors, so the registry is empty and the
292
+ # cycle would silently collect 0 events even with in-window data
293
+ # (issue #6). Register them lazily here so the standalone path lights
294
+ # up the same capture→reflect collectors as the API service. Idempotent
295
+ # and inert when the API already registered them at startup.
296
+ from core.api.services.brain.sources import register_all_collectors
297
+
298
+ register_all_collectors()
299
+ collectors = registered_collectors()
287
300
 
288
301
  # Cycle window resolution (bug fix 2026-05-18). When caller did not pass
289
302
  # explicit window bounds (legacy periodic path), default to the legacy
@@ -29,6 +29,7 @@ import shutil
29
29
  import sys
30
30
  from typing import Any
31
31
 
32
+ from core.platform import secure_path
32
33
  from core.telemetry import client as _tc # canonical ~/.marvis + settings.yaml reader
33
34
 
34
35
  _RUN_INTERVAL_S = 24 * 3600
@@ -71,10 +72,7 @@ def _mark_ran(now: float) -> None:
71
72
  path = _last_run_path()
72
73
  path.parent.mkdir(parents=True, exist_ok=True)
73
74
  path.write_text(f"{now:.0f}\n", encoding="utf-8")
74
- try:
75
- os.chmod(path, 0o600)
76
- except OSError:
77
- pass
75
+ secure_path(path, mode=0o600)
78
76
  except Exception: # noqa: BLE001
79
77
  pass
80
78
 
@@ -35,10 +35,13 @@ import sys
35
35
  from pathlib import Path
36
36
  from typing import Any
37
37
 
38
+ from core.platform import current_uid
39
+
38
40
  # launchd Label / systemd unit base / cron marker — one identity across backends.
39
41
  _LABEL = "com.marvisx.brain"
40
42
  _UNIT = "marvis-brain"
41
43
  _CRON_MARKER = "# marvis-brain"
44
+ _SCHTASKS_TN = "MarvisX Brain" # Windows Task Scheduler task name
42
45
 
43
46
  # Default daily fire time (local), off-peak.
44
47
  _HOUR = 3
@@ -75,11 +78,11 @@ def _run(cmd: list[str], *, input_text: str | None = None) -> tuple[int, str, st
75
78
 
76
79
 
77
80
  def detect_backend() -> str:
78
- """Return ``launchd`` | ``systemd`` | ``cron`` | ``unsupported``."""
81
+ """Return ``launchd`` | ``systemd`` | ``cron`` | ``schtasks`` | ``unsupported``."""
79
82
  if sys.platform == "darwin":
80
83
  return "launchd"
81
84
  if sys.platform.startswith("win"):
82
- return "unsupported"
85
+ return "schtasks"
83
86
  if shutil.which("systemctl"):
84
87
  return "systemd"
85
88
  if shutil.which("crontab"):
@@ -93,7 +96,7 @@ def _marvis_path() -> str | None:
93
96
  if exe:
94
97
  return exe
95
98
  argv0 = sys.argv[0] if sys.argv else ""
96
- if argv0.endswith(("marvis", "marvis-init")) and os.path.isfile(argv0):
99
+ if argv0.endswith(("marvis", "marvis.exe", "marvis-init", "marvis-init.exe")) and os.path.isfile(argv0):
97
100
  return os.path.abspath(argv0)
98
101
  return None
99
102
 
@@ -189,7 +192,7 @@ def _launchd_enable() -> dict[str, Any]:
189
192
  plist = _launchd_plist_path()
190
193
  plist.parent.mkdir(parents=True, exist_ok=True)
191
194
  plist.write_text(plist_text(marvis), encoding="utf-8")
192
- domain = f"gui/{os.getuid()}"
195
+ domain = f"gui/{current_uid()}"
193
196
  # Idempotent: bootout an existing instance first (ignore failure), then bootstrap.
194
197
  _run(["launchctl", "bootout", f"{domain}/{_LABEL}"])
195
198
  rc, _out, err = _run(["launchctl", "bootstrap", domain, str(plist)])
@@ -203,7 +206,7 @@ def _launchd_enable() -> dict[str, Any]:
203
206
 
204
207
  def _launchd_disable() -> dict[str, Any]:
205
208
  plist = _launchd_plist_path()
206
- rc, _out, err = _run(["launchctl", "bootout", f"gui/{os.getuid()}/{_LABEL}"])
209
+ rc, _out, err = _run(["launchctl", "bootout", f"gui/{current_uid()}/{_LABEL}"])
207
210
  removed = False
208
211
  if plist.is_file():
209
212
  plist.unlink()
@@ -214,7 +217,7 @@ def _launchd_disable() -> dict[str, Any]:
214
217
 
215
218
  def _launchd_status() -> dict[str, Any]:
216
219
  plist = _launchd_plist_path()
217
- rc, _out, _err = _run(["launchctl", "print", f"gui/{os.getuid()}/{_LABEL}"])
220
+ rc, _out, _err = _run(["launchctl", "print", f"gui/{current_uid()}/{_LABEL}"])
218
221
  return {
219
222
  "backend": "launchd",
220
223
  "enabled": rc == 0,
@@ -335,13 +338,68 @@ def _cron_status() -> dict[str, Any]:
335
338
  return {"backend": "cron", "enabled": present}
336
339
 
337
340
 
341
+ # ---------------------------------------------------------------------------
342
+ # schtasks backend (Windows Task Scheduler)
343
+ # ---------------------------------------------------------------------------
344
+
345
+
346
+ def schtasks_argv_create(
347
+ marvis_path: str, *, hour: int = _HOUR, minute: int = _MINUTE, tn: str = _SCHTASKS_TN
348
+ ) -> list[str]:
349
+ """Build the ``schtasks /create`` argv (PURE — unit-tested).
350
+
351
+ ``/tr`` is ONE argv element; the program path keeps its OWN inner quotes so a
352
+ space in ``%USERPROFILE%`` (e.g. ``C:\\Users\\Marsida Curaj\\...``) survives Task
353
+ Scheduler parsing. ``_run`` passes a list (no shell), so subprocess does the
354
+ OUTER quoting via ``list2cmdline``; this builder owns only the inner ``/tr``.
355
+ ``/f`` force-overwrites = idempotent; no ``/ru`` = current user, no admin.
356
+ """
357
+ tr = f'"{marvis_path}" brain run --mode full'
358
+ return [
359
+ "schtasks", "/create", "/tn", tn, "/tr", tr,
360
+ "/sc", "DAILY", "/st", f"{hour:02d}:{minute:02d}", "/f",
361
+ ]
362
+
363
+
364
+ def _schtasks_enable() -> dict[str, Any]:
365
+ marvis = _marvis_path()
366
+ if not marvis:
367
+ return {"backend": "schtasks", "ok": False, "error": "marvis not found on PATH"}
368
+ rc, _out, err = _run(schtasks_argv_create(marvis))
369
+ # schtasks can refuse on a password-protected / Microsoft-account user without
370
+ # stored creds; never crash — the opportunistic on-invocation upkeep is the net.
371
+ return {
372
+ "backend": "schtasks",
373
+ "ok": rc == 0,
374
+ "task_name": _SCHTASKS_TN,
375
+ "error": err.strip() if rc != 0 else None,
376
+ "warning": (
377
+ None
378
+ if rc == 0
379
+ else "could not register the Windows scheduled task; the opportunistic "
380
+ "on-invocation upkeep still runs whenever you use marvis"
381
+ ),
382
+ }
383
+
384
+
385
+ def _schtasks_disable() -> dict[str, Any]:
386
+ # rc!=0 when the task does not exist — still a successful disable.
387
+ rc, _out, _err = _run(["schtasks", "/delete", "/tn", _SCHTASKS_TN, "/f"])
388
+ return {"backend": "schtasks", "ok": True, "deleted_rc": rc}
389
+
390
+
391
+ def _schtasks_status() -> dict[str, Any]:
392
+ rc, _out, _err = _run(["schtasks", "/query", "/tn", _SCHTASKS_TN])
393
+ return {"backend": "schtasks", "enabled": rc == 0}
394
+
395
+
338
396
  # ---------------------------------------------------------------------------
339
397
  # Public dispatch
340
398
  # ---------------------------------------------------------------------------
341
399
 
342
- _ENABLE = {"launchd": _launchd_enable, "systemd": _systemd_enable, "cron": _cron_enable}
343
- _DISABLE = {"launchd": _launchd_disable, "systemd": _systemd_disable, "cron": _cron_disable}
344
- _STATUS = {"launchd": _launchd_status, "systemd": _systemd_status, "cron": _cron_status}
400
+ _ENABLE = {"launchd": _launchd_enable, "systemd": _systemd_enable, "cron": _cron_enable, "schtasks": _schtasks_enable}
401
+ _DISABLE = {"launchd": _launchd_disable, "systemd": _systemd_disable, "cron": _cron_disable, "schtasks": _schtasks_disable}
402
+ _STATUS = {"launchd": _launchd_status, "systemd": _systemd_status, "cron": _cron_status, "schtasks": _schtasks_status}
345
403
 
346
404
 
347
405
  def enable(cadence: str = "daily") -> dict[str, Any]: