Module: BrainzLab::Dendrite

Defined in:
lib/brainzlab/dendrite.rb,
lib/brainzlab/dendrite/client.rb,
lib/brainzlab/dendrite/provisioner.rb

Defined Under Namespace

Classes: Client, Provisioner

Class Method Summary collapse

Class Method Details

.ask(repo_id, question, session_id: nil) ⇒ Hash?

Ask a question about the codebase

Examples:

response = BrainzLab::Dendrite.ask(repo_id, "How does the payment flow work?")
puts response[:answer]

Parameters:

  • repo_id (String)

    Repository ID

  • question (String)

    Question to ask

  • session_id (String) (defaults to: nil)

    Optional session for follow-up questions

Returns:

  • (Hash, nil)

    AI response with answer



119
120
121
122
123
124
125
126
# File 'lib/brainzlab/dendrite.rb', line 119

def ask(repo_id, question, session_id: nil)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.ask(repo_id, question, session_id: session_id)
end

.clientObject



178
179
180
# File 'lib/brainzlab/dendrite.rb', line 178

def client
  @client ||= Client.new(BrainzLab.configuration)
end

.connect(url, name: nil, branch: 'main') ⇒ Hash?

Connect a Git repository for documentation

Examples:

BrainzLab::Dendrite.connect(
  "https://github.com/org/repo",
  name: "My API",
  branch: "main"
)

Parameters:

  • url (String)

    Git repository URL

  • name (String) (defaults to: nil)

    Optional display name

  • branch (String) (defaults to: 'main')

    Branch to track (default: main)

Returns:

  • (Hash, nil)

    Repository info



22
23
24
25
26
27
28
29
# File 'lib/brainzlab/dendrite.rb', line 22

def connect(url, name: nil, branch: 'main', **)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.connect_repository(url: url, name: name, branch: branch, **)
end

.diagram(repo_id, type:, scope: nil) ⇒ Hash?

Generate a diagram

Examples:

diagram = BrainzLab::Dendrite.diagram(repo_id, :er)
puts diagram[:mermaid]

Parameters:

  • repo_id (String)

    Repository ID

  • type (Symbol)

    Diagram type (:class, :er, :sequence, :architecture)

  • scope (String) (defaults to: nil)

    Optional scope (module, class name)

Returns:

  • (Hash, nil)

    Mermaid diagram



156
157
158
159
160
161
162
163
# File 'lib/brainzlab/dendrite.rb', line 156

def diagram(repo_id, type:, scope: nil)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.generate_diagram(repo_id, type: type, scope: scope)
end

.ensure_provisioned!Object

INTERNAL ===



167
168
169
170
171
172
# File 'lib/brainzlab/dendrite.rb', line 167

def ensure_provisioned!
  return if @provisioned

  @provisioned = true
  provisioner.ensure_project!
end

.explain(repo_id, path, symbol: nil) ⇒ Hash?

Explain a file or code symbol

Examples:

explanation = BrainzLab::Dendrite.explain(repo_id, "app/models/user.rb", symbol: "authenticate")

Parameters:

  • repo_id (String)

    Repository ID

  • path (String)

    File path

  • symbol (String) (defaults to: nil)

    Optional specific symbol (class, method)

Returns:

  • (Hash, nil)

    Explanation



137
138
139
140
141
142
143
144
# File 'lib/brainzlab/dendrite.rb', line 137

def explain(repo_id, path, symbol: nil)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.explain(repo_id, path, symbol: symbol)
end

.page(repo_id, page_slug) ⇒ Hash?

Get a specific wiki page

Parameters:

  • repo_id (String)

    Repository ID

  • page (String)

    Page slug (e.g., “models/user”)

Returns:

  • (Hash, nil)

    Page content



82
83
84
85
86
87
88
89
# File 'lib/brainzlab/dendrite.rb', line 82

def page(repo_id, page_slug)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.get_wiki_page(repo_id, page_slug)
end

.provisionerObject



174
175
176
# File 'lib/brainzlab/dendrite.rb', line 174

def provisioner
  @provisioner ||= Provisioner.new(BrainzLab.configuration)
end

.repositoriesArray<Hash>

List all connected repositories

Returns:

  • (Array<Hash>)

    List of repositories



57
58
59
60
61
62
63
64
# File 'lib/brainzlab/dendrite.rb', line 57

def repositories
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.dendrite_valid?

  client.list_repositories
end

.repository(repo_id) ⇒ Hash?

Get repository info

Parameters:

  • repo_id (String)

    Repository ID

Returns:

  • (Hash, nil)

    Repository details



46
47
48
49
50
51
52
53
# File 'lib/brainzlab/dendrite.rb', line 46

def repository(repo_id)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.get_repository(repo_id)
end

.reset!Object



182
183
184
185
186
# File 'lib/brainzlab/dendrite.rb', line 182

def reset!
  @client = nil
  @provisioner = nil
  @provisioned = false
end

.search(repo_id, query, limit: 10) ⇒ Array<Hash>

Semantic search across the codebase

Examples:

results = BrainzLab::Dendrite.search(repo_id, "authentication flow")

Parameters:

  • repo_id (String)

    Repository ID

  • query (String)

    Search query

  • limit (Integer) (defaults to: 10)

    Max results (default: 10)

Returns:

  • (Array<Hash>)

    Search results



100
101
102
103
104
105
106
107
# File 'lib/brainzlab/dendrite.rb', line 100

def search(repo_id, query, limit: 10)
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.dendrite_valid?

  client.search(repo_id, query, limit: limit)
end

.sync(repo_id) ⇒ Boolean

Trigger documentation sync for a repository

Parameters:

  • repo_id (String)

    Repository ID

Returns:

  • (Boolean)

    True if sync started



34
35
36
37
38
39
40
41
# File 'lib/brainzlab/dendrite.rb', line 34

def sync(repo_id)
  return false unless enabled?

  ensure_provisioned!
  return false unless BrainzLab.configuration.dendrite_valid?

  client.sync_repository(repo_id)
end

.wiki(repo_id) ⇒ Hash?

Get wiki for a repository

Parameters:

  • repo_id (String)

    Repository ID

Returns:

  • (Hash, nil)

    Wiki structure



69
70
71
72
73
74
75
76
# File 'lib/brainzlab/dendrite.rb', line 69

def wiki(repo_id)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.dendrite_valid?

  client.get_wiki(repo_id)
end