feat: add workbench AI integration

This commit is contained in:
richjohnrambo
2026-09-28 11:28:24 +08:00
parent 5bf68727fa
commit 8773991015
19 changed files with 6971 additions and 10 deletions
+18 -2
View File
@@ -12,6 +12,7 @@ import (
"strings"
"time"
"git.118im.com/im_team/im_workbench/internal/ai"
"git.118im.com/im_team/im_workbench/internal/auth"
"git.118im.com/im_team/im_workbench/internal/config"
"git.118im.com/im_team/im_workbench/internal/events"
@@ -23,6 +24,7 @@ type API struct {
auth *auth.Authenticator
events events.Publisher
authCfg config.AuthConfig
ai *ai.Service
}
const workbenchEventPublishTimeout = 15 * time.Second
@@ -32,15 +34,27 @@ const (
maxMailboxContentLength = 5000
)
func New(st *store.Store, authenticator *auth.Authenticator, publisher events.Publisher, authCfg config.AuthConfig) *API {
func New(st *store.Store, authenticator *auth.Authenticator, publisher events.Publisher, authCfg config.AuthConfig, aiService *ai.Service) *API {
if publisher == nil {
publisher = events.NoopPublisher{}
}
return &API{store: st, auth: authenticator, events: publisher, authCfg: authCfg}
return &API{store: st, auth: authenticator, events: publisher, authCfg: authCfg, ai: aiService}
}
func (a *API) Register(mux *http.ServeMux) {
mux.HandleFunc("/v1/workbench", a.withAuth(a.workbench))
mux.HandleFunc("/v1/workbench/apps", a.withAuth(a.workbenchApps))
mux.HandleFunc("/v1/workbench/apps/search", a.withAuth(a.workbenchAppsSearch))
mux.HandleFunc("/v1/workbench/ai/capabilities", a.withAuth(a.aiCapabilities))
mux.HandleFunc("/v1/workbench/ai/text/polish", a.withAuth(a.aiTextPolish))
mux.HandleFunc("/v1/workbench/ai/documents/generate", a.withAuth(a.aiDocumentGenerate))
mux.HandleFunc("/v1/workbench/ai/documents", a.withAuth(a.aiDocuments))
mux.HandleFunc("/v1/workbench/ai/documents/", a.withAuth(a.aiDocumentResource))
mux.HandleFunc("/v1/workbench/ai/table-analyses", a.withAuth(a.aiTableAnalyses))
mux.HandleFunc("/v1/workbench/ai/table-analyses/", a.withAuth(a.aiTableAnalysisResource))
mux.HandleFunc("/v1/workbench/ai/records", a.withAuth(a.aiRecords))
mux.HandleFunc("/v1/workbench/ai/records/", a.withAuth(a.aiRecordResource))
mux.HandleFunc("/v1/workbench/ai/tasks/", a.withAuth(a.aiTaskResource))
mux.HandleFunc("/v1/workbench/organization/departments", a.withAuth(a.organizationDepartments))
mux.HandleFunc("/v1/workbench/organization/departments/", a.withAuth(a.organizationDepartmentResource))
mux.HandleFunc("/v1/workbench/organization/members", a.withAuth(a.organizationMembers))
@@ -518,6 +532,8 @@ func (a *API) meetingResource(w http.ResponseWriter, r *http.Request, p *auth.Pr
writeSuccess(w, r, meetingPayload(*meeting, p.UserID))
case tail == "notes" && r.Method == http.MethodGet:
a.meetingNotesDetail(w, r, p, st, meetingID)
case tail == "ai-summary":
a.aiMeetingSummary(w, r, p, st, meetingID)
case tail == "notes/files" && r.Method == http.MethodPost:
a.meetingNoteFiles(w, r, p, st, meetingID)
case strings.HasPrefix(tail, "notes/files/"):