refactor(workflow): Move the plugin component in the Workflow package into the common crossdomain package (#717)

This commit is contained in:
Ryo
2025-08-13 11:06:53 +08:00
committed by GitHub
parent b38ab95623
commit 99c759addc
47 changed files with 1330 additions and 1407 deletions

View File

@@ -67,17 +67,17 @@ import (
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/knowledge/knowledgemock"
crossmodelmgr "github.com/coze-dev/coze-studio/backend/crossdomain/contract/modelmgr"
mockmodel "github.com/coze-dev/coze-studio/backend/crossdomain/contract/modelmgr/modelmock"
crossplugin "github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin"
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin/pluginmock"
crossuser "github.com/coze-dev/coze-studio/backend/crossdomain/contract/user"
"github.com/coze-dev/coze-studio/backend/crossdomain/impl/code"
plugin3 "github.com/coze-dev/coze-studio/backend/crossdomain/workflow/plugin"
pluginImpl "github.com/coze-dev/coze-studio/backend/crossdomain/impl/plugin"
entity4 "github.com/coze-dev/coze-studio/backend/domain/memory/database/entity"
entity2 "github.com/coze-dev/coze-studio/backend/domain/openauth/openapiauth/entity"
entity3 "github.com/coze-dev/coze-studio/backend/domain/plugin/entity"
entity5 "github.com/coze-dev/coze-studio/backend/domain/plugin/entity"
userentity "github.com/coze-dev/coze-studio/backend/domain/user/entity"
workflow2 "github.com/coze-dev/coze-studio/backend/domain/workflow"
"github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/plugin"
"github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/plugin/pluginmock"
crosssearch "github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/search"
"github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/search/searchmock"
"github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/variable"
@@ -125,7 +125,7 @@ type wfTestRunner struct {
tos *storageMock.MockStorage
knowledge *knowledgemock.MockKnowledge
database *databasemock.MockDatabase
pluginSrv *pluginmock.MockService
pluginSrv *pluginmock.MockPluginService
internalModel *testutil.UTChatModel
ctx context.Context
closeFn func()
@@ -296,8 +296,8 @@ func newWfTestRunner(t *testing.T) *wfTestRunner {
mockDatabaseOperator := databasemock.NewMockDatabase(ctrl)
crossdatabase.SetDefaultSVC(mockDatabaseOperator)
mockPluginSrv := pluginmock.NewMockService(ctrl)
plugin.SetPluginService(mockPluginSrv)
mockPluginSrv := pluginmock.NewMockPluginService(ctrl)
crossplugin.SetDefaultSVC(mockPluginSrv)
mockey.Mock((*user.UserApplicationService).MGetUserBasicInfo).Return(&playground.MGetUserBasicInfoResponse{
UserBasicInfoMap: make(map[string]*playground.UserBasicInfo),
@@ -2876,9 +2876,8 @@ func TestLLMWithSkills(t *testing.T) {
{ID: int64(7509353598782816256), Operation: operation},
}, nil).AnyTimes()
pluginSrv := plugin3.NewPluginService(r.plugin, r.tos)
plugin.SetPluginService(pluginSrv)
pluginSrv := pluginImpl.InitDomainService(r.plugin, r.tos)
crossplugin.SetDefaultSVC(pluginSrv)
t.Run("llm with plugin tool", func(t *testing.T) {
id := r.load("llm_node_with_skills/llm_node_with_plugin_tool.json")
@@ -3414,8 +3413,8 @@ func TestGetLLMNodeFCSettingsDetailAndMerged(t *testing.T) {
{ID: 123, Operation: operation},
}, nil).AnyTimes()
pluginSrv := plugin3.NewPluginService(r.plugin, r.tos)
plugin.SetPluginService(pluginSrv)
pluginSrv := pluginImpl.InitDomainService(r.plugin, r.tos)
crossplugin.SetDefaultSVC(pluginSrv)
t.Run("plugin tool info ", func(t *testing.T) {
fcSettingDetailReq := &workflow.GetLLMNodeFCSettingDetailRequest{
@@ -3531,8 +3530,8 @@ func TestGetLLMNodeFCSettingsDetailAndMerged(t *testing.T) {
{ID: 123, Operation: operation},
}, nil).AnyTimes()
pluginSrv := plugin3.NewPluginService(r.plugin, r.tos)
plugin.SetPluginService(pluginSrv)
pluginSrv := pluginImpl.InitDomainService(r.plugin, r.tos)
crossplugin.SetDefaultSVC(pluginSrv)
t.Run("plugin merge", func(t *testing.T) {
fcSettingMergedReq := &workflow.GetLLMNodeFCSettingsMergedRequest{
@@ -3698,7 +3697,7 @@ func TestCopyWorkflow(t *testing.T) {
_, err := appworkflow.GetWorkflowDomainSVC().Get(context.Background(), &vo.GetPolicy{
ID: wid,
QType: vo.FromDraft,
QType: plugin2.FromDraft,
CommitID: "",
})
assert.NotNil(t, err)
@@ -3760,7 +3759,7 @@ func TestReleaseApplicationWorkflows(t *testing.T) {
wf, err = appworkflow.GetWorkflowDomainSVC().Get(context.Background(), &vo.GetPolicy{
ID: 100100100100,
QType: vo.FromSpecificVersion,
QType: plugin2.FromSpecificVersion,
Version: version,
})
assert.NoError(t, err)
@@ -4054,7 +4053,7 @@ func TestCopyWorkflowAppToLibrary(t *testing.T) {
}
wf, err := appworkflow.GetWorkflowDomainSVC().Get(ctx, &vo.GetPolicy{
ID: event.WorkflowID,
QType: vo.FromLatestVersion,
QType: plugin2.FromLatestVersion,
})
copiedIDs = append(copiedIDs, event.WorkflowID)
assert.NoError(t, err)
@@ -4096,7 +4095,7 @@ func TestCopyWorkflowAppToLibrary(t *testing.T) {
subWf, err := appworkflow.GetWorkflowDomainSVC().Get(ctx, &vo.GetPolicy{
ID: wfId,
QType: vo.FromLatestVersion,
QType: plugin2.FromLatestVersion,
})
assert.NoError(t, err)
subworkflowCanvas := &vo.Canvas{}
@@ -4199,7 +4198,7 @@ func TestCopyWorkflowAppToLibrary(t *testing.T) {
}
wf, err := appworkflow.GetWorkflowDomainSVC().Get(ctx, &vo.GetPolicy{
ID: event.WorkflowID,
QType: vo.FromLatestVersion,
QType: plugin2.FromLatestVersion,
})
copiedIDs = append(copiedIDs, event.WorkflowID)

View File

@@ -0,0 +1,154 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package plugin
import (
"github.com/coze-dev/coze-studio/backend/api/model/workflow"
)
type ToolsInfoRequest struct {
PluginEntity PluginEntity
ToolIDs []int64
IsDraft bool
}
type PluginEntity struct {
PluginID int64
PluginVersion *string // nil or "0" means draft, "" means latest/online version, otherwise is specific version
}
type DependenceResource struct {
PluginIDs []int64
KnowledgeIDs []int64
DatabaseIDs []int64
}
type ExternalResourceRelated struct {
PluginMap map[int64]*PluginEntity
PluginToolMap map[int64]int64
KnowledgeMap map[int64]int64
DatabaseMap map[int64]int64
}
type CopyWorkflowPolicy struct {
TargetSpaceID *int64
TargetAppID *int64
ModifiedCanvasSchema *string
ShouldModifyWorkflowName bool
}
type ToolsInfoResponse struct {
PluginID int64
SpaceID int64
Version string
PluginName string
Description string
IconURL string
PluginType int64
ToolInfoList map[int64]ToolInfoW
LatestVersion *string
IsOfficial bool
AppID int64
}
type ToolInfoW struct {
ToolName string
ToolID int64
Description string
DebugExample *DebugExample
Inputs []*workflow.APIParameter
Outputs []*workflow.APIParameter
}
type DebugExample struct {
ReqExample string
RespExample string
}
type ToolsInvokableRequest struct {
PluginEntity PluginEntity
ToolsInvokableInfo map[int64]*ToolsInvokableInfo
IsDraft bool
}
type WorkflowAPIParameters = []*workflow.APIParameter
type ToolsInvokableInfo struct {
ToolID int64
RequestAPIParametersConfig WorkflowAPIParameters
ResponseAPIParametersConfig WorkflowAPIParameters
}
type Locator uint8
const (
FromDraft Locator = iota
FromSpecificVersion
FromLatestVersion
)
type ExecuteConfig struct {
ID int64
From Locator
Version string
CommitID string
Operator int64
Mode ExecuteMode
AppID *int64
AgentID *int64
ConnectorID int64
ConnectorUID string
TaskType TaskType
SyncPattern SyncPattern
InputFailFast bool // whether to fail fast if input conversion has warnings
BizType BizType
Cancellable bool
}
type ExecuteMode string
const (
ExecuteModeDebug ExecuteMode = "debug"
ExecuteModeRelease ExecuteMode = "release"
ExecuteModeNodeDebug ExecuteMode = "node_debug"
)
type TaskType string
const (
TaskTypeForeground TaskType = "foreground"
TaskTypeBackground TaskType = "background"
)
type SyncPattern string
const (
SyncPatternSync SyncPattern = "sync"
SyncPatternAsync SyncPattern = "async"
SyncPatternStream SyncPattern = "stream"
)
var DebugURLTpl = "http://127.0.0.1:3000/work_flow?execute_id=%d&space_id=%d&workflow_id=%d&execute_mode=2"
type BizType string
const (
BizTypeAgent BizType = "agent"
BizTypeWorkflow BizType = "workflow"
)