clsplusplus 7.4.0__tar.gz → 7.19.0__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 (285) hide show
  1. {clsplusplus-7.4.0/src/clsplusplus.egg-info → clsplusplus-7.19.0}/PKG-INFO +168 -58
  2. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/README.md +160 -49
  3. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/pyproject.toml +8 -9
  4. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/__init__.py +9 -1
  5. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/abuse_guard.py +82 -5
  6. clsplusplus-7.19.0/src/clsplusplus/actor_critic.py +150 -0
  7. clsplusplus-7.19.0/src/clsplusplus/admin_kpis.py +161 -0
  8. clsplusplus-7.19.0/src/clsplusplus/agent_orchestrator.py +697 -0
  9. clsplusplus-7.19.0/src/clsplusplus/agent_routes.py +535 -0
  10. clsplusplus-7.19.0/src/clsplusplus/agent_scheduler.py +166 -0
  11. clsplusplus-7.19.0/src/clsplusplus/agents/__init__.py +0 -0
  12. clsplusplus-7.19.0/src/clsplusplus/agents/bundle_optimizer_agent.py +74 -0
  13. clsplusplus-7.19.0/src/clsplusplus/agents/bundle_pricing_agent.py +32 -0
  14. clsplusplus-7.19.0/src/clsplusplus/agents/competitive_bundle_agent.py +39 -0
  15. clsplusplus-7.19.0/src/clsplusplus/agents/dynamic_pricing_agent.py +68 -0
  16. clsplusplus-7.19.0/src/clsplusplus/agents/eng_status.py +98 -0
  17. clsplusplus-7.19.0/src/clsplusplus/agents/marketing_agent.py +758 -0
  18. clsplusplus-7.19.0/src/clsplusplus/agents/orchestrator.py +238 -0
  19. clsplusplus-7.19.0/src/clsplusplus/agents/psychological_pricing.py +324 -0
  20. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/api.py +980 -66
  21. clsplusplus-7.19.0/src/clsplusplus/autopilot_routes.py +59 -0
  22. clsplusplus-7.19.0/src/clsplusplus/autopilot_service.py +279 -0
  23. clsplusplus-7.19.0/src/clsplusplus/bundle_optimizer.py +165 -0
  24. clsplusplus-7.19.0/src/clsplusplus/bundle_rl.py +178 -0
  25. clsplusplus-7.19.0/src/clsplusplus/bundle_store.py +76 -0
  26. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/cli.py +187 -15
  27. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/client.py +12 -1
  28. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/__init__.py +11 -0
  29. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/a2c_crawler.py +207 -0
  30. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/a3c_validator.py +81 -0
  31. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/competitive_ac.py +371 -0
  32. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/judge.py +67 -0
  33. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/memory_sync.py +69 -0
  34. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/news_fetcher.py +269 -0
  35. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/news_table.py +90 -0
  36. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/pipeline.py +150 -0
  37. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/position_table.py +51 -0
  38. clsplusplus-7.19.0/src/clsplusplus/competitive_intel/reliability_matrix.py +58 -0
  39. clsplusplus-7.19.0/src/clsplusplus/competitive_pricing.py +18 -0
  40. clsplusplus-7.19.0/src/clsplusplus/competitive_routes.py +199 -0
  41. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/config.py +98 -1
  42. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/cost_forecast.py +256 -32
  43. clsplusplus-7.19.0/src/clsplusplus/currency.py +163 -0
  44. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/demo_llm.py +11 -9
  45. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/demo_llm_calls.py +63 -0
  46. clsplusplus-7.19.0/src/clsplusplus/distribution.py +491 -0
  47. clsplusplus-7.19.0/src/clsplusplus/docs_routes.py +168 -0
  48. clsplusplus-7.19.0/src/clsplusplus/email_sequencer.py +213 -0
  49. clsplusplus-7.19.0/src/clsplusplus/feature_catalog.py +165 -0
  50. clsplusplus-7.19.0/src/clsplusplus/founder_alert.py +173 -0
  51. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/geo.py +11 -1
  52. clsplusplus-7.19.0/src/clsplusplus/growth_bandit.py +409 -0
  53. clsplusplus-7.19.0/src/clsplusplus/growth_funnel.py +175 -0
  54. clsplusplus-7.19.0/src/clsplusplus/help_routes.py +93 -0
  55. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/homepage_autopromote.py +5 -1
  56. clsplusplus-7.19.0/src/clsplusplus/infra_stack.py +137 -0
  57. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integration_service.py +6 -0
  58. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/local_routes.py +14 -0
  59. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/mcp_http.py +4 -1
  60. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/mcp_server.py +5 -1
  61. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/memory_phase.py +102 -18
  62. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/memory_service.py +114 -0
  63. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/billing.py +8 -1
  64. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/reconciler.py +26 -0
  65. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/middleware.py +108 -1
  66. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/models.py +6 -0
  67. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/oauth_server.py +1 -1
  68. clsplusplus-7.19.0/src/clsplusplus/outreach.py +98 -0
  69. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/pricing.py +218 -34
  70. clsplusplus-7.19.0/src/clsplusplus/pricing_ladder.py +288 -0
  71. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/pricing_models.py +11 -4
  72. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/pricing_store.py +101 -5
  73. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/razorpay_service.py +197 -12
  74. clsplusplus-7.19.0/src/clsplusplus/social_oauth.py +133 -0
  75. clsplusplus-7.19.0/src/clsplusplus/stores/agent_store.py +868 -0
  76. clsplusplus-7.19.0/src/clsplusplus/stores/competitive_store.py +400 -0
  77. clsplusplus-7.19.0/src/clsplusplus/stores/help_store.py +163 -0
  78. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/integration_store.py +13 -0
  79. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/user_store.py +632 -10
  80. clsplusplus-7.19.0/src/clsplusplus/suchi_oncall.py +402 -0
  81. clsplusplus-7.19.0/src/clsplusplus/support_autoheal.py +163 -0
  82. clsplusplus-7.19.0/src/clsplusplus/support_triage.py +174 -0
  83. clsplusplus-7.19.0/src/clsplusplus/telegram_notify.py +92 -0
  84. clsplusplus-7.19.0/src/clsplusplus/textmebot_notify.py +108 -0
  85. clsplusplus-7.19.0/src/clsplusplus/tier_bundles.py +239 -0
  86. clsplusplus-7.19.0/src/clsplusplus/tier_gates.py +119 -0
  87. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/tiers.py +3 -3
  88. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/user_service.py +32 -7
  89. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/waitlist_service.py +2 -0
  90. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/weblab_watcher.py +73 -5
  91. clsplusplus-7.19.0/src/clsplusplus/whatsapp_cli.py +107 -0
  92. clsplusplus-7.19.0/src/clsplusplus/whatsapp_notify.py +173 -0
  93. {clsplusplus-7.4.0 → clsplusplus-7.19.0/src/clsplusplus.egg-info}/PKG-INFO +168 -58
  94. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus.egg-info/SOURCES.txt +97 -0
  95. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_abuse_guard.py +131 -0
  96. clsplusplus-7.19.0/tests/test_admin_kpis.py +126 -0
  97. clsplusplus-7.19.0/tests/test_admission_control.py +75 -0
  98. clsplusplus-7.19.0/tests/test_agent_endpoints.py +275 -0
  99. clsplusplus-7.19.0/tests/test_agent_scheduler.py +116 -0
  100. clsplusplus-7.19.0/tests/test_agents.py +182 -0
  101. clsplusplus-7.19.0/tests/test_agents_e2e.py +111 -0
  102. clsplusplus-7.19.0/tests/test_autopilot.py +50 -0
  103. clsplusplus-7.19.0/tests/test_bench.py +127 -0
  104. clsplusplus-7.19.0/tests/test_benchmark_query_expansion.py +160 -0
  105. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_billing_e2e.py +4 -0
  106. clsplusplus-7.19.0/tests/test_billing_subscription.py +182 -0
  107. clsplusplus-7.19.0/tests/test_bundle_optimizer.py +39 -0
  108. clsplusplus-7.19.0/tests/test_bundle_rl.py +35 -0
  109. clsplusplus-7.19.0/tests/test_cli_commands.py +177 -0
  110. clsplusplus-7.19.0/tests/test_competitive_ac.py +76 -0
  111. clsplusplus-7.19.0/tests/test_competitive_intel.py +276 -0
  112. clsplusplus-7.19.0/tests/test_contact_log_idempotency.py +156 -0
  113. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_cost_forecast.py +68 -1
  114. clsplusplus-7.19.0/tests/test_currency.py +138 -0
  115. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_demo_llm.py +3 -1
  116. clsplusplus-7.19.0/tests/test_docs_routes.py +45 -0
  117. clsplusplus-7.19.0/tests/test_email_sequencer.py +121 -0
  118. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_extension_ui.py +4 -3
  119. clsplusplus-7.19.0/tests/test_feature_catalog.py +37 -0
  120. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_feedback_github.py +6 -1
  121. clsplusplus-7.19.0/tests/test_geo_vercel.py +33 -0
  122. clsplusplus-7.19.0/tests/test_growth_distribution.py +514 -0
  123. clsplusplus-7.19.0/tests/test_help_endpoints.py +114 -0
  124. clsplusplus-7.19.0/tests/test_infra_stack.py +72 -0
  125. clsplusplus-7.19.0/tests/test_input_validation.py +37 -0
  126. clsplusplus-7.19.0/tests/test_issue585_cli_extension_sync.py +145 -0
  127. clsplusplus-7.19.0/tests/test_longmemeval_multisession.py +110 -0
  128. clsplusplus-7.19.0/tests/test_longmemeval_routing.py +74 -0
  129. clsplusplus-7.19.0/tests/test_marketing_agent.py +423 -0
  130. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_memory_phase.py +489 -0
  131. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_memory_service.py +197 -0
  132. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_reconciler.py +39 -6
  133. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_middleware.py +49 -0
  134. clsplusplus-7.19.0/tests/test_namespace_isolation.py +37 -0
  135. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_overage_billing.py +37 -1
  136. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_pricing.py +6 -4
  137. clsplusplus-7.19.0/tests/test_pricing_pipeline.py +149 -0
  138. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_prototype_e2e.py +36 -0
  139. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_razorpay_billing.py +8 -8
  140. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_reconsolidation.py +14 -24
  141. clsplusplus-7.19.0/tests/test_schema_artifact_not_indexed.py +125 -0
  142. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_security.py +58 -0
  143. clsplusplus-7.19.0/tests/test_security_hardening.py +50 -0
  144. clsplusplus-7.19.0/tests/test_standup_gate.py +69 -0
  145. clsplusplus-7.19.0/tests/test_support_autoheal.py +157 -0
  146. clsplusplus-7.19.0/tests/test_support_endpoints.py +162 -0
  147. clsplusplus-7.19.0/tests/test_support_triage.py +244 -0
  148. clsplusplus-7.19.0/tests/test_tier_bundles.py +42 -0
  149. clsplusplus-7.19.0/tests/test_tier_gates.py +39 -0
  150. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_user_auth.py +45 -0
  151. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_weblab.py +63 -0
  152. clsplusplus-7.19.0/tests/test_whatsapp_notify.py +19 -0
  153. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/LICENSE +0 -0
  154. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/setup.cfg +0 -0
  155. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/api_usage_analytics.py +0 -0
  156. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/auth.py +0 -0
  157. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/cost_model.py +0 -0
  158. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/debug_console.py +0 -0
  159. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/demo_local.py +0 -0
  160. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/durable_log/__init__.py +0 -0
  161. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/durable_log/file_wal.py +0 -0
  162. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/durable_log/manager.py +0 -0
  163. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/durable_log/record.py +0 -0
  164. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/durable_log/replicas.py +0 -0
  165. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/email_service.py +0 -0
  166. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/embeddings.py +0 -0
  167. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/funnel_routes.py +0 -0
  168. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/health_metrics.py +0 -0
  169. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/idempotency.py +0 -0
  170. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integrations/__init__.py +0 -0
  171. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integrations/autogen.py +0 -0
  172. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integrations/crewai.py +0 -0
  173. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integrations/langgraph.py +0 -0
  174. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/integrations/llamaindex.py +0 -0
  175. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/jwt_utils.py +0 -0
  176. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/login_activity.py +0 -0
  177. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/main.py +0 -0
  178. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/memory_cycle.py +0 -0
  179. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/__init__.py +0 -0
  180. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/__main__.py +0 -0
  181. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/healthcheck.py +0 -0
  182. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/notifier.py +0 -0
  183. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/pricing.py +0 -0
  184. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/schema.py +0 -0
  185. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metering_v2/writer.py +0 -0
  186. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/metrics.py +0 -0
  187. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/namespace_resolver.py +0 -0
  188. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/permissions.py +0 -0
  189. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/plasticity.py +0 -0
  190. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/prompt_log.py +0 -0
  191. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/rate_limit.py +0 -0
  192. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/rbac_service.py +0 -0
  193. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/reconsolidation.py +0 -0
  194. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/resilience.py +0 -0
  195. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/sleep_cycle.py +0 -0
  196. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/__init__.py +0 -0
  197. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/base.py +0 -0
  198. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/chat_session_store.py +0 -0
  199. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/l0_working_buffer.py +0 -0
  200. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/l1_indexing_store.py +0 -0
  201. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/l2_schema_graph.py +0 -0
  202. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/l3_deep_recess.py +0 -0
  203. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/l3_postgres.py +0 -0
  204. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/oauth_store.py +0 -0
  205. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/rbac_store.py +0 -0
  206. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/waitlist_store.py +0 -0
  207. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stores/web_events_store.py +0 -0
  208. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/stripe_service.py +0 -0
  209. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/subscription_watchdog.py +0 -0
  210. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/temporal.py +0 -0
  211. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/test_suite.py +0 -0
  212. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/tier_resolver.py +0 -0
  213. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/topical_resonance.py +0 -0
  214. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/tracer.py +0 -0
  215. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/usage.py +0 -0
  216. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/user_embeddings.py +0 -0
  217. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/user_pulse.py +0 -0
  218. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/webhook_dispatcher.py +0 -0
  219. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/weblab.py +0 -0
  220. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/window_limits.py +0 -0
  221. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus/write_metrics.py +0 -0
  222. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus.egg-info/dependency_links.txt +0 -0
  223. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus.egg-info/entry_points.txt +0 -0
  224. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus.egg-info/requires.txt +0 -0
  225. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/src/clsplusplus.egg-info/top_level.txt +0 -0
  226. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_admin.py +0 -0
  227. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_admin_integrations_activity.py +0 -0
  228. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_admin_seed.py +0 -0
  229. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_api.py +0 -0
  230. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_api_comprehensive.py +0 -0
  231. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_api_endpoints.py +0 -0
  232. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_api_usage_analytics.py +0 -0
  233. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_auth.py +0 -0
  234. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_auth_me_api_key.py +0 -0
  235. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_autogen_memory.py +0 -0
  236. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_burst_hardening.py +0 -0
  237. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_client_sdk.py +0 -0
  238. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_config.py +0 -0
  239. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_crewai_provider.py +0 -0
  240. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_cross_llm_memory.py +0 -0
  241. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_debug_console.py +0 -0
  242. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_durable_log.py +0 -0
  243. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_embeddings.py +0 -0
  244. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_extension_cross_model_runtime.py +0 -0
  245. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_extension_integration.py +0 -0
  246. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_free_tier_lifecycle.py +0 -0
  247. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_full_api_coverage.py +0 -0
  248. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_funnel_metrics.py +0 -0
  249. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_geo_gating.py +0 -0
  250. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_health_metrics.py +0 -0
  251. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_idempotency.py +0 -0
  252. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_integration_service.py +0 -0
  253. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_integration_sync_cli_contract.py +0 -0
  254. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_langgraph_store.py +0 -0
  255. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_llamaindex_block.py +0 -0
  256. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_mcp_connect.py +0 -0
  257. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_mcp_oauth.py +0 -0
  258. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_mem0_failure_modes.py +0 -0
  259. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_memory_cycle.py +0 -0
  260. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_memory_write_no_schema_garbage.py +0 -0
  261. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_healthcheck.py +0 -0
  262. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_notifier.py +0 -0
  263. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_pricing.py +0 -0
  264. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_schema.py +0 -0
  265. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_metering_v2_writer.py +0 -0
  266. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_models.py +0 -0
  267. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_performance.py +0 -0
  268. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_plasticity.py +0 -0
  269. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_rate_limit.py +0 -0
  270. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_razorpay_subscription_webhooks.py +0 -0
  271. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_regression.py +0 -0
  272. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_resilience.py +0 -0
  273. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_sleep_cycle.py +0 -0
  274. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_stores.py +0 -0
  275. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_subscription_watchdog.py +0 -0
  276. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_tier_resolver.py +0 -0
  277. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_tiers.py +0 -0
  278. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_usage.py +0 -0
  279. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_user_embeddings.py +0 -0
  280. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_user_pulse.py +0 -0
  281. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_user_stories.py +0 -0
  282. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_waitlist.py +0 -0
  283. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_webhook_dispatcher.py +0 -0
  284. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_window_limits.py +0 -0
  285. {clsplusplus-7.4.0 → clsplusplus-7.19.0}/tests/test_write_metrics.py +0 -0
@@ -1,18 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clsplusplus
3
- Version: 7.4.0
3
+ Version: 7.19.0
4
4
  Summary: Brain-inspired, model-agnostic persistent memory for LLMs. Learn, recall, forget — like a brain. Works with OpenAI, Claude, Gemini, Llama.
5
5
  Author-email: AlphaForge AI Labs <contact@alphaforge.ai>
6
6
  Maintainer-email: Rajamohan Jabbala <contact@alphaforge.ai>
7
7
  License: Apache-2.0
8
- Project-URL: Homepage, https://github.com/rajamohan1950/CLSplusplus
9
- Project-URL: Documentation, https://github.com/rajamohan1950/CLSplusplus/wiki
10
- Project-URL: Repository, https://github.com/rajamohan1950/CLSplusplus
11
- Project-URL: Bug Tracker, https://github.com/rajamohan1950/CLSplusplus/issues
12
- Project-URL: Changelog, https://github.com/rajamohan1950/CLSplusplus/releases
13
- Project-URL: API Reference, https://github.com/rajamohan1950/CLSplusplus/blob/main/docs/API_DOCUMENTATION.md
14
- Project-URL: Source Code, https://github.com/rajamohan1950/CLSplusplus/tree/main/src
15
- Project-URL: Download, https://github.com/rajamohan1950/CLSplusplus/releases
8
+ Project-URL: Homepage, https://www.clsplusplus.com
9
+ Project-URL: Documentation, https://www.clsplusplus.com/api-docs
10
+ Project-URL: Repository, https://www.clsplusplus.com
11
+ Project-URL: Bug Tracker, https://www.clsplusplus.com/tickets
12
+ Project-URL: Changelog, https://www.clsplusplus.com
13
+ Project-URL: API Reference, https://www.clsplusplus.com/api-docs
14
+ Project-URL: Download, https://pypi.org/project/clsplusplus/
16
15
  Keywords: llm,memory,ai,persistent-memory,model-agnostic,brain,openai,anthropic,claude,gemini,langchain,continuous-learning,semantic-search,vector-database,conversational-ai,rag,context-window
17
16
  Classifier: Development Status :: 5 - Production/Stable
18
17
  Classifier: Intended Audience :: Developers
@@ -72,7 +71,7 @@ Dynamic: license-file
72
71
 
73
72
  <!-- mcp-name: io.github.rajamohan1950/cls-memory -->
74
73
  <p align="center">
75
- <img src="https://img.shields.io/badge/CLS%2B%2B-Memory%20for%20LLMs-6366f1?style=for-the-badge&logo=github" alt="CLS++" />
74
+ <img src="https://img.shields.io/badge/CLS%2B%2B-Memory%20for%20LLMs-6366f1?style=for-the-badge" alt="CLS++" />
76
75
  </p>
77
76
 
78
77
  <h1 align="center">CLS++ — Continuous Learning System++</h1>
@@ -81,11 +80,12 @@ Dynamic: license-file
81
80
  </p>
82
81
 
83
82
  <p align="center">
84
- <a href="#-quick-start">Quick Start</a> •
85
- <a href="#-architecture">Architecture</a> •
86
- <a href="#-documentation">Documentation</a> •
87
- <a href="#-deployment">Deployment</a> •
88
- <a href="#-contributing">Contributing</a>
83
+ <a href="#quick-start">Quick Start</a> •
84
+ <a href="#connect-via-mcp-claude-cursor-windsurf-chatgpt">MCP</a> •
85
+ <a href="#agent-framework-integrations">Integrations</a> •
86
+ <a href="#architecture">Architecture</a> •
87
+ <a href="#documentation">Documentation</a>
88
+ <a href="#deployment">Deployment</a>
89
89
  </p>
90
90
 
91
91
  <p align="center">
@@ -93,8 +93,8 @@ Dynamic: license-file
93
93
  <a href="https://www.npmjs.com/package/clsplusplus"><img src="https://img.shields.io/npm/v/clsplusplus?style=flat-square&label=npm&color=cb3837" alt="npm" /></a>
94
94
  <a href="https://pypi.org/project/clsplusplus/"><img src="https://img.shields.io/pypi/pyversions/clsplusplus?style=flat-square" alt="Python" /></a>
95
95
  <a href="https://www.clsplusplus.com/docs"><img src="https://img.shields.io/badge/API-Live%20at%20www.clsplusplus.com-22c55e?style=flat-square" alt="API" /></a>
96
- <a href="https://github.com/rajamohan1950/CLSplusplus/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square" alt="License" /></a>
97
- <a href="https://github.com/rajamohan1950/CLSplusplus"><img src="https://img.shields.io/badge/Patent-Oct%202025-blue?style=flat-square" alt="Patent" /></a>
96
+ <a href="https://www.clsplusplus.com"><img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square" alt="License" /></a>
97
+ <a href="https://www.clsplusplus.com"><img src="https://img.shields.io/badge/Patent-Oct%202025-blue?style=flat-square" alt="Patent" /></a>
98
98
  </p>
99
99
 
100
100
  ---
@@ -122,10 +122,24 @@ Memory is **external** to the model. **Switch models anytime.** No reset.
122
122
  ### Install
123
123
 
124
124
  ```bash
125
- pip install clsplusplus # Python (lightweight: only httpx + pydantic)
126
- npm install clsplusplus # JavaScript / TypeScript (zero dependencies)
125
+ pip install clsplusplus # Python SDK (lightweight: only httpx + pydantic)
126
+ npm install clsplusplus # JavaScript / TypeScript SDK (zero runtime deps)
127
127
  ```
128
128
 
129
+ Optional Python extras pull in framework adapters or the full server:
130
+
131
+ ```bash
132
+ pip install clsplusplus[server] # run the FastAPI server yourself
133
+ pip install clsplusplus[crewai] # CrewAI memory adapter
134
+ pip install clsplusplus[langgraph] # LangGraph memory store
135
+ pip install clsplusplus[llamaindex] # LlamaIndex memory block
136
+ pip install clsplusplus[autogen] # Microsoft AutoGen memory provider
137
+ ```
138
+
139
+ Both the PyPI and npm packages are named **`clsplusplus`** and ship the same
140
+ `Brain` API. The npm package is a real TypeScript SDK (not just a CLI) — it
141
+ mirrors the Python SDK method-for-method.
142
+
129
143
  ### Python SDK
130
144
 
131
145
  ```python
@@ -178,43 +192,128 @@ response = chat("You are a helpful assistant", "Help me with Python")
178
192
  # calls your LLM, learns from the exchange, returns response.
179
193
  ```
180
194
 
181
- ### Full API
195
+ ### Full SDK API
196
+
197
+ The `Brain` class is identical in the Python and JS/TS SDKs (the JS methods
198
+ are `async`). Constructor: `Brain(user, api_key=None, url=None)` in Python,
199
+ `new Brain(user, { apiKey, url })` in TypeScript. Both read `CLS_API_KEY` and
200
+ `CLS_BASE_URL` from the environment when not passed; `url` defaults to
201
+ `https://www.clsplusplus.com`.
182
202
 
183
203
  | Method | Description |
184
204
  |--------|-------------|
185
- | `brain.learn(fact)` | Teach a fact. Returns memory ID. |
186
- | `brain.ask(question)` | Query for relevant facts. Returns list. |
187
- | `brain.context(topic)` | Get LLM-ready context string. |
188
- | `brain.forget(fact)` | Forget by text or ID. |
189
- | `brain.absorb(text)` | Bulk-learn from document or conversation. |
190
- | `brain.who()` | Auto-generated user profile. |
191
- | `brain.correct(old, new)` | Update a belief. |
192
- | `brain.chat(message, llm)` | Full conversation handler with memory. |
193
- | `brain.teach(dict)` | Learn from structured data. |
194
- | `brain.watch(messages)` | Learn from chat message history. |
205
+ | `brain.learn(fact, **meta)` | Teach a fact. Returns memory ID. |
206
+ | `brain.ask(question, limit=5)` | Query for relevant facts. Returns list of strings. |
207
+ | `brain.context(topic="", limit=8)` | Get LLM-ready context string. |
208
+ | `brain.forget(fact_or_id)` | Forget by text or ID. Returns bool. |
209
+ | `brain.absorb(content, source="document")` | Bulk-learn from document, conversation, or list. |
210
+ | `brain.who()` | Auto-generated user profile dict. |
211
+ | `brain.correct(wrong, right)` | Update a belief (forget + learn). |
212
+ | `brain.chat(message, llm_fn=None)` | Full conversation handler with memory. |
213
+ | `brain.teach(dict)` | Learn from structured key/value data. |
214
+ | `brain.watch(messages)` | Learn from a list of chat messages. |
195
215
  | `brain.wrap(fn)` | Wrap any LLM function with auto-memory. |
216
+ | `brain.all(limit=50)` / `brain.count()` | List / count what's stored. |
217
+
218
+ Module-level one-liners (Python: `import clsplusplus as mem`; TS:
219
+ `import { learn, ask } from "clsplusplus"`) wrap a per-user `Brain`:
220
+ `learn(user, fact)`, `ask(user, question)`, `context(user, topic)`,
221
+ `forget(user, fact_or_id)`.
196
222
 
197
- ### Run the Full Server Locally
223
+ A lower-level `CLSClient` (alias `CLS`) is also exported for direct
224
+ `write` / `read` / `get_item` / `forget` / `sleep` / `health` calls against
225
+ the REST API — see the [API Reference](docs/API_DOCUMENTATION.md).
226
+
227
+ ### Connect via MCP (Claude, Cursor, Windsurf, ChatGPT)
228
+
229
+ CLS++ ships a [Model Context Protocol](https://modelcontextprotocol.io) server
230
+ exposing three tools — `recall_memories`, `store_memory`, `who_am_i` — so any
231
+ MCP client can read and write the same memory. Registry name:
232
+ `io.github.rajamohan1950/cls-memory`.
233
+
234
+ **Remote (hosted, OAuth)** — add `https://www.clsplusplus.com/mcp` as a custom
235
+ connector. The OAuth 2.1 + PKCE + Dynamic Client Registration flow handles
236
+ auth; no API key to paste.
237
+
238
+ **Local (stdio)** — run the bundled server with an API key:
198
239
 
199
240
  ```bash
200
- git clone https://github.com/rajamohan1950/CLSplusplus.git
201
- cd CLSplusplus
202
- pip install -e ".[server]"
241
+ pip install clsplusplus
242
+ # one-line install for Claude Code:
243
+ claude mcp add cls-memory \
244
+ --env CLS_API_URL=https://www.clsplusplus.com \
245
+ --env CLS_API_KEY=cls_live_xxx \
246
+ -- python3 -m clsplusplus.mcp_server
247
+ ```
248
+
249
+ Or paste this into `.claude/settings.json` (Cursor/Windsurf use the same shape
250
+ in their MCP config):
251
+
252
+ ```json
253
+ {
254
+ "mcpServers": {
255
+ "cls-memory": {
256
+ "command": "python3",
257
+ "args": ["-m", "clsplusplus.mcp_server"],
258
+ "env": {
259
+ "CLS_API_URL": "https://www.clsplusplus.com",
260
+ "CLS_API_KEY": "cls_live_xxx"
261
+ }
262
+ }
263
+ }
264
+ }
265
+ ```
266
+
267
+ The dashboard's **Connect** button (`GET /v1/mcp/connect`) mints a fresh key and
268
+ returns this exact block pre-filled. Create keys manually at
269
+ <https://www.clsplusplus.com/profile#api-keys>.
270
+
271
+ ### Agent-framework integrations
272
+
273
+ CLS++ ships native memory adapters for four agent frameworks. Each is an
274
+ optional extra and lazily imported — the base package never requires the
275
+ framework. Full setup in [docs/integrations](docs/integrations/).
203
276
 
204
- # Start infrastructure (Redis + PostgreSQL)
205
- docker compose up -d redis postgres
277
+ | Framework | Install | Class | Plugs in as |
278
+ |-----------|---------|-------|-------------|
279
+ | **CrewAI** | `pip install clsplusplus[crewai]` | `clsplusplus.integrations.crewai.CLSMemoryStorage` | `ExternalMemory(storage=...)` — [docs](docs/integrations/crewai.md) |
280
+ | **LangGraph** | `pip install clsplusplus[langgraph]` | `clsplusplus.integrations.langgraph.CLSMemoryStore` | `graph.compile(store=...)` — [docs](docs/integrations/langgraph.md) |
281
+ | **LlamaIndex** | `pip install clsplusplus[llamaindex]` | `clsplusplus.integrations.llamaindex.CLSMemoryBlock` | `Memory.from_defaults(memory_blocks=[...])` — [docs](docs/integrations/llamaindex.md) |
282
+ | **AutoGen** | `pip install clsplusplus[autogen]` | `clsplusplus.integrations.autogen.CLSMemory` | `AssistantAgent(memory=[...])` — [docs](docs/integrations/autogen.md) |
206
283
 
207
- # Start the API server
208
- uvicorn clsplusplus.api:create_app --factory --host 0.0.0.0 --port 8080
284
+ ```python
285
+ # Example: CrewAI
286
+ from crewai import Crew
287
+ from crewai.memory.external.external_memory import ExternalMemory
288
+ from clsplusplus.integrations.crewai import CLSMemoryStorage
289
+
290
+ crew = Crew(
291
+ agents=[...], tasks=[...], memory=True,
292
+ external_memory=ExternalMemory(storage=CLSMemoryStorage(user="my-crew")),
293
+ )
209
294
  ```
210
295
 
296
+ Editor integrations (Cursor, Codex, n8n) also have guides under
297
+ [docs/integrations](docs/integrations/).
298
+
299
+ ### Managed service
300
+
301
+ CLS++ runs as a fully managed service — no infrastructure to host. Install the
302
+ SDK and point it at the hosted API:
303
+
304
+ ```bash
305
+ pip install clsplusplus # or: npm install clsplusplus
306
+ ```
307
+
308
+ Get an API key and start storing memory at **[clsplusplus.com](https://www.clsplusplus.com)**.
309
+
211
310
  ---
212
311
 
213
312
  ## Try It Live
214
313
 
215
314
  **[Try the demo](https://www.clsplusplus.com)** — Tell Claude something, ask OpenAI. Same memory. No sign-up.
216
315
 
217
- The Chrome extension (Web Store, v6.0.1) captures user messages from
316
+ The Chrome extension (Web Store, v7.4.1) captures user messages from
218
317
  ChatGPT, Claude, and Gemini chat pages automatically and feeds them through
219
318
  the same memory pipeline. Host permissions: `chatgpt.com`,
220
319
  `chat.openai.com`, `claude.ai`, `gemini.google.com`. The Link Account popup
@@ -276,29 +375,32 @@ export CLS_ABUSE_WHITELIST_IPS= # comma-separated operator IPs
276
375
  Requests carrying a valid API key are exempt from auth-fail flood counting
277
376
  (see `src/clsplusplus/abuse_guard.py`).
278
377
 
279
- Product endpoints: `POST /v1/memories/encode`, `POST /v1/memories/retrieve`, `DELETE /v1/memories/forget`, `GET /v1/health/score`. See [SaaS docs](docs/SAAS_MEMORY_AS_SERVICE.md).
378
+ Product endpoints: `POST /v1/memories/encode`, `POST /v1/memories/retrieve`, `DELETE /v1/memories/forget`, `GET /v1/health/score`, `GET /v1/pricing`, `GET /v1/version`, plus the in-app support desk (`POST /v1/feedback`, `GET /v1/support/mine`, `POST /v1/support/{id}/rate`). See [SaaS docs](docs/SAAS_MEMORY_AS_SERVICE.md).
379
+
380
+ > Memory reads/writes are bound to the caller's own namespace server-side
381
+ > (`_owned_namespace_for` in `api.py`): a signed-in user can never read another
382
+ > tenant's memories by passing a namespace.
280
383
 
281
384
  ### Pricing
282
385
 
283
- CLS++ launched in India and bills in **INR via Razorpay (UPI / QR)** not
284
- USD, not Stripe. Tiers: **Pro ₹299**, **Business ₹999**, **Enterprise
285
- ₹4,999**. The pricing control plane lives inside the CLS++ memory layer
286
- itself (reserved namespace `__cls_pricing__`) and is operator-tunable at
287
- runtime via `POST /admin/pricing/config`. The default config currency,
288
- margin floor/target, infra spend, dynamic-demand toggle is seeded by
289
- `src/clsplusplus/pricing_store.py` on first read. `GET /v1/pricing` is a
386
+ CLS++ launched in India and bills via **Razorpay (UPI / QR)**. Pricing is
387
+ **country-based** Indian users are billed in **₹**, US in **$**, EU in **€**,
388
+ resolved from the request's country (`src/clsplusplus/currency.py`). Published
389
+ monthly tiers: **Pro ₹999 / $29**, **Business ₹3,999 / $99**, **Enterprise
390
+ ₹14,999 / $499**, plus a free tier. Per-tier feature bundles are optimized by
391
+ the `bundle-pricing` agent and exposed on `GET /v1/pricing`. The pricing control
392
+ plane lives inside the CLS++ memory layer itself (reserved namespace
393
+ `__cls_pricing__`), operator-tunable at runtime via `POST /admin/pricing/config`;
394
+ defaults are seeded by `src/clsplusplus/pricing_store.py`. `GET /v1/pricing` is a
290
395
  public, abuse-exempt endpoint.
291
396
 
292
397
  ---
293
398
 
294
399
  ## Deployment
295
400
 
296
- | Platform | Guide |
297
- |----------|-------|
298
- | **Render** (free tier) | [Deploy in 1 click](https://render.com/deploy?repo=https://github.com/rajamohan1950/CLSplusplus) • [Setup guide](docs/DEPLOY_RENDER.md) |
299
- | **AWS Free Tier** | [CloudFormation](infrastructure/aws/cloudformation-free-tier.yaml) • [Step-by-step](infrastructure/aws/FREE_TIER_GUIDE.md) |
300
- | **AWS** | [CloudFormation](infrastructure/aws/cloudformation.yaml) |
301
- | **Azure** | [ARM template](infrastructure/azure/arm-template.json) |
401
+ CLS++ is a managed, hosted service — there's nothing to deploy. The production
402
+ API runs at **[www.clsplusplus.com](https://www.clsplusplus.com)**; enterprise
403
+ and on-prem options are available on request.
302
404
 
303
405
  ---
304
406
 
@@ -306,7 +408,9 @@ public, abuse-exempt endpoint.
306
408
 
307
409
  | Document | Description |
308
410
  |----------|-------------|
411
+ | [Architecture Overview](docs/ARCHITECTURE.md) | Components, stores, data flow, MCP |
309
412
  | [API Reference](docs/API_DOCUMENTATION.md) | Endpoints, auth, examples |
413
+ | [Integrations](docs/integrations/) | CrewAI, LangGraph, LlamaIndex, AutoGen, Cursor, Codex, n8n |
310
414
  | [API Blueprint](docs/API_BLUEPRINT.md) | SaaS API playbook (DX, security, billing) |
311
415
  | [SaaS Strategy](docs/SAAS_MEMORY_AS_SERVICE.md) | Memory-as-a-Service, pricing |
312
416
  | [Marketplace Integration](docs/MARKETPLACE_INTEGRATION.md) | AWS, Azure, GCP, OCI |
@@ -326,10 +430,16 @@ public, abuse-exempt endpoint.
326
430
  - [x] Reconsolidation gate
327
431
  - [x] API key auth + rate limiting
328
432
  - [x] SaaS product endpoints
329
- - [x] Chrome extension (v6.0.1) capturing ChatGPT / Claude / Gemini
433
+ - [x] Chrome extension (v7.4.1) capturing ChatGPT / Claude / Gemini
434
+ - [x] Remote MCP server (OAuth 2.1 + PKCE + DCR) + stdio MCP server
435
+ - [x] Native CrewAI / LangGraph / LlamaIndex / AutoGen memory adapters
330
436
  - [x] Abuse-guard with env-tunable thresholds and operator IP whitelist
331
437
  - [x] PostHog Weblab — staged rollouts with auto-rollback (5xx > 2% or p95 > 3s)
332
- - [x] INR pricing (Razorpay / UPI) with memory-resident control plane
438
+ - [x] Country-based pricing (₹ / $ / €) + agent-optimized feature bundles (Razorpay / UPI), memory-resident control plane
439
+ - [x] In-app support desk ("Doctor") — agent-triaged feedback / bugs / questions with auto-resolution + per-user timeline
440
+ - [x] Company agent platform — `doctor-*`, `dynamic-pricing`, `bundle-pricing`, `competitive-intel`, `marketing-growth`
441
+ - [x] `cls bench` — runnable reliability reproductions (silent-loss, delete-on-conflict, dimension-switch, empty-extraction)
442
+ - [x] Per-user memory isolation (server-side namespace binding)
333
443
 
334
444
  ## Recent Architectural Decisions
335
445
 
@@ -360,9 +470,9 @@ container ships operator scripts at `/app/scripts/` (see
360
470
 
361
471
  ---
362
472
 
363
- ## Contributing
473
+ ## Support
364
474
 
365
- We welcome contributions. See [CONTRIBUTING.md](.github/CONTRIBUTING.md) and the [Wiki](https://github.com/rajamohan1950/CLSplusplus/wiki) for details.
475
+ Questions or enterprise enquiries: **[clsplusplus.com](https://www.clsplusplus.com)** or open a ticket at [clsplusplus.com/tickets](https://www.clsplusplus.com/tickets).
366
476
 
367
477
  ---
368
478
 
@@ -373,5 +483,5 @@ Provisional patent filed October 2025. Apache 2.0 (see [LICENSE](LICENSE)).
373
483
  ---
374
484
 
375
485
  <p align="center">
376
- <strong>AlphaForge AI Labs</strong> • <a href="https://github.com/rajamohan1950">Rajamohan Jabbala</a> • 2026
486
+ <strong>AlphaForge AI Labs</strong> • <a href="https://www.clsplusplus.com">clsplusplus.com</a> • 2026
377
487
  </p>
@@ -1,6 +1,6 @@
1
1
  <!-- mcp-name: io.github.rajamohan1950/cls-memory -->
2
2
  <p align="center">
3
- <img src="https://img.shields.io/badge/CLS%2B%2B-Memory%20for%20LLMs-6366f1?style=for-the-badge&logo=github" alt="CLS++" />
3
+ <img src="https://img.shields.io/badge/CLS%2B%2B-Memory%20for%20LLMs-6366f1?style=for-the-badge" alt="CLS++" />
4
4
  </p>
5
5
 
6
6
  <h1 align="center">CLS++ — Continuous Learning System++</h1>
@@ -9,11 +9,12 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- <a href="#-quick-start">Quick Start</a> •
13
- <a href="#-architecture">Architecture</a> •
14
- <a href="#-documentation">Documentation</a> •
15
- <a href="#-deployment">Deployment</a> •
16
- <a href="#-contributing">Contributing</a>
12
+ <a href="#quick-start">Quick Start</a> •
13
+ <a href="#connect-via-mcp-claude-cursor-windsurf-chatgpt">MCP</a> •
14
+ <a href="#agent-framework-integrations">Integrations</a> •
15
+ <a href="#architecture">Architecture</a> •
16
+ <a href="#documentation">Documentation</a>
17
+ <a href="#deployment">Deployment</a>
17
18
  </p>
18
19
 
19
20
  <p align="center">
@@ -21,8 +22,8 @@
21
22
  <a href="https://www.npmjs.com/package/clsplusplus"><img src="https://img.shields.io/npm/v/clsplusplus?style=flat-square&label=npm&color=cb3837" alt="npm" /></a>
22
23
  <a href="https://pypi.org/project/clsplusplus/"><img src="https://img.shields.io/pypi/pyversions/clsplusplus?style=flat-square" alt="Python" /></a>
23
24
  <a href="https://www.clsplusplus.com/docs"><img src="https://img.shields.io/badge/API-Live%20at%20www.clsplusplus.com-22c55e?style=flat-square" alt="API" /></a>
24
- <a href="https://github.com/rajamohan1950/CLSplusplus/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square" alt="License" /></a>
25
- <a href="https://github.com/rajamohan1950/CLSplusplus"><img src="https://img.shields.io/badge/Patent-Oct%202025-blue?style=flat-square" alt="Patent" /></a>
25
+ <a href="https://www.clsplusplus.com"><img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square" alt="License" /></a>
26
+ <a href="https://www.clsplusplus.com"><img src="https://img.shields.io/badge/Patent-Oct%202025-blue?style=flat-square" alt="Patent" /></a>
26
27
  </p>
27
28
 
28
29
  ---
@@ -50,10 +51,24 @@ Memory is **external** to the model. **Switch models anytime.** No reset.
50
51
  ### Install
51
52
 
52
53
  ```bash
53
- pip install clsplusplus # Python (lightweight: only httpx + pydantic)
54
- npm install clsplusplus # JavaScript / TypeScript (zero dependencies)
54
+ pip install clsplusplus # Python SDK (lightweight: only httpx + pydantic)
55
+ npm install clsplusplus # JavaScript / TypeScript SDK (zero runtime deps)
55
56
  ```
56
57
 
58
+ Optional Python extras pull in framework adapters or the full server:
59
+
60
+ ```bash
61
+ pip install clsplusplus[server] # run the FastAPI server yourself
62
+ pip install clsplusplus[crewai] # CrewAI memory adapter
63
+ pip install clsplusplus[langgraph] # LangGraph memory store
64
+ pip install clsplusplus[llamaindex] # LlamaIndex memory block
65
+ pip install clsplusplus[autogen] # Microsoft AutoGen memory provider
66
+ ```
67
+
68
+ Both the PyPI and npm packages are named **`clsplusplus`** and ship the same
69
+ `Brain` API. The npm package is a real TypeScript SDK (not just a CLI) — it
70
+ mirrors the Python SDK method-for-method.
71
+
57
72
  ### Python SDK
58
73
 
59
74
  ```python
@@ -106,43 +121,128 @@ response = chat("You are a helpful assistant", "Help me with Python")
106
121
  # calls your LLM, learns from the exchange, returns response.
107
122
  ```
108
123
 
109
- ### Full API
124
+ ### Full SDK API
125
+
126
+ The `Brain` class is identical in the Python and JS/TS SDKs (the JS methods
127
+ are `async`). Constructor: `Brain(user, api_key=None, url=None)` in Python,
128
+ `new Brain(user, { apiKey, url })` in TypeScript. Both read `CLS_API_KEY` and
129
+ `CLS_BASE_URL` from the environment when not passed; `url` defaults to
130
+ `https://www.clsplusplus.com`.
110
131
 
111
132
  | Method | Description |
112
133
  |--------|-------------|
113
- | `brain.learn(fact)` | Teach a fact. Returns memory ID. |
114
- | `brain.ask(question)` | Query for relevant facts. Returns list. |
115
- | `brain.context(topic)` | Get LLM-ready context string. |
116
- | `brain.forget(fact)` | Forget by text or ID. |
117
- | `brain.absorb(text)` | Bulk-learn from document or conversation. |
118
- | `brain.who()` | Auto-generated user profile. |
119
- | `brain.correct(old, new)` | Update a belief. |
120
- | `brain.chat(message, llm)` | Full conversation handler with memory. |
121
- | `brain.teach(dict)` | Learn from structured data. |
122
- | `brain.watch(messages)` | Learn from chat message history. |
134
+ | `brain.learn(fact, **meta)` | Teach a fact. Returns memory ID. |
135
+ | `brain.ask(question, limit=5)` | Query for relevant facts. Returns list of strings. |
136
+ | `brain.context(topic="", limit=8)` | Get LLM-ready context string. |
137
+ | `brain.forget(fact_or_id)` | Forget by text or ID. Returns bool. |
138
+ | `brain.absorb(content, source="document")` | Bulk-learn from document, conversation, or list. |
139
+ | `brain.who()` | Auto-generated user profile dict. |
140
+ | `brain.correct(wrong, right)` | Update a belief (forget + learn). |
141
+ | `brain.chat(message, llm_fn=None)` | Full conversation handler with memory. |
142
+ | `brain.teach(dict)` | Learn from structured key/value data. |
143
+ | `brain.watch(messages)` | Learn from a list of chat messages. |
123
144
  | `brain.wrap(fn)` | Wrap any LLM function with auto-memory. |
145
+ | `brain.all(limit=50)` / `brain.count()` | List / count what's stored. |
146
+
147
+ Module-level one-liners (Python: `import clsplusplus as mem`; TS:
148
+ `import { learn, ask } from "clsplusplus"`) wrap a per-user `Brain`:
149
+ `learn(user, fact)`, `ask(user, question)`, `context(user, topic)`,
150
+ `forget(user, fact_or_id)`.
124
151
 
125
- ### Run the Full Server Locally
152
+ A lower-level `CLSClient` (alias `CLS`) is also exported for direct
153
+ `write` / `read` / `get_item` / `forget` / `sleep` / `health` calls against
154
+ the REST API — see the [API Reference](docs/API_DOCUMENTATION.md).
155
+
156
+ ### Connect via MCP (Claude, Cursor, Windsurf, ChatGPT)
157
+
158
+ CLS++ ships a [Model Context Protocol](https://modelcontextprotocol.io) server
159
+ exposing three tools — `recall_memories`, `store_memory`, `who_am_i` — so any
160
+ MCP client can read and write the same memory. Registry name:
161
+ `io.github.rajamohan1950/cls-memory`.
162
+
163
+ **Remote (hosted, OAuth)** — add `https://www.clsplusplus.com/mcp` as a custom
164
+ connector. The OAuth 2.1 + PKCE + Dynamic Client Registration flow handles
165
+ auth; no API key to paste.
166
+
167
+ **Local (stdio)** — run the bundled server with an API key:
126
168
 
127
169
  ```bash
128
- git clone https://github.com/rajamohan1950/CLSplusplus.git
129
- cd CLSplusplus
130
- pip install -e ".[server]"
170
+ pip install clsplusplus
171
+ # one-line install for Claude Code:
172
+ claude mcp add cls-memory \
173
+ --env CLS_API_URL=https://www.clsplusplus.com \
174
+ --env CLS_API_KEY=cls_live_xxx \
175
+ -- python3 -m clsplusplus.mcp_server
176
+ ```
177
+
178
+ Or paste this into `.claude/settings.json` (Cursor/Windsurf use the same shape
179
+ in their MCP config):
180
+
181
+ ```json
182
+ {
183
+ "mcpServers": {
184
+ "cls-memory": {
185
+ "command": "python3",
186
+ "args": ["-m", "clsplusplus.mcp_server"],
187
+ "env": {
188
+ "CLS_API_URL": "https://www.clsplusplus.com",
189
+ "CLS_API_KEY": "cls_live_xxx"
190
+ }
191
+ }
192
+ }
193
+ }
194
+ ```
195
+
196
+ The dashboard's **Connect** button (`GET /v1/mcp/connect`) mints a fresh key and
197
+ returns this exact block pre-filled. Create keys manually at
198
+ <https://www.clsplusplus.com/profile#api-keys>.
199
+
200
+ ### Agent-framework integrations
201
+
202
+ CLS++ ships native memory adapters for four agent frameworks. Each is an
203
+ optional extra and lazily imported — the base package never requires the
204
+ framework. Full setup in [docs/integrations](docs/integrations/).
131
205
 
132
- # Start infrastructure (Redis + PostgreSQL)
133
- docker compose up -d redis postgres
206
+ | Framework | Install | Class | Plugs in as |
207
+ |-----------|---------|-------|-------------|
208
+ | **CrewAI** | `pip install clsplusplus[crewai]` | `clsplusplus.integrations.crewai.CLSMemoryStorage` | `ExternalMemory(storage=...)` — [docs](docs/integrations/crewai.md) |
209
+ | **LangGraph** | `pip install clsplusplus[langgraph]` | `clsplusplus.integrations.langgraph.CLSMemoryStore` | `graph.compile(store=...)` — [docs](docs/integrations/langgraph.md) |
210
+ | **LlamaIndex** | `pip install clsplusplus[llamaindex]` | `clsplusplus.integrations.llamaindex.CLSMemoryBlock` | `Memory.from_defaults(memory_blocks=[...])` — [docs](docs/integrations/llamaindex.md) |
211
+ | **AutoGen** | `pip install clsplusplus[autogen]` | `clsplusplus.integrations.autogen.CLSMemory` | `AssistantAgent(memory=[...])` — [docs](docs/integrations/autogen.md) |
134
212
 
135
- # Start the API server
136
- uvicorn clsplusplus.api:create_app --factory --host 0.0.0.0 --port 8080
213
+ ```python
214
+ # Example: CrewAI
215
+ from crewai import Crew
216
+ from crewai.memory.external.external_memory import ExternalMemory
217
+ from clsplusplus.integrations.crewai import CLSMemoryStorage
218
+
219
+ crew = Crew(
220
+ agents=[...], tasks=[...], memory=True,
221
+ external_memory=ExternalMemory(storage=CLSMemoryStorage(user="my-crew")),
222
+ )
137
223
  ```
138
224
 
225
+ Editor integrations (Cursor, Codex, n8n) also have guides under
226
+ [docs/integrations](docs/integrations/).
227
+
228
+ ### Managed service
229
+
230
+ CLS++ runs as a fully managed service — no infrastructure to host. Install the
231
+ SDK and point it at the hosted API:
232
+
233
+ ```bash
234
+ pip install clsplusplus # or: npm install clsplusplus
235
+ ```
236
+
237
+ Get an API key and start storing memory at **[clsplusplus.com](https://www.clsplusplus.com)**.
238
+
139
239
  ---
140
240
 
141
241
  ## Try It Live
142
242
 
143
243
  **[Try the demo](https://www.clsplusplus.com)** — Tell Claude something, ask OpenAI. Same memory. No sign-up.
144
244
 
145
- The Chrome extension (Web Store, v6.0.1) captures user messages from
245
+ The Chrome extension (Web Store, v7.4.1) captures user messages from
146
246
  ChatGPT, Claude, and Gemini chat pages automatically and feeds them through
147
247
  the same memory pipeline. Host permissions: `chatgpt.com`,
148
248
  `chat.openai.com`, `claude.ai`, `gemini.google.com`. The Link Account popup
@@ -204,29 +304,32 @@ export CLS_ABUSE_WHITELIST_IPS= # comma-separated operator IPs
204
304
  Requests carrying a valid API key are exempt from auth-fail flood counting
205
305
  (see `src/clsplusplus/abuse_guard.py`).
206
306
 
207
- Product endpoints: `POST /v1/memories/encode`, `POST /v1/memories/retrieve`, `DELETE /v1/memories/forget`, `GET /v1/health/score`. See [SaaS docs](docs/SAAS_MEMORY_AS_SERVICE.md).
307
+ Product endpoints: `POST /v1/memories/encode`, `POST /v1/memories/retrieve`, `DELETE /v1/memories/forget`, `GET /v1/health/score`, `GET /v1/pricing`, `GET /v1/version`, plus the in-app support desk (`POST /v1/feedback`, `GET /v1/support/mine`, `POST /v1/support/{id}/rate`). See [SaaS docs](docs/SAAS_MEMORY_AS_SERVICE.md).
308
+
309
+ > Memory reads/writes are bound to the caller's own namespace server-side
310
+ > (`_owned_namespace_for` in `api.py`): a signed-in user can never read another
311
+ > tenant's memories by passing a namespace.
208
312
 
209
313
  ### Pricing
210
314
 
211
- CLS++ launched in India and bills in **INR via Razorpay (UPI / QR)** not
212
- USD, not Stripe. Tiers: **Pro ₹299**, **Business ₹999**, **Enterprise
213
- ₹4,999**. The pricing control plane lives inside the CLS++ memory layer
214
- itself (reserved namespace `__cls_pricing__`) and is operator-tunable at
215
- runtime via `POST /admin/pricing/config`. The default config currency,
216
- margin floor/target, infra spend, dynamic-demand toggle is seeded by
217
- `src/clsplusplus/pricing_store.py` on first read. `GET /v1/pricing` is a
315
+ CLS++ launched in India and bills via **Razorpay (UPI / QR)**. Pricing is
316
+ **country-based** Indian users are billed in **₹**, US in **$**, EU in **€**,
317
+ resolved from the request's country (`src/clsplusplus/currency.py`). Published
318
+ monthly tiers: **Pro ₹999 / $29**, **Business ₹3,999 / $99**, **Enterprise
319
+ ₹14,999 / $499**, plus a free tier. Per-tier feature bundles are optimized by
320
+ the `bundle-pricing` agent and exposed on `GET /v1/pricing`. The pricing control
321
+ plane lives inside the CLS++ memory layer itself (reserved namespace
322
+ `__cls_pricing__`), operator-tunable at runtime via `POST /admin/pricing/config`;
323
+ defaults are seeded by `src/clsplusplus/pricing_store.py`. `GET /v1/pricing` is a
218
324
  public, abuse-exempt endpoint.
219
325
 
220
326
  ---
221
327
 
222
328
  ## Deployment
223
329
 
224
- | Platform | Guide |
225
- |----------|-------|
226
- | **Render** (free tier) | [Deploy in 1 click](https://render.com/deploy?repo=https://github.com/rajamohan1950/CLSplusplus) • [Setup guide](docs/DEPLOY_RENDER.md) |
227
- | **AWS Free Tier** | [CloudFormation](infrastructure/aws/cloudformation-free-tier.yaml) • [Step-by-step](infrastructure/aws/FREE_TIER_GUIDE.md) |
228
- | **AWS** | [CloudFormation](infrastructure/aws/cloudformation.yaml) |
229
- | **Azure** | [ARM template](infrastructure/azure/arm-template.json) |
330
+ CLS++ is a managed, hosted service — there's nothing to deploy. The production
331
+ API runs at **[www.clsplusplus.com](https://www.clsplusplus.com)**; enterprise
332
+ and on-prem options are available on request.
230
333
 
231
334
  ---
232
335
 
@@ -234,7 +337,9 @@ public, abuse-exempt endpoint.
234
337
 
235
338
  | Document | Description |
236
339
  |----------|-------------|
340
+ | [Architecture Overview](docs/ARCHITECTURE.md) | Components, stores, data flow, MCP |
237
341
  | [API Reference](docs/API_DOCUMENTATION.md) | Endpoints, auth, examples |
342
+ | [Integrations](docs/integrations/) | CrewAI, LangGraph, LlamaIndex, AutoGen, Cursor, Codex, n8n |
238
343
  | [API Blueprint](docs/API_BLUEPRINT.md) | SaaS API playbook (DX, security, billing) |
239
344
  | [SaaS Strategy](docs/SAAS_MEMORY_AS_SERVICE.md) | Memory-as-a-Service, pricing |
240
345
  | [Marketplace Integration](docs/MARKETPLACE_INTEGRATION.md) | AWS, Azure, GCP, OCI |
@@ -254,10 +359,16 @@ public, abuse-exempt endpoint.
254
359
  - [x] Reconsolidation gate
255
360
  - [x] API key auth + rate limiting
256
361
  - [x] SaaS product endpoints
257
- - [x] Chrome extension (v6.0.1) capturing ChatGPT / Claude / Gemini
362
+ - [x] Chrome extension (v7.4.1) capturing ChatGPT / Claude / Gemini
363
+ - [x] Remote MCP server (OAuth 2.1 + PKCE + DCR) + stdio MCP server
364
+ - [x] Native CrewAI / LangGraph / LlamaIndex / AutoGen memory adapters
258
365
  - [x] Abuse-guard with env-tunable thresholds and operator IP whitelist
259
366
  - [x] PostHog Weblab — staged rollouts with auto-rollback (5xx > 2% or p95 > 3s)
260
- - [x] INR pricing (Razorpay / UPI) with memory-resident control plane
367
+ - [x] Country-based pricing (₹ / $ / €) + agent-optimized feature bundles (Razorpay / UPI), memory-resident control plane
368
+ - [x] In-app support desk ("Doctor") — agent-triaged feedback / bugs / questions with auto-resolution + per-user timeline
369
+ - [x] Company agent platform — `doctor-*`, `dynamic-pricing`, `bundle-pricing`, `competitive-intel`, `marketing-growth`
370
+ - [x] `cls bench` — runnable reliability reproductions (silent-loss, delete-on-conflict, dimension-switch, empty-extraction)
371
+ - [x] Per-user memory isolation (server-side namespace binding)
261
372
 
262
373
  ## Recent Architectural Decisions
263
374
 
@@ -288,9 +399,9 @@ container ships operator scripts at `/app/scripts/` (see
288
399
 
289
400
  ---
290
401
 
291
- ## Contributing
402
+ ## Support
292
403
 
293
- We welcome contributions. See [CONTRIBUTING.md](.github/CONTRIBUTING.md) and the [Wiki](https://github.com/rajamohan1950/CLSplusplus/wiki) for details.
404
+ Questions or enterprise enquiries: **[clsplusplus.com](https://www.clsplusplus.com)** or open a ticket at [clsplusplus.com/tickets](https://www.clsplusplus.com/tickets).
294
405
 
295
406
  ---
296
407
 
@@ -301,5 +412,5 @@ Provisional patent filed October 2025. Apache 2.0 (see [LICENSE](LICENSE)).
301
412
  ---
302
413
 
303
414
  <p align="center">
304
- <strong>AlphaForge AI Labs</strong> • <a href="https://github.com/rajamohan1950">Rajamohan Jabbala</a> • 2026
415
+ <strong>AlphaForge AI Labs</strong> • <a href="https://www.clsplusplus.com">clsplusplus.com</a> • 2026
305
416
  </p>