brainzlab 0.1.1 → 0.1.3

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +6 -21
  3. data/README.md +24 -2
  4. data/lib/brainzlab/beacon/client.rb +207 -0
  5. data/lib/brainzlab/beacon/provisioner.rb +44 -0
  6. data/lib/brainzlab/beacon.rb +215 -0
  7. data/lib/brainzlab/configuration.rb +372 -32
  8. data/lib/brainzlab/context.rb +2 -3
  9. data/lib/brainzlab/cortex/cache.rb +59 -0
  10. data/lib/brainzlab/cortex/client.rb +139 -0
  11. data/lib/brainzlab/cortex/provisioner.rb +49 -0
  12. data/lib/brainzlab/cortex.rb +223 -0
  13. data/lib/brainzlab/dendrite/client.rb +230 -0
  14. data/lib/brainzlab/dendrite/provisioner.rb +44 -0
  15. data/lib/brainzlab/dendrite.rb +195 -0
  16. data/lib/brainzlab/devtools/assets/devtools.css +1106 -0
  17. data/lib/brainzlab/devtools/assets/devtools.js +322 -0
  18. data/lib/brainzlab/devtools/assets/logo.svg +6 -0
  19. data/lib/brainzlab/devtools/assets/templates/debug_panel.html.erb +500 -0
  20. data/lib/brainzlab/devtools/assets/templates/error_page.html.erb +1086 -0
  21. data/lib/brainzlab/devtools/data/collector.rb +248 -0
  22. data/lib/brainzlab/devtools/middleware/asset_server.rb +63 -0
  23. data/lib/brainzlab/devtools/middleware/database_handler.rb +177 -0
  24. data/lib/brainzlab/devtools/middleware/debug_panel.rb +126 -0
  25. data/lib/brainzlab/devtools/middleware/error_page.rb +377 -0
  26. data/lib/brainzlab/devtools/renderers/debug_panel_renderer.rb +159 -0
  27. data/lib/brainzlab/devtools/renderers/error_page_renderer.rb +98 -0
  28. data/lib/brainzlab/devtools.rb +75 -0
  29. data/lib/brainzlab/flux/buffer.rb +96 -0
  30. data/lib/brainzlab/flux/client.rb +68 -0
  31. data/lib/brainzlab/flux/provisioner.rb +57 -0
  32. data/lib/brainzlab/flux.rb +174 -0
  33. data/lib/brainzlab/instrumentation/action_mailer.rb +14 -13
  34. data/lib/brainzlab/instrumentation/active_record.rb +28 -13
  35. data/lib/brainzlab/instrumentation/aws.rb +183 -0
  36. data/lib/brainzlab/instrumentation/dalli.rb +108 -0
  37. data/lib/brainzlab/instrumentation/delayed_job.rb +27 -29
  38. data/lib/brainzlab/instrumentation/elasticsearch.rb +23 -24
  39. data/lib/brainzlab/instrumentation/excon.rb +152 -0
  40. data/lib/brainzlab/instrumentation/faraday.rb +3 -4
  41. data/lib/brainzlab/instrumentation/good_job.rb +102 -0
  42. data/lib/brainzlab/instrumentation/grape.rb +24 -24
  43. data/lib/brainzlab/instrumentation/graphql.rb +24 -23
  44. data/lib/brainzlab/instrumentation/httparty.rb +13 -14
  45. data/lib/brainzlab/instrumentation/mongodb.rb +7 -7
  46. data/lib/brainzlab/instrumentation/net_http.rb +6 -6
  47. data/lib/brainzlab/instrumentation/redis.rb +14 -21
  48. data/lib/brainzlab/instrumentation/resque.rb +114 -0
  49. data/lib/brainzlab/instrumentation/sidekiq.rb +29 -28
  50. data/lib/brainzlab/instrumentation/solid_queue.rb +194 -0
  51. data/lib/brainzlab/instrumentation/stripe.rb +163 -0
  52. data/lib/brainzlab/instrumentation/typhoeus.rb +106 -0
  53. data/lib/brainzlab/instrumentation.rb +84 -12
  54. data/lib/brainzlab/nerve/client.rb +215 -0
  55. data/lib/brainzlab/nerve/provisioner.rb +44 -0
  56. data/lib/brainzlab/nerve.rb +219 -0
  57. data/lib/brainzlab/pulse/client.rb +15 -11
  58. data/lib/brainzlab/pulse/instrumentation.rb +90 -53
  59. data/lib/brainzlab/pulse/propagation.rb +29 -29
  60. data/lib/brainzlab/pulse/provisioner.rb +12 -12
  61. data/lib/brainzlab/pulse/tracer.rb +4 -4
  62. data/lib/brainzlab/pulse.rb +14 -14
  63. data/lib/brainzlab/rails/log_formatter.rb +127 -121
  64. data/lib/brainzlab/rails/log_subscriber.rb +70 -77
  65. data/lib/brainzlab/rails/railtie.rb +96 -86
  66. data/lib/brainzlab/recall/buffer.rb +1 -1
  67. data/lib/brainzlab/recall/client.rb +14 -10
  68. data/lib/brainzlab/recall/logger.rb +16 -18
  69. data/lib/brainzlab/recall/provisioner.rb +29 -12
  70. data/lib/brainzlab/recall.rb +14 -11
  71. data/lib/brainzlab/reflex/breadcrumbs.rb +2 -2
  72. data/lib/brainzlab/reflex/client.rb +14 -10
  73. data/lib/brainzlab/reflex/provisioner.rb +12 -12
  74. data/lib/brainzlab/reflex.rb +31 -31
  75. data/lib/brainzlab/sentinel/client.rb +216 -0
  76. data/lib/brainzlab/sentinel/provisioner.rb +44 -0
  77. data/lib/brainzlab/sentinel.rb +165 -0
  78. data/lib/brainzlab/signal/client.rb +60 -0
  79. data/lib/brainzlab/signal/provisioner.rb +55 -0
  80. data/lib/brainzlab/signal.rb +136 -0
  81. data/lib/brainzlab/synapse/client.rb +288 -0
  82. data/lib/brainzlab/synapse/provisioner.rb +44 -0
  83. data/lib/brainzlab/synapse.rb +270 -0
  84. data/lib/brainzlab/utilities/circuit_breaker.rb +261 -0
  85. data/lib/brainzlab/utilities/health_check.rb +294 -0
  86. data/lib/brainzlab/utilities/log_formatter.rb +254 -0
  87. data/lib/brainzlab/utilities/rate_limiter.rb +230 -0
  88. data/lib/brainzlab/utilities.rb +17 -0
  89. data/lib/brainzlab/vault/cache.rb +80 -0
  90. data/lib/brainzlab/vault/client.rb +196 -0
  91. data/lib/brainzlab/vault/provisioner.rb +49 -0
  92. data/lib/brainzlab/vault.rb +262 -0
  93. data/lib/brainzlab/version.rb +1 -1
  94. data/lib/brainzlab/vision/client.rb +128 -0
  95. data/lib/brainzlab/vision/provisioner.rb +136 -0
  96. data/lib/brainzlab/vision.rb +155 -0
  97. data/lib/brainzlab-sdk.rb +1 -1
  98. data/lib/brainzlab.rb +112 -13
  99. data/lib/generators/brainzlab/install/install_generator.rb +29 -27
  100. metadata +60 -1
@@ -0,0 +1,195 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'dendrite/client'
4
+ require_relative 'dendrite/provisioner'
5
+
6
+ module BrainzLab
7
+ module Dendrite
8
+ class << self
9
+ # Connect a Git repository for documentation
10
+ # @param url [String] Git repository URL
11
+ # @param name [String] Optional display name
12
+ # @param branch [String] Branch to track (default: main)
13
+ # @return [Hash, nil] Repository info
14
+ #
15
+ # @example
16
+ # BrainzLab::Dendrite.connect(
17
+ # "https://github.com/org/repo",
18
+ # name: "My API",
19
+ # branch: "main"
20
+ # )
21
+ #
22
+ def connect(url, name: nil, branch: 'main', **)
23
+ return nil unless enabled?
24
+
25
+ ensure_provisioned!
26
+ return nil unless BrainzLab.configuration.dendrite_valid?
27
+
28
+ client.connect_repository(url: url, name: name, branch: branch, **)
29
+ end
30
+
31
+ # Trigger documentation sync for a repository
32
+ # @param repo_id [String] Repository ID
33
+ # @return [Boolean] True if sync started
34
+ def sync(repo_id)
35
+ return false unless enabled?
36
+
37
+ ensure_provisioned!
38
+ return false unless BrainzLab.configuration.dendrite_valid?
39
+
40
+ client.sync_repository(repo_id)
41
+ end
42
+
43
+ # Get repository info
44
+ # @param repo_id [String] Repository ID
45
+ # @return [Hash, nil] Repository details
46
+ def repository(repo_id)
47
+ return nil unless enabled?
48
+
49
+ ensure_provisioned!
50
+ return nil unless BrainzLab.configuration.dendrite_valid?
51
+
52
+ client.get_repository(repo_id)
53
+ end
54
+
55
+ # List all connected repositories
56
+ # @return [Array<Hash>] List of repositories
57
+ def repositories
58
+ return [] unless enabled?
59
+
60
+ ensure_provisioned!
61
+ return [] unless BrainzLab.configuration.dendrite_valid?
62
+
63
+ client.list_repositories
64
+ end
65
+
66
+ # Get wiki for a repository
67
+ # @param repo_id [String] Repository ID
68
+ # @return [Hash, nil] Wiki structure
69
+ def wiki(repo_id)
70
+ return nil unless enabled?
71
+
72
+ ensure_provisioned!
73
+ return nil unless BrainzLab.configuration.dendrite_valid?
74
+
75
+ client.get_wiki(repo_id)
76
+ end
77
+
78
+ # Get a specific wiki page
79
+ # @param repo_id [String] Repository ID
80
+ # @param page [String] Page slug (e.g., "models/user")
81
+ # @return [Hash, nil] Page content
82
+ def page(repo_id, page_slug)
83
+ return nil unless enabled?
84
+
85
+ ensure_provisioned!
86
+ return nil unless BrainzLab.configuration.dendrite_valid?
87
+
88
+ client.get_wiki_page(repo_id, page_slug)
89
+ end
90
+
91
+ # Semantic search across the codebase
92
+ # @param repo_id [String] Repository ID
93
+ # @param query [String] Search query
94
+ # @param limit [Integer] Max results (default: 10)
95
+ # @return [Array<Hash>] Search results
96
+ #
97
+ # @example
98
+ # results = BrainzLab::Dendrite.search(repo_id, "authentication flow")
99
+ #
100
+ def search(repo_id, query, limit: 10)
101
+ return [] unless enabled?
102
+
103
+ ensure_provisioned!
104
+ return [] unless BrainzLab.configuration.dendrite_valid?
105
+
106
+ client.search(repo_id, query, limit: limit)
107
+ end
108
+
109
+ # Ask a question about the codebase
110
+ # @param repo_id [String] Repository ID
111
+ # @param question [String] Question to ask
112
+ # @param session_id [String] Optional session for follow-up questions
113
+ # @return [Hash, nil] AI response with answer
114
+ #
115
+ # @example
116
+ # response = BrainzLab::Dendrite.ask(repo_id, "How does the payment flow work?")
117
+ # puts response[:answer]
118
+ #
119
+ def ask(repo_id, question, session_id: nil)
120
+ return nil unless enabled?
121
+
122
+ ensure_provisioned!
123
+ return nil unless BrainzLab.configuration.dendrite_valid?
124
+
125
+ client.ask(repo_id, question, session_id: session_id)
126
+ end
127
+
128
+ # Explain a file or code symbol
129
+ # @param repo_id [String] Repository ID
130
+ # @param path [String] File path
131
+ # @param symbol [String] Optional specific symbol (class, method)
132
+ # @return [Hash, nil] Explanation
133
+ #
134
+ # @example
135
+ # explanation = BrainzLab::Dendrite.explain(repo_id, "app/models/user.rb", symbol: "authenticate")
136
+ #
137
+ def explain(repo_id, path, symbol: nil)
138
+ return nil unless enabled?
139
+
140
+ ensure_provisioned!
141
+ return nil unless BrainzLab.configuration.dendrite_valid?
142
+
143
+ client.explain(repo_id, path, symbol: symbol)
144
+ end
145
+
146
+ # Generate a diagram
147
+ # @param repo_id [String] Repository ID
148
+ # @param type [Symbol] Diagram type (:class, :er, :sequence, :architecture)
149
+ # @param scope [String] Optional scope (module, class name)
150
+ # @return [Hash, nil] Mermaid diagram
151
+ #
152
+ # @example
153
+ # diagram = BrainzLab::Dendrite.diagram(repo_id, :er)
154
+ # puts diagram[:mermaid]
155
+ #
156
+ def diagram(repo_id, type:, scope: nil)
157
+ return nil unless enabled?
158
+
159
+ ensure_provisioned!
160
+ return nil unless BrainzLab.configuration.dendrite_valid?
161
+
162
+ client.generate_diagram(repo_id, type: type, scope: scope)
163
+ end
164
+
165
+ # === INTERNAL ===
166
+
167
+ def ensure_provisioned!
168
+ return if @provisioned
169
+
170
+ @provisioned = true
171
+ provisioner.ensure_project!
172
+ end
173
+
174
+ def provisioner
175
+ @provisioner ||= Provisioner.new(BrainzLab.configuration)
176
+ end
177
+
178
+ def client
179
+ @client ||= Client.new(BrainzLab.configuration)
180
+ end
181
+
182
+ def reset!
183
+ @client = nil
184
+ @provisioner = nil
185
+ @provisioned = false
186
+ end
187
+
188
+ private
189
+
190
+ def enabled?
191
+ BrainzLab.configuration.dendrite_enabled
192
+ end
193
+ end
194
+ end
195
+ end