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.
- checksums.yaml +4 -4
- data/LICENSE +6 -21
- data/README.md +24 -2
- data/lib/brainzlab/beacon/client.rb +207 -0
- data/lib/brainzlab/beacon/provisioner.rb +44 -0
- data/lib/brainzlab/beacon.rb +215 -0
- data/lib/brainzlab/configuration.rb +372 -32
- data/lib/brainzlab/context.rb +2 -3
- data/lib/brainzlab/cortex/cache.rb +59 -0
- data/lib/brainzlab/cortex/client.rb +139 -0
- data/lib/brainzlab/cortex/provisioner.rb +49 -0
- data/lib/brainzlab/cortex.rb +223 -0
- data/lib/brainzlab/dendrite/client.rb +230 -0
- data/lib/brainzlab/dendrite/provisioner.rb +44 -0
- data/lib/brainzlab/dendrite.rb +195 -0
- data/lib/brainzlab/devtools/assets/devtools.css +1106 -0
- data/lib/brainzlab/devtools/assets/devtools.js +322 -0
- data/lib/brainzlab/devtools/assets/logo.svg +6 -0
- data/lib/brainzlab/devtools/assets/templates/debug_panel.html.erb +500 -0
- data/lib/brainzlab/devtools/assets/templates/error_page.html.erb +1086 -0
- data/lib/brainzlab/devtools/data/collector.rb +248 -0
- data/lib/brainzlab/devtools/middleware/asset_server.rb +63 -0
- data/lib/brainzlab/devtools/middleware/database_handler.rb +177 -0
- data/lib/brainzlab/devtools/middleware/debug_panel.rb +126 -0
- data/lib/brainzlab/devtools/middleware/error_page.rb +377 -0
- data/lib/brainzlab/devtools/renderers/debug_panel_renderer.rb +159 -0
- data/lib/brainzlab/devtools/renderers/error_page_renderer.rb +98 -0
- data/lib/brainzlab/devtools.rb +75 -0
- data/lib/brainzlab/flux/buffer.rb +96 -0
- data/lib/brainzlab/flux/client.rb +68 -0
- data/lib/brainzlab/flux/provisioner.rb +57 -0
- data/lib/brainzlab/flux.rb +174 -0
- data/lib/brainzlab/instrumentation/action_mailer.rb +14 -13
- data/lib/brainzlab/instrumentation/active_record.rb +28 -13
- data/lib/brainzlab/instrumentation/aws.rb +183 -0
- data/lib/brainzlab/instrumentation/dalli.rb +108 -0
- data/lib/brainzlab/instrumentation/delayed_job.rb +27 -29
- data/lib/brainzlab/instrumentation/elasticsearch.rb +23 -24
- data/lib/brainzlab/instrumentation/excon.rb +152 -0
- data/lib/brainzlab/instrumentation/faraday.rb +3 -4
- data/lib/brainzlab/instrumentation/good_job.rb +102 -0
- data/lib/brainzlab/instrumentation/grape.rb +24 -24
- data/lib/brainzlab/instrumentation/graphql.rb +24 -23
- data/lib/brainzlab/instrumentation/httparty.rb +13 -14
- data/lib/brainzlab/instrumentation/mongodb.rb +7 -7
- data/lib/brainzlab/instrumentation/net_http.rb +6 -6
- data/lib/brainzlab/instrumentation/redis.rb +14 -21
- data/lib/brainzlab/instrumentation/resque.rb +114 -0
- data/lib/brainzlab/instrumentation/sidekiq.rb +29 -28
- data/lib/brainzlab/instrumentation/solid_queue.rb +194 -0
- data/lib/brainzlab/instrumentation/stripe.rb +163 -0
- data/lib/brainzlab/instrumentation/typhoeus.rb +106 -0
- data/lib/brainzlab/instrumentation.rb +84 -12
- data/lib/brainzlab/nerve/client.rb +215 -0
- data/lib/brainzlab/nerve/provisioner.rb +44 -0
- data/lib/brainzlab/nerve.rb +219 -0
- data/lib/brainzlab/pulse/client.rb +15 -11
- data/lib/brainzlab/pulse/instrumentation.rb +90 -53
- data/lib/brainzlab/pulse/propagation.rb +29 -29
- data/lib/brainzlab/pulse/provisioner.rb +12 -12
- data/lib/brainzlab/pulse/tracer.rb +4 -4
- data/lib/brainzlab/pulse.rb +14 -14
- data/lib/brainzlab/rails/log_formatter.rb +127 -121
- data/lib/brainzlab/rails/log_subscriber.rb +70 -77
- data/lib/brainzlab/rails/railtie.rb +96 -86
- data/lib/brainzlab/recall/buffer.rb +1 -1
- data/lib/brainzlab/recall/client.rb +14 -10
- data/lib/brainzlab/recall/logger.rb +16 -18
- data/lib/brainzlab/recall/provisioner.rb +29 -12
- data/lib/brainzlab/recall.rb +14 -11
- data/lib/brainzlab/reflex/breadcrumbs.rb +2 -2
- data/lib/brainzlab/reflex/client.rb +14 -10
- data/lib/brainzlab/reflex/provisioner.rb +12 -12
- data/lib/brainzlab/reflex.rb +31 -31
- data/lib/brainzlab/sentinel/client.rb +216 -0
- data/lib/brainzlab/sentinel/provisioner.rb +44 -0
- data/lib/brainzlab/sentinel.rb +165 -0
- data/lib/brainzlab/signal/client.rb +60 -0
- data/lib/brainzlab/signal/provisioner.rb +55 -0
- data/lib/brainzlab/signal.rb +136 -0
- data/lib/brainzlab/synapse/client.rb +288 -0
- data/lib/brainzlab/synapse/provisioner.rb +44 -0
- data/lib/brainzlab/synapse.rb +270 -0
- data/lib/brainzlab/utilities/circuit_breaker.rb +261 -0
- data/lib/brainzlab/utilities/health_check.rb +294 -0
- data/lib/brainzlab/utilities/log_formatter.rb +254 -0
- data/lib/brainzlab/utilities/rate_limiter.rb +230 -0
- data/lib/brainzlab/utilities.rb +17 -0
- data/lib/brainzlab/vault/cache.rb +80 -0
- data/lib/brainzlab/vault/client.rb +196 -0
- data/lib/brainzlab/vault/provisioner.rb +49 -0
- data/lib/brainzlab/vault.rb +262 -0
- data/lib/brainzlab/version.rb +1 -1
- data/lib/brainzlab/vision/client.rb +128 -0
- data/lib/brainzlab/vision/provisioner.rb +136 -0
- data/lib/brainzlab/vision.rb +155 -0
- data/lib/brainzlab-sdk.rb +1 -1
- data/lib/brainzlab.rb +112 -13
- data/lib/generators/brainzlab/install/install_generator.rb +29 -27
- 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
|