This website requires JavaScript.
Explore
Help
Sign In
starred
/
warmbly
Watch
1
Star
0
Fork
0
mirror of
https://github.com/warmbly/warmbly.git
synced
2026-09-06 00:01:24 +00:00
Code
Issues
Packages
Projects
Releases
Wiki
Activity
Files
5bb449f6825576dfd482eb0cd13e1b46f0de6e19
warmbly
/
internal
/
app
/
aitools
T
History
Matthew Meszaros
b465f30d42
fix: scope account analytics by org id not user id
2026-07-21 17:34:59 +02:00
..
errors.go
feat: shared AI tool registry (internal/app/aitools) that runs 16 permission-gated tools as the invoking user over existing service-layer calls - Registry+Invocation enforce org-permission bits (JWT) or API-key bits per tool, ToolDefs binds handlers into the provider agent loop and Call powers direct MCP invocation; tools cover contacts (search/get/update/add_tag/remove_tag), CRM (create_task/create_deal), campaigns (list/stats/create_campaign_draft), unibox (list_threads/get_thread/draft_reply, gated on CanUseUnibox, draft never sends), create_automation_draft (disabled), and web search_web + fetch_url (webhook SSRF validator + safehttp dial-block + 2MB cap + html-to-text + 15min Redis cache + rune-safe truncation); every write audits via AuditService.LogAction so the spine refreshes teammates, registry built once in main and exposed on the handler for M3/M8
2026-07-13 18:15:58 +02:00
registry.go
feat: connect external MCP servers whose tools the AI assistant can use - ai_mcp_servers table with bearer tokens sealed by the org DEK cipher (never returned) and SSRF-validated https urls, a dependency-free streamable-HTTP JSON-RPC client (initialize/tools/list/tools/call over safehttp dial-time IP blocking with SSE+JSON handling and body caps), an mcp service that discovers tools on connect and contributes only enabled servers' tools to the dashboard agent as namespaced mcp_<server>_<tool> defs that are always write-class and never auto-allowed, a registry DynamicToolSource hook so per-org tools join the agent's tool set and resume executes them through ToolDefs, /ai/connections CRUD gated on manage_settings with an mcp_server audit entity and spine, a Connections settings page to add servers and review/enable discovered tools, and docs
2026-07-13 20:05:24 +02:00
schema.go
feat: shared AI tool registry (internal/app/aitools) that runs 16 permission-gated tools as the invoking user over existing service-layer calls - Registry+Invocation enforce org-permission bits (JWT) or API-key bits per tool, ToolDefs binds handlers into the provider agent loop and Call powers direct MCP invocation; tools cover contacts (search/get/update/add_tag/remove_tag), CRM (create_task/create_deal), campaigns (list/stats/create_campaign_draft), unibox (list_threads/get_thread/draft_reply, gated on CanUseUnibox, draft never sends), create_automation_draft (disabled), and web search_web + fetch_url (webhook SSRF validator + safehttp dial-block + 2MB cap + html-to-text + 15min Redis cache + rune-safe truncation); every write audits via AuditService.LogAction so the spine refreshes teammates, registry built once in main and exposed on the handler for M3/M8
2026-07-13 18:15:58 +02:00
tools_analytics.go
fix: scope account analytics by org id not user id
2026-07-21 17:34:59 +02:00
tools_automation.go
feat: shared AI tool registry (internal/app/aitools) that runs 16 permission-gated tools as the invoking user over existing service-layer calls - Registry+Invocation enforce org-permission bits (JWT) or API-key bits per tool, ToolDefs binds handlers into the provider agent loop and Call powers direct MCP invocation; tools cover contacts (search/get/update/add_tag/remove_tag), CRM (create_task/create_deal), campaigns (list/stats/create_campaign_draft), unibox (list_threads/get_thread/draft_reply, gated on CanUseUnibox, draft never sends), create_automation_draft (disabled), and web search_web + fetch_url (webhook SSRF validator + safehttp dial-block + 2MB cap + html-to-text + 15min Redis cache + rune-safe truncation); every write audits via AuditService.LogAction so the spine refreshes teammates, registry built once in main and exposed on the handler for M3/M8
2026-07-13 18:15:58 +02:00
tools_campaigns.go
feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty
2026-07-16 07:50:24 +02:00
tools_contacts.go
feat: shared AI tool registry (internal/app/aitools) that runs 16 permission-gated tools as the invoking user over existing service-layer calls - Registry+Invocation enforce org-permission bits (JWT) or API-key bits per tool, ToolDefs binds handlers into the provider agent loop and Call powers direct MCP invocation; tools cover contacts (search/get/update/add_tag/remove_tag), CRM (create_task/create_deal), campaigns (list/stats/create_campaign_draft), unibox (list_threads/get_thread/draft_reply, gated on CanUseUnibox, draft never sends), create_automation_draft (disabled), and web search_web + fetch_url (webhook SSRF validator + safehttp dial-block + 2MB cap + html-to-text + 15min Redis cache + rune-safe truncation); every write audits via AuditService.LogAction so the spine refreshes teammates, registry built once in main and exposed on the handler for M3/M8
2026-07-13 18:15:58 +02:00
tools_crm.go
feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty
2026-07-16 07:50:24 +02:00
tools_skills.go
feat: org AI skills (playbooks) that every AI feature loads and follows - ai_skills table (org-scoped, unique name per org, 32KB content cap) with a skills service exposing CRUD plus an enabled-skills preamble injected into the dashboard agent, contact research, and reply-draft prompts and a load_skill read-tool that returns a playbook's full content by name, /ai/skills CRUD gated on manage_settings (JWT) or the AI_AGENT scope (API) with an ai_skill audit entity and spine entry, an AI skills settings page (list rows opening a right-side drawer with name, one-line description, enable toggle, and a markdown body), and docs with two example playbooks
2026-07-13 19:46:25 +02:00
tools_unibox.go
feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty
2026-07-16 07:50:24 +02:00
tools_web.go
feat: shared AI tool registry (internal/app/aitools) that runs 16 permission-gated tools as the invoking user over existing service-layer calls - Registry+Invocation enforce org-permission bits (JWT) or API-key bits per tool, ToolDefs binds handlers into the provider agent loop and Call powers direct MCP invocation; tools cover contacts (search/get/update/add_tag/remove_tag), CRM (create_task/create_deal), campaigns (list/stats/create_campaign_draft), unibox (list_threads/get_thread/draft_reply, gated on CanUseUnibox, draft never sends), create_automation_draft (disabled), and web search_web + fetch_url (webhook SSRF validator + safehttp dial-block + 2MB cap + html-to-text + 15min Redis cache + rune-safe truncation); every write audits via AuditService.LogAction so the spine refreshes teammates, registry built once in main and exposed on the handler for M3/M8
2026-07-13 18:15:58 +02:00
tools.go
feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty
2026-07-16 07:50:24 +02:00