Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
dcc069f
bug(jmanus): fix polardb concurrent trasaction bug
zizhu8 Jul 29, 2025
38646ee
bug(jmanus): fix polardb concurrent trasaction bug
Jul 23, 2025
348c759
feat(jmanus): add namespace host column
Jul 23, 2025
f3f0f2a
feat(jmanus): 扩展序列化方式,支持agent是否初始化,修复polardb事务并发问题
Jul 25, 2025
7ec581c
bug(jmanus): fix compile error
Jul 28, 2025
09a19f6
bug(jmanus): fix compile error
zizhu8 Jul 28, 2025
daa139e
feat(jmanus): enhance index page (#1842)
rainerWJY Jul 28, 2025
c21efc8
feat(nl2sql): update nl2sql common db connector (#1824)
yuluo-yx Jul 28, 2025
62904bd
feat(graph): StreamingOutput增强,增加 ChatResponse 属性以获取完整响应 (#1836)
xiaohai-78 Jul 28, 2025
6b3064c
fix(deepresearch): enable researchTeam error handling mechanism (#1843)
sixiyida Jul 28, 2025
1d5efa3
bug(jmanus): fix end file character
zizhu8 Jul 29, 2025
2e6df65
bug(jmanus): fix polardb concurrent trasaction bug
zizhu8 Jul 29, 2025
460536b
bug(jmanus): fix polardb concurrent trasaction bug
Jul 23, 2025
b6aae7b
feat(jmanus): add namespace host column
Jul 23, 2025
b654e52
feat(jmanus): 扩展序列化方式,支持agent是否初始化,修复polardb事务并发问题
Jul 25, 2025
e961696
bug(jmanus): fix compile error
Jul 28, 2025
a92957c
bug(jmanus): fix compile error
zizhu8 Jul 28, 2025
f11ef1f
bug(jmanus): fix end file character
zizhu8 Jul 29, 2025
dd2a896
fix(jmanus): merge main branch
zizhu8 Jul 29, 2025
299eda7
fix(jmanus): merge main branch
zizhu8 Jul 29, 2025
369a65e
fix(jmanus): merge origin main
zizhu8 Jul 30, 2025
cbb8f90
feat(jmanus): add namespace host column
Jul 23, 2025
a0e3629
bug(jmanus): fix compile error
Jul 28, 2025
394234f
bug(jmanus): fix end file character
zizhu8 Jul 29, 2025
97ae823
feat(jmanus): add namespace host column
Jul 23, 2025
564aef6
Merge branch 'main' of github.com:cainiao-infra/spring-ai-alibaba int…
zizhu8 Jul 30, 2025
acc1c58
bug(jmanus): fix compile error
Jul 28, 2025
82d896e
fix(jmanus): merge origin main
zizhu8 Jul 30, 2025
228a283
fix(jmanus): merge main branch
zizhu8 Jul 29, 2025
892c5ca
feat(jmanus): merge ui/support ignore load buildin tools
zizhu8 Aug 6, 2025
ed0d1c8
feat(jmanus): add namespace host column
Jul 23, 2025
802c528
bug(jmanus): fix compile error
Jul 28, 2025
75d9e0a
bug(jmanus): fix end file character
zizhu8 Jul 29, 2025
a4d8a5d
feat(jmanus): add namespace host column
Jul 23, 2025
a65d8e4
feat(jmanus): 扩展序列化方式,支持agent是否初始化,修复polardb事务并发问题
Jul 25, 2025
e9b595e
bug(jmanus): fix compile error
Jul 28, 2025
2c24feb
bug(jmanus): fix end file character
zizhu8 Jul 29, 2025
38f51ed
feat(jmanus): add namespace host column
Jul 23, 2025
6307370
bug(jmanus): fix compile error
Jul 28, 2025
48c037c
feat(jmanus): merge upstream main
zizhu8 Aug 6, 2025
50cdd98
feat(nl2sql): update nl2sql common db connector (#1824)
yuluo-yx Jul 28, 2025
857861b
fix(jmanus): merge main branch
zizhu8 Jul 29, 2025
7bde78d
feat(jmanus): merge ui/support ignore load buildin tools
zizhu8 Aug 6, 2025
556bc74
feat(jmanus): 支持不加载内置工具
zizhu8 Aug 6, 2025
e8b31f3
feat(jmanus): 支持不加载内置工具
zizhu8 Aug 6, 2025
3cb3a4e
feat(jmanus): 支持不加载内置工具
zizhu8 Aug 6, 2025
f401d5f
feat(jmanus): 支持不加载内置工具
zizhu8 Aug 7, 2025
98b3204
feat(jmanus):Extended acquisition agent implementation
CaptainGreenskin Aug 7, 2025
23fa1e6
merge upstream main
zizhu8 Aug 8, 2025
bb1f716
merge upstream main
zizhu8 Aug 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,6 @@ spring-ai-alibaba-jmanus/ui-vue3/pnpm-lock.yaml
# MCP configuration files
modified_mcp_config.json
.cursorindexingignore

# ignore code copilot local index
.idea/LocalCodeIndex/
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import com.alibaba.cloud.ai.example.manus.llm.StreamingResponseHandler;
import com.alibaba.cloud.ai.example.manus.planning.service.UserInputService;
import com.alibaba.cloud.ai.example.manus.recorder.PlanExecutionRecorder;
import com.alibaba.cloud.ai.example.manus.planning.model.vo.ExecutionContext;

@Service
public class DynamicAgentLoader implements IDynamicAgentLoader {
Expand Down Expand Up @@ -88,4 +89,9 @@ public List<DynamicAgentEntity> getAllAgents() {
.toList();
}

@Override
public List<DynamicAgentEntity> getAgents(ExecutionContext context) {
return IDynamicAgentLoader.super.getAgents(context);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import com.alibaba.cloud.ai.example.manus.dynamic.agent.DynamicAgent;
import com.alibaba.cloud.ai.example.manus.dynamic.agent.entity.DynamicAgentEntity;
import com.alibaba.cloud.ai.example.manus.planning.model.vo.ExecutionContext;

/**
* Dynamic Agent loader interface, providing Agent loading function
Expand All @@ -40,4 +41,8 @@ public interface IDynamicAgentLoader {
*/
List<DynamicAgentEntity> getAllAgents();

default List<DynamicAgentEntity> getAgents(ExecutionContext context) {
return getAllAgents();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.util.Map;

import com.alibaba.cloud.ai.example.manus.planning.model.vo.ExecutionContext;
import org.springframework.web.client.RestClient;

import com.alibaba.cloud.ai.example.manus.dynamic.agent.ToolCallbackProvider;
Expand All @@ -29,10 +30,10 @@ public interface IPlanningFactory {

/**
* Create planning coordinator
* @param planId Plan ID
* @param context
* @return Planning coordinator
*/
PlanningCoordinator createPlanningCoordinator(String planId);
PlanningCoordinator createPlanningCoordinator(ExecutionContext context);

/**
* Create tool callback mapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Map;
import java.util.concurrent.TimeUnit;

import com.alibaba.cloud.ai.example.manus.planning.model.vo.ExecutionContext;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.HttpClients;
Expand All @@ -33,6 +34,7 @@
import org.springframework.ai.tool.function.FunctionToolCallback;
import org.springframework.ai.tool.metadata.ToolMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
Expand Down Expand Up @@ -153,6 +155,9 @@ public class PlanningFactory implements IPlanningFactory {
@Autowired
private PptGeneratorOperator pptGeneratorOperator;

@Value("${agent.init}")
private Boolean agentInit = true;

public PlanningFactory(ChromeDriverService chromeDriverService, PlanExecutionRecorder recorder,
ManusProperties manusProperties, TextFileService textFileService, McpService mcpService,
SmartContentSavingService innerStorageService, UnifiedDirectoryManager unifiedDirectoryManager,
Expand All @@ -168,6 +173,24 @@ public PlanningFactory(ChromeDriverService chromeDriverService, PlanExecutionRec
this.tableProcessingService = tableProcessingService;
}

public PlanningCoordinator createPlanningCoordinator(ExecutionContext context) {
// Add all dynamic agents from the database
List<DynamicAgentEntity> agentEntities = dynamicAgentLoader.getAgents(context);

PlanningToolInterface planningTool = new PlanningTool();

PlanCreator planCreator = new PlanCreator(agentEntities, llmService, planningTool, recorder, promptService,
manusProperties, streamingResponseHandler);

PlanFinalizer planFinalizer = new PlanFinalizer(llmService, recorder, promptService, manusProperties,
streamingResponseHandler);

PlanningCoordinator planningCoordinator = new PlanningCoordinator(planCreator, planExecutorFactory,
planFinalizer);

return planningCoordinator;
}

// Use the enhanced PlanningCoordinator with dynamic executor selection
public PlanningCoordinator createPlanningCoordinator(String planId) {

Expand Down Expand Up @@ -221,28 +244,33 @@ public Map<String, ToolCallBackContext> toolCallbackMap(String planId, String ro
log.error("SmartContentSavingService is null, skipping BrowserUseTool registration");
return toolCallbackMap;
}
// Add all tool definitions
toolDefinitions.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper));
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper));
toolDefinitions.add(new TerminateTool(planId, expectedReturnInfo));
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper));
toolDefinitions.add(new DocLoaderTool());
toolDefinitions.add(new TextFileOperator(textFileService, innerStorageService, objectMapper));
// toolDefinitions.add(new InnerStorageTool(unifiedDirectoryManager));
// toolDefinitions.add(pptGeneratorOperator);
toolDefinitions.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder));
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager));
// toolDefinitions.add(new GoogleSearch());
// toolDefinitions.add(new PythonExecute());
toolDefinitions.add(new FormInputTool(objectMapper));
toolDefinitions.add(new DataSplitTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager,
objectMapper, tableProcessingService));
toolDefinitions
.add(new MapOutputTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager, objectMapper));
toolDefinitions
.add(new ReduceOperationTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
toolDefinitions.add(new FinalizeTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
toolDefinitions.add(new CronTool(cronService, objectMapper));
if (agentInit) {
// Add all tool definitions
toolDefinitions.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper));
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper));
toolDefinitions.add(new TerminateTool(planId, expectedReturnInfo));
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper));
toolDefinitions.add(new DocLoaderTool());
toolDefinitions.add(new TextFileOperator(textFileService, innerStorageService, objectMapper));
// toolDefinitions.add(new InnerStorageTool(unifiedDirectoryManager));
// toolDefinitions.add(pptGeneratorOperator);
toolDefinitions.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder));
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager));
// toolDefinitions.add(new GoogleSearch());
// toolDefinitions.add(new PythonExecute());
toolDefinitions.add(new FormInputTool(objectMapper));
toolDefinitions.add(new DataSplitTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager,
objectMapper, tableProcessingService));
toolDefinitions.add(new MapOutputTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager,
objectMapper));
toolDefinitions
.add(new ReduceOperationTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
toolDefinitions.add(new FinalizeTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
toolDefinitions.add(new CronTool(cronService, objectMapper));
}
else {
toolDefinitions.add(new TerminateTool(planId, expectedReturnInfo));
}

List<McpServiceEntity> functionCallbacks = mcpService.getFunctionCallbacks(planId);
for (McpServiceEntity toolCallback : functionCallbacks) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public ResponseEntity<Map<String, Object>> executeQuery(@RequestBody Map<String,
context.setNeedSummary(true);

// Get or create planning flow
PlanningCoordinator planningFlow = planningFactory.createPlanningCoordinator(planId);
PlanningCoordinator planningFlow = planningFactory.createPlanningCoordinator(context);

// Asynchronous execution of task
CompletableFuture.supplyAsync(() -> {
Expand Down
Loading
Loading