org.apache.maven.plugins
maven-compiler-plugin
diff --git a/samples/src/main/java/dev/openan/workflow/engine/examples/spring/SpringWorkbenchApplication.java b/samples/src/main/java/dev/openan/workflow/engine/examples/SpringWorkbenchApplication.java
similarity index 68%
rename from samples/src/main/java/dev/openan/workflow/engine/examples/spring/SpringWorkbenchApplication.java
rename to samples/src/main/java/dev/openan/workflow/engine/examples/SpringWorkbenchApplication.java
index a3796ce8..6a664658 100644
--- a/samples/src/main/java/dev/openan/workflow/engine/examples/spring/SpringWorkbenchApplication.java
+++ b/samples/src/main/java/dev/openan/workflow/engine/examples/SpringWorkbenchApplication.java
@@ -17,22 +17,28 @@
* under the License.
*/
-package dev.openan.workflow.engine.examples.spring;
+package dev.openan.workflow.engine.examples;
+
+import dev.openan.workflow.engine.client.EnvFileLoader;
+import dev.openan.workflow.engine.examples.demo.SpringSpnDemo;
+import dev.openan.workflow.engine.examples.util.EnvResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import java.nio.file.Path;
+
/**
* Spring Boot Workbench Agent -- northbound A2A server.
*
* This is the Workbench Agent itself: a Spring Boot service that exposes A2A-T endpoints
* (message:send, message:stream) via the {@code spring-boot-starter} auto-configuration. The
- * business logic lives in {@link SpringWorkbenchExecutor} (implements {@code AgentExecutor}).
+ * business logic lives in {@link dev.openan.workflow.engine.examples.workbench.SpringWorkbenchExecutor} (implements {@code AgentExecutor}).
*
*
Demo orchestration (starting OMC agents, sending Task-T, shutting down) is handled separately
- * by {@link SpringSpnDemo}, mirroring the existing {@code SpnCrossCityDiagnosisDemo} pattern.
+ * by {@link dev.openan.workflow.engine.examples.demo.SpringSpnDemo}.
*
*
Can also be run standalone as a Spring Boot service (no demo logic).
*/
@@ -42,8 +48,16 @@ public class SpringWorkbenchApplication {
private static final Logger log = LoggerFactory.getLogger(SpringWorkbenchApplication.class);
public static void main(String[] args) {
- System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true");
+ loadDotEnv();
SpringApplication.run(SpringWorkbenchApplication.class, args);
log.info("[SpringWorkbench] A2A server started -- ready to receive A2A-T messages");
}
+
+ /** Loads local demo configuration before Spring resolves application properties. */
+ public static void loadDotEnv() {
+ String envPath = EnvResolver.resolveEnvPath();
+ if (envPath != null) {
+ EnvFileLoader.loadToSystemProperties(Path.of(envPath));
+ }
+ }
}
diff --git a/samples/src/main/java/dev/openan/workflow/engine/examples/agents/BaseAgentExecutor.java b/samples/src/main/java/dev/openan/workflow/engine/examples/agents/BaseAgentExecutor.java
index 47293b95..e8874248 100644
--- a/samples/src/main/java/dev/openan/workflow/engine/examples/agents/BaseAgentExecutor.java
+++ b/samples/src/main/java/dev/openan/workflow/engine/examples/agents/BaseAgentExecutor.java
@@ -45,7 +45,7 @@ protected static String extractText(Message message) {
return sb.toString();
}
- protected static Message buildStatusMessage(String contextId, String taskId, String text) {
+ public static Message buildStatusMessage(String contextId, String taskId, String text) {
return Message.builder()
.messageId(UUID.randomUUID().toString())
.contextId(contextId)
diff --git a/samples/src/main/java/dev/openan/workflow/engine/examples/agents/ExtensionPrePositioner.java b/samples/src/main/java/dev/openan/workflow/engine/examples/agents/ExtensionPrePositioner.java
deleted file mode 100644
index 90d6c288..00000000
--- a/samples/src/main/java/dev/openan/workflow/engine/examples/agents/ExtensionPrePositioner.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2026 Huawei Technologies Co., Ltd.
- * All Rights Reserved.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * 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 dev.openan.workflow.engine.examples.agents;
-
-import dev.openan.workflow.engine.client.ExtensionSender;
-
-import org.a2aproject.sdk.spec.AgentCard;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-/**
- * Pre-positions Authorization-T and Notification-T to downstream agents.
- *
- *
Single responsibility: send the two pre-positioning control messages (whitelist policy +
- * result subscription) to each non-workbench agent before the workflow starts. This is a
- * separate concern from workflow execution and from negotiation -- the orchestrator calls this
- * once, then proceeds to run the PSOP workflow.
- */
-public class ExtensionPrePositioner {
-
- private static final Logger log = LoggerFactory.getLogger(ExtensionPrePositioner.class);
-
- private final String authInput;
- private final String notifInput;
-
- public ExtensionPrePositioner() {
- this.authInput =
- "任务类型新增授权,操作名称业务抢通,"
- + "操作类型光模块更换,"
- + "操作对象SPN专线业务,溢权策略OMC自动执行,"
- + "触发执行条件业务投诉诊断确认故障,"
- + "预期输出返回是否成功。";
- this.notifInput =
- "通知主题为service-recovery-execution-result,"
- + "订阅条件为业务抢通方案执行结果,"
- + "上报通知数据格式为TextPart。";
- }
-
- /**
- * Pre-position Authorization-T + Notification-T to every non-workbench agent.
- *
- *
When {@code notificationCallback} is non-null, subsequent events pushed by agents
- * through the Notification-T SSE stream (e.g. recovery results) are forwarded to the
- * callback. The callback receives a Map with keys: agent, text, metadata, state.
- */
- public void prePosition(
- ExtensionSender sender,
- List agentCards,
- Consumer