feat: Integration Hub for external tool connectivity
- Add native config option: `new Brainy({ integrations: true })`
- OData integration for Excel Power Query and Power BI
- Google Sheets integration with Apps Script
- Server-Sent Events (SSE) for real-time streaming
- Webhooks for push notifications
- Zero-config with sensible defaults
- Full tree-shaking when disabled
This commit is contained in:
parent
24039e8a1a
commit
b5bc9000cf
28 changed files with 8186 additions and 1 deletions
142
integrations/google-sheets/README.md
Normal file
142
integrations/google-sheets/README.md
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
# Brainy Google Sheets Add-on
|
||||
|
||||
Two-way sync between Brainy and Google Sheets.
|
||||
|
||||
## Quick Setup
|
||||
|
||||
1. Open your Google Sheet
|
||||
2. Go to **Extensions → Apps Script**
|
||||
3. Delete any existing code
|
||||
4. Copy and paste `Code.gs` into the editor
|
||||
5. Create a new HTML file called `Sidebar.html` and paste the content
|
||||
6. Go to **Project Settings** (gear icon) → **Script properties**
|
||||
7. Add property: `BRAINY_URL` = your Brainy server URL (e.g., `http://localhost:3000`)
|
||||
8. Save and refresh your spreadsheet
|
||||
|
||||
## Custom Functions
|
||||
|
||||
Use these directly in cells:
|
||||
|
||||
### `=BRAINY_QUERY(query, limit)`
|
||||
Query entities using semantic search or type filter.
|
||||
|
||||
```
|
||||
=BRAINY_QUERY("machine learning", 10)
|
||||
=BRAINY_QUERY("type:person", 100)
|
||||
```
|
||||
|
||||
### `=BRAINY_GET(id)`
|
||||
Get a single entity by ID.
|
||||
|
||||
```
|
||||
=BRAINY_GET("entity-uuid-here")
|
||||
```
|
||||
|
||||
### `=BRAINY_SIMILAR(text, limit)`
|
||||
Find semantically similar entities.
|
||||
|
||||
```
|
||||
=BRAINY_SIMILAR("artificial intelligence research", 5)
|
||||
```
|
||||
|
||||
### `=BRAINY_RELATIONS(entityId, direction)`
|
||||
Get relationships for an entity.
|
||||
|
||||
```
|
||||
=BRAINY_RELATIONS("entity-id", "from")
|
||||
=BRAINY_RELATIONS("entity-id", "to")
|
||||
=BRAINY_RELATIONS("entity-id", "both")
|
||||
```
|
||||
|
||||
### `=BRAINY_TYPES()`
|
||||
List all available entity types.
|
||||
|
||||
### `=BRAINY_RELATION_TYPES()`
|
||||
List all available relationship types.
|
||||
|
||||
## Sidebar
|
||||
|
||||
Open via **Brainy → Open Sidebar** menu:
|
||||
|
||||
- **Search**: Query entities and insert results into the sheet
|
||||
- **Add**: Create new entities with a form
|
||||
- **Sync**: Sync selected range to Brainy (add or update)
|
||||
|
||||
## Authentication
|
||||
|
||||
If your Brainy server requires authentication:
|
||||
|
||||
1. Go to **Project Settings → Script properties**
|
||||
2. Add property: `BRAINY_API_KEY` = your API key
|
||||
|
||||
## Real-Time Sync
|
||||
|
||||
For real-time updates, enable SSE in your Brainy server:
|
||||
|
||||
```javascript
|
||||
brain.augmentations.register(new SSEIntegration())
|
||||
```
|
||||
|
||||
The sidebar will automatically show changes as they happen.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Brainy URL not configured"
|
||||
Add the `BRAINY_URL` script property in Apps Script settings.
|
||||
|
||||
### "Connection failed"
|
||||
- Check that your Brainy server is running
|
||||
- Ensure the URL is correct (include port if needed)
|
||||
- For local development, use ngrok or similar to expose localhost
|
||||
|
||||
### Custom functions not appearing
|
||||
- Refresh the spreadsheet
|
||||
- Wait a few seconds (Apps Script can be slow to register)
|
||||
- Check the Apps Script execution log for errors
|
||||
|
||||
## Server Setup
|
||||
|
||||
The simplest way to enable all integrations:
|
||||
|
||||
```javascript
|
||||
import { Brainy } from '@soulcraft/brainy'
|
||||
|
||||
const brain = new Brainy({ integrations: true })
|
||||
await brain.init()
|
||||
|
||||
console.log(brain.hub.endpoints)
|
||||
// { odata: '/odata', sheets: '/sheets', sse: '/events', webhooks: '/webhooks' }
|
||||
```
|
||||
|
||||
With Express:
|
||||
|
||||
```javascript
|
||||
import express from 'express'
|
||||
import { Brainy } from '@soulcraft/brainy'
|
||||
|
||||
const app = express()
|
||||
const brain = new Brainy({ integrations: true })
|
||||
await brain.init()
|
||||
|
||||
// Route all integration requests
|
||||
app.use(express.json())
|
||||
app.all(['/odata/*', '/sheets/*', '/events/*'], async (req, res) => {
|
||||
const response = await brain.hub.handleRequest({
|
||||
method: req.method,
|
||||
path: req.path,
|
||||
query: req.query,
|
||||
headers: req.headers,
|
||||
body: req.body
|
||||
})
|
||||
|
||||
if (response.isSSE) {
|
||||
// Handle SSE stream
|
||||
res.setHeader('Content-Type', 'text/event-stream')
|
||||
// ... streaming logic
|
||||
} else {
|
||||
res.status(response.status).set(response.headers).json(response.body)
|
||||
}
|
||||
})
|
||||
|
||||
app.listen(3000)
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue