neurostack-org 2.2.0__tar.gz → 2.2.1__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 (170) hide show
  1. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/PKG-INFO +1 -1
  2. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/pyproject.toml +1 -1
  3. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/PKG-INFO +1 -1
  4. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/cli/main.py +66 -7
  5. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/README.md +0 -0
  6. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/setup.cfg +0 -0
  7. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/__init__.py +0 -0
  8. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/config/__init__.py +0 -0
  9. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/config/brain_config.py +0 -0
  10. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/config/confidence_config.py +0 -0
  11. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/config/persona_config.py +0 -0
  12. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/config/retrieval_config.py +0 -0
  13. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/__init__.py +0 -0
  14. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/input_validator.py +0 -0
  15. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/intent_classifier.py +0 -0
  16. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/knowledge_retriever.py +0 -0
  17. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/orchestrator.py +0 -0
  18. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/reasoning_engine.py +0 -0
  19. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/core/response_formatter.py +0 -0
  20. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/factory.py +0 -0
  21. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/interfaces/__init__.py +0 -0
  22. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/interfaces/embedding.py +0 -0
  23. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/interfaces/llm.py +0 -0
  24. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/interfaces/vector_store.py +0 -0
  25. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/logging/__init__.py +0 -0
  26. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/logging/formatters.py +0 -0
  27. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/logging/logger.py +0 -0
  28. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/logging/trace.py +0 -0
  29. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/__init__.py +0 -0
  30. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/confidence.py +0 -0
  31. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/intent.py +0 -0
  32. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/persona.py +0 -0
  33. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/request.py +0 -0
  34. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/response.py +0 -0
  35. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/models/retrieval.py +0 -0
  36. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/__init__.py +0 -0
  37. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/base.py +0 -0
  38. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/intent_classifier.py +0 -0
  39. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/__init__.py +0 -0
  40. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/action.py +0 -0
  41. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/decision_recall.py +0 -0
  42. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/informational.py +0 -0
  43. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/metrics.py +0 -0
  44. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/planning.py +0 -0
  45. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/status.py +0 -0
  46. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/prompts/reasoning/summary.py +0 -0
  47. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/__init__.py +0 -0
  48. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/confidence.py +0 -0
  49. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/ranking.py +0 -0
  50. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/time.py +0 -0
  51. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/validation.py +0 -0
  52. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/brain/utils/visibility.py +0 -0
  53. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/__init__.py +0 -0
  54. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/anthropic_client.py +0 -0
  55. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/anthropic_llm.py +0 -0
  56. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/azure_openai_llm.py +0 -0
  57. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/example_vector_client.py +0 -0
  58. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/mock_embedding.py +0 -0
  59. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/mock_vector_store.py +0 -0
  60. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/openai_compatible_llm.py +0 -0
  61. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/openai_embedding.py +0 -0
  62. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/clients/retry.py +0 -0
  63. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/__init__.py +0 -0
  64. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/base.py +0 -0
  65. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/slack/__init__.py +0 -0
  66. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/slack/bot.py +0 -0
  67. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/slack/commands.py +0 -0
  68. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/slack/formatters.py +0 -0
  69. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/telegram/__init__.py +0 -0
  70. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/telegram/bot.py +0 -0
  71. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/integrations/telegram/formatters.py +0 -0
  72. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/license.py +0 -0
  73. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/logging.py +0 -0
  74. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/models/__init__.py +0 -0
  75. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/models/context.py +0 -0
  76. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/models/knowledge.py +0 -0
  77. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack/models/permission.py +0 -0
  78. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/SOURCES.txt +0 -0
  79. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/dependency_links.txt +0 -0
  80. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/entry_points.txt +0 -0
  81. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/requires.txt +0 -0
  82. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/neurostack_org.egg-info/top_level.txt +0 -0
  83. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/__init__.py +0 -0
  84. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/audit/__init__.py +0 -0
  85. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/audit/lineage.py +0 -0
  86. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/audit/logger.py +0 -0
  87. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/audit/metrics.py +0 -0
  88. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/auth/__init__.py +0 -0
  89. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/auth/oauth_manager.py +0 -0
  90. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/auth/permission_sync.py +0 -0
  91. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/auth/token_store.py +0 -0
  92. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/cli/__init__.py +0 -0
  93. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/cli/connector_manage.py +0 -0
  94. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/cli/ingest.py +0 -0
  95. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/cli/status.py +0 -0
  96. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/config/__init__.py +0 -0
  97. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/config/loader.py +0 -0
  98. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/config/pipeline_config.py +0 -0
  99. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/config/storage_config.py +0 -0
  100. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/__init__.py +0 -0
  101. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/base.py +0 -0
  102. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/csv/__init__.py +0 -0
  103. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/csv/connector.py +0 -0
  104. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/__init__.py +0 -0
  105. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/auth.py +0 -0
  106. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/calendar_connector.py +0 -0
  107. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/docs_connector.py +0 -0
  108. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/drive_connector.py +0 -0
  109. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/google_workspace/permission_mapper.py +0 -0
  110. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/jira/__init__.py +0 -0
  111. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/jira/auth.py +0 -0
  112. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/jira/config.py +0 -0
  113. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/jira/connector.py +0 -0
  114. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/jira/permission_mapper.py +0 -0
  115. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/registry.py +0 -0
  116. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/slack/__init__.py +0 -0
  117. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/slack/auth.py +0 -0
  118. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/slack/connector.py +0 -0
  119. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/slack/deduplication.py +0 -0
  120. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/connectors/slack/permission_mapper.py +0 -0
  121. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/__init__.py +0 -0
  122. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/chunker.py +0 -0
  123. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/ingestion_engine.py +0 -0
  124. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/live_data_handler.py +0 -0
  125. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/orchestrator.py +0 -0
  126. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/core/permission_engine.py +0 -0
  127. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/ingest/__init__.py +0 -0
  128. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/ingest/universal.py +0 -0
  129. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/models/__init__.py +0 -0
  130. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/models/connector_config.py +0 -0
  131. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/models/ingestion_job.py +0 -0
  132. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/models/storage.py +0 -0
  133. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/__init__.py +0 -0
  134. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/chunking/__init__.py +0 -0
  135. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/chunking/document_chunker.py +0 -0
  136. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/chunking/semantic_chunker.py +0 -0
  137. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/chunking/structured_chunker.py +0 -0
  138. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/embeddings/__init__.py +0 -0
  139. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/embeddings/embedding_client.py +0 -0
  140. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/embeddings/mock_embeddings.py +0 -0
  141. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/embeddings/openai_embeddings.py +0 -0
  142. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/normalizer.py +0 -0
  143. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processing/versioning.py +0 -0
  144. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processors/__init__.py +0 -0
  145. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processors/audio_processor.py +0 -0
  146. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processors/file_processor.py +0 -0
  147. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/processors/text_classifier.py +0 -0
  148. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/scheduling/__init__.py +0 -0
  149. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/scheduling/checkpoint.py +0 -0
  150. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/scheduling/job_queue.py +0 -0
  151. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/scheduling/rate_limiter.py +0 -0
  152. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/scheduling/scheduler.py +0 -0
  153. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/__init__.py +0 -0
  154. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/graph/__init__.py +0 -0
  155. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/graph/neo4j_store.py +0 -0
  156. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/interfaces.py +0 -0
  157. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/metadata/__init__.py +0 -0
  158. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/metadata/postgres.py +0 -0
  159. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/migrations/env.py +0 -0
  160. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/migrations/versions/f2816fb07a30_initial_schema.py +0 -0
  161. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/semantic/__init__.py +0 -0
  162. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/semantic/mock_store.py +0 -0
  163. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/semantic/pinecone_store.py +0 -0
  164. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/semantic/qdrant_store.py +0 -0
  165. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/storage/semantic/weaviate_store.py +0 -0
  166. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/utils/__init__.py +0 -0
  167. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/utils/deduplication.py +0 -0
  168. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/utils/exceptions.py +0 -0
  169. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/utils/retry.py +0 -0
  170. {neurostack_org-2.2.0 → neurostack_org-2.2.1}/src/pipeline/utils/validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: neurostack-org
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: Enterprise AI SDK — permission-aware organizational knowledge retrieval with 9 connectors, 5-stage deterministic pipeline, and universal ingestion
5
5
  Author: Tauseeq Kazi
6
6
  License: BSL-1.1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "neurostack-org"
7
- version = "2.2.0"
7
+ version = "2.2.1"
8
8
  description = "Enterprise AI SDK — permission-aware organizational knowledge retrieval with 9 connectors, 5-stage deterministic pipeline, and universal ingestion"
9
9
  authors = [{name = "Tauseeq Kazi"}]
10
10
  license = {text = "BSL-1.1"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: neurostack-org
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: Enterprise AI SDK — permission-aware organizational knowledge retrieval with 9 connectors, 5-stage deterministic pipeline, and universal ingestion
5
5
  Author: Tauseeq Kazi
6
6
  License: BSL-1.1
@@ -6,7 +6,7 @@ import subprocess
6
6
  import click
7
7
  import yaml
8
8
 
9
- VERSION = "2.2.0"
9
+ VERSION = "2.2.1"
10
10
 
11
11
  CONFIG_FILE = "neurostack.yaml"
12
12
 
@@ -395,7 +395,7 @@ def setup():
395
395
  config = {}
396
396
 
397
397
  # -- Step 1: LLM Provider ----------------------------------------------
398
- click.echo(click.style("\n -- Step 1 of 5: Choose Your AI Provider --", fg="white", bold=True))
398
+ click.echo(click.style("\n -- Step 1 of 6: Choose Your AI Provider --", fg="white", bold=True))
399
399
  click.echo(click.style(" (Pick a provider to power your AI brain)", fg="bright_black"))
400
400
 
401
401
  provider = _numbered_menu("FREE Providers (no cost to start)", [
@@ -529,7 +529,7 @@ def setup():
529
529
  click.echo(click.style(f"\n Provider: {provider} | Model: {model}", fg="green", bold=True))
530
530
 
531
531
  # -- Step 2: Database --------------------------------------------------
532
- click.echo(click.style("\n -- Step 2 of 5: Database --", fg="white", bold=True))
532
+ click.echo(click.style("\n -- Step 2 of 6: Database --", fg="white", bold=True))
533
533
  click.echo(click.style(" (Neurostack needs PostgreSQL to store data)", fg="bright_black"))
534
534
 
535
535
  db_choice = _numbered_menu("How to set up PostgreSQL?", [
@@ -553,7 +553,7 @@ def setup():
553
553
  config["database"] = {"url": db_url}
554
554
 
555
555
  # -- Step 3: Vector Store ----------------------------------------------
556
- click.echo(click.style("\n -- Step 3 of 5: Vector Store --", fg="white", bold=True))
556
+ click.echo(click.style("\n -- Step 3 of 6: Vector Store --", fg="white", bold=True))
557
557
  click.echo(click.style(" (Used for semantic search over your documents)", fg="bright_black"))
558
558
 
559
559
  vs_choice = _numbered_menu("How to set up Qdrant vector store?", [
@@ -583,7 +583,7 @@ def setup():
583
583
  }
584
584
 
585
585
  # -- Step 4: First Data Source -----------------------------------------
586
- click.echo(click.style("\n -- Step 4 of 5: Connect Your Data --", fg="white", bold=True))
586
+ click.echo(click.style("\n -- Step 4 of 6: Connect Your Data --", fg="white", bold=True))
587
587
  click.echo(click.style(" (Choose where to pull knowledge from)", fg="bright_black"))
588
588
 
589
589
  source = _numbered_menu("Connect your first data source (easiest first)", [
@@ -605,8 +605,67 @@ def setup():
605
605
  else:
606
606
  config["connectors"] = []
607
607
 
608
- # -- Step 5: Save config & summary -------------------------------------
609
- click.echo(click.style("\n -- Step 5 of 5: Save & Finish --", fg="white", bold=True))
608
+ # -- Step 5: Deploy as Bot ---------------------------------------------
609
+ click.echo(click.style("\n -- Step 5 of 6: Deploy as Bot --", fg="white", bold=True))
610
+ click.echo(click.style(" Note: Bots run only while this terminal is open.", fg="yellow"))
611
+ click.echo(click.style(" For 24/7 uptime, deploy to a server later.", fg="yellow"))
612
+ click.echo()
613
+
614
+ deploy = _numbered_menu("Where should the brain be accessible?", [
615
+ {"label": "Terminal only", "value": "terminal", "hint": "Ask questions right here -- simplest option"},
616
+ {"label": "Telegram bot", "value": "telegram", "hint": "30-second setup via @BotFather"},
617
+ {"label": "Slack bot", "value": "slack", "hint": "Needs Slack app (5 min setup)"},
618
+ {"label": "REST API", "value": "api", "hint": "For developers -- runs FastAPI server"},
619
+ {"label": "Skip for now", "value": "skip", "hint": "Set up a bot later with 'neurostack start'"},
620
+ ], default=1, allow_back=True)
621
+
622
+ if deploy == "__back__":
623
+ deploy = "skip"
624
+
625
+ config["bot"] = {"type": deploy if deploy != "skip" else None}
626
+
627
+ if deploy == "telegram":
628
+ click.echo(click.style("\n Telegram setup (30 seconds):", fg="white", bold=True))
629
+ click.echo(" 1. Open Telegram and search for @BotFather")
630
+ click.echo(" 2. Send /newbot")
631
+ click.echo(" 3. Choose a name and username for your bot")
632
+ click.echo(" 4. Copy the token BotFather gives you")
633
+ click.echo()
634
+ token = _prompt_with_skip("Telegram Bot Token")
635
+ if token:
636
+ config["bot"]["telegram_token"] = token
637
+ click.echo(click.style(" Telegram bot configured!", fg="green"))
638
+ else:
639
+ click.echo(click.style(" Skipped. Run 'neurostack start telegram' later.", fg="bright_black"))
640
+ config["bot"]["type"] = None
641
+
642
+ elif deploy == "slack":
643
+ click.echo(click.style("\n Slack setup:", fg="white", bold=True))
644
+ click.echo(" 1. Go to: https://api.slack.com/apps")
645
+ click.echo(" 2. Create New App > From scratch")
646
+ click.echo(" 3. Add scopes: channels:history, channels:read, users:read, chat:write")
647
+ click.echo(" 4. Install to workspace")
648
+ click.echo(" 5. Copy Bot User OAuth Token (xoxb-...)")
649
+ click.echo()
650
+ token = _prompt_with_skip("Slack Bot Token (xoxb-...)", hide_input=True)
651
+ if token:
652
+ config["bot"]["slack_token"] = token
653
+ click.echo(click.style(" Slack bot configured!", fg="green"))
654
+ else:
655
+ click.echo(click.style(" Skipped. Run 'neurostack start slack' later.", fg="bright_black"))
656
+ config["bot"]["type"] = None
657
+
658
+ elif deploy == "api":
659
+ config["bot"]["port"] = 8000
660
+ click.echo(click.style(" API server will run on port 8000.", fg="green"))
661
+ click.echo(" Start with: neurostack start api")
662
+
663
+ elif deploy == "terminal":
664
+ click.echo(click.style(" Terminal mode ready.", fg="green"))
665
+ click.echo(" Start with: neurostack ask")
666
+
667
+ # -- Step 6: Save config & summary -------------------------------------
668
+ click.echo(click.style("\n -- Step 6 of 6: Save & Finish --", fg="white", bold=True))
610
669
 
611
670
  config["sync"] = {
612
671
  "default_interval_minutes": 60,
File without changes
File without changes