Skip to content

Commit 87e6963

Browse files
🧩 Refactor(Workflow): 提取 KitX.Workflow 独立库、瘦身 Core 至非 workflow、bump Standard+Dashboard 子模块指针
1 parent 636b5e9 commit 87e6963

112 files changed

Lines changed: 1609 additions & 620 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

KitX Clients/KitX Core/KitX.Core.BluePrint.Test/Program.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
using Microsoft.Extensions.DependencyInjection;
66
using KitX.Core.DI;
77
using KitX.Core.Contract.Workflow;
8-
using KitX.Core.Workflow.Blueprint;
9-
using KitX.Core.Workflow.CFG;
10-
using KitX.Core.Workflow.BlockScripting;
8+
using KitX.Workflow.Blueprint;
9+
using KitX.Workflow.CFG;
10+
using KitX.Workflow.BlockScripting;
11+
using KitX.Workflow.Contract;
12+
using KitX.Workflow.Contract.Models;
13+
using KitX.Workflow.Conversion;
1114

12-
using KitX.Core.Workflow.Conversion;
1315
namespace KitX.Core.BluePrint.Test;
1416

1517
public class Program

KitX Clients/KitX Core/KitX.Core/DI/CoreServiceCollectionExtensions.cs

Lines changed: 7 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
22
using KitX.Core.Contract.Activity;
33
using KitX.Core.Contract.Announcement;
44
using KitX.Core.Contract.Configuration;
@@ -21,13 +21,10 @@
2121
using KitX.Core.Security;
2222
using KitX.Core.Statistics;
2323
using KitX.Core.Tasks;
24-
using KitX.Core.Workflow;
25-
using KitX.Core.Workflow.BlockScripting;
26-
using KitX.Core.Workflow.Blueprint;
2724
using KitX.Core.Event;
25+
using KitX.Workflow.Hosting;
2826
using Serilog;
2927

30-
using KitX.Core.Workflow.Conversion;
3128
namespace KitX.Core.DI;
3229

3330
/// <summary>
@@ -60,21 +57,6 @@ public static IServiceCollection AddCoreServices(this IServiceCollection service
6057
Log.Information("Registering IPluginService...");
6158
services.AddSingleton<IPluginService, PluginsManager>();
6259

63-
// Workflow Services
64-
Log.Information("Registering workflow services...");
65-
// Individual service implementations (WorkflowScriptService facade used for backward compatibility)
66-
// IBlockScriptService is created via factory to inject RealPluginManager from DI
67-
services.AddSingleton<IBlockScriptService>(provider =>
68-
{
69-
var state = WorkflowScriptService.RuntimeState;
70-
var rpm = provider.GetRequiredService<RealPluginManager>();
71-
var service = new BlockScriptServiceImpl(state, rpm);
72-
Log.Information("[DI] IBlockScriptService created with RealPluginManager. HashCode: {HashCode}", rpm.GetHashCode());
73-
return service;
74-
});
75-
services.AddSingleton<IWorkflowPluginService>(sp => WorkflowScriptService.PluginServiceInstance);
76-
services.AddSingleton<IWorkflowManagementService>(sp => WorkflowScriptService.ManagementServiceInstance);
77-
7860
// Activity Services
7961
Log.Information("Registering IActivityService...");
8062
services.AddSingleton<IActivityService, ActivityManager>();
@@ -116,106 +98,15 @@ public static IServiceCollection AddCoreServices(this IServiceCollection service
11698
Log.Information("Registering IDeviceHttpClient...");
11799
services.AddSingleton<IDeviceHttpClient, DeviceHttpClient>();
118100

119-
// RealPluginManager must be registered as singleton so that PluginsServer and WorkflowScriptService
120-
// use the same instance. This ensures plugin connection events are properly received.
121-
Log.Information("Registering RealPluginManager...");
122-
services.AddSingleton<RealPluginManager>(provider =>
123-
{
124-
var pluginServer = provider.GetRequiredService<IPluginServer>();
125-
var eventService = provider.GetRequiredService<IEventService>();
126-
var deviceDiscoveryService = provider.GetRequiredService<IDeviceDiscoveryService>();
127-
var deviceServer = provider.GetRequiredService<IDeviceServer>();
128-
return new RealPluginManager(pluginServer, eventService, deviceDiscoveryService, deviceServer, provider.GetRequiredService<IDeviceHttpClient>());
129-
});
130-
131-
// RealPluginManager is pre-resolved by the caller after BuildServiceProvider().
132-
133101
// Phase 5: Announcement Service
134102
Log.Information("Registering IAnnouncementService...");
135103
services.AddSingleton<IAnnouncementService, AnnouncementManager>();
136104

137-
// KCS File Services
138-
Log.Information("Registering IKcsFileService...");
139-
services.AddSingleton<IKcsFileService, KcsFileService>();
140-
141-
// Block Script Services
142-
Log.Information("Registering IBlockScriptParser...");
143-
services.AddSingleton<IBlockScriptParser, KitX.Core.Workflow.BlockScripting.BlockScriptParser>(provider =>
144-
{
145-
var funcRegistry = provider.GetService<BuiltinFunctionRegistry>();
146-
var service = new KitX.Core.Workflow.BlockScripting.BlockScriptParser(funcRegistry);
147-
return service;
148-
});
149-
150-
Log.Information("Registering IBlockScriptExecutor...");
151-
services.AddSingleton<IBlockScriptExecutor, KitX.Core.Workflow.BlockScripting.BlockScriptExecutor>(provider =>
152-
{
153-
var service = new KitX.Core.Workflow.BlockScripting.BlockScriptExecutor();
154-
// Resolve RealPluginManager from DI to ensure same instance
155-
try
156-
{
157-
var pluginManager = provider.GetRequiredService<RealPluginManager>();
158-
service.SetPluginManager(pluginManager);
159-
Log.Information("[DI] IBlockScriptExecutor: RealPluginManager HashCode = {HashCode}", pluginManager.GetHashCode());
160-
}
161-
catch (Exception ex)
162-
{
163-
Log.Error(ex, "[DI] Could not initialize BlockScriptExecutor with RealPluginManager from DI container");
164-
}
165-
return service;
166-
});
167-
168-
Log.Information("Registering IBlockScopeManager...");
169-
services.AddSingleton<IBlockScopeManager, KitX.Core.Workflow.BlockScripting.BlockScopeManager>();
170-
171-
// Blueprint Sub-services (must be registered before IBlueprintService)
172-
Log.Information("Registering Blueprint sub-services...");
173-
174-
// Discover and register all IBuiltinFunctionDefinition implementations
175-
var functionRegistry = BuiltinFunctionRegistry.Discover(typeof(BuiltinFunctionRegistry).Assembly);
176-
services.AddSingleton(functionRegistry);
177-
178-
// NodeRegistry with function registry for dynamic node creation
179-
services.AddSingleton<INodeRegistry>(provider =>
180-
{
181-
var reg = provider.GetRequiredService<BuiltinFunctionRegistry>();
182-
return new NodeRegistry(reg);
183-
});
184-
185-
services.AddSingleton<ILayoutService, LayoutService>();
186-
services.AddSingleton<IBlueprintRenderDataService, BlueprintRenderDataService>();
187-
188-
// Blueprint Converters
189-
Log.Information("Registering IBlockScriptToBlueprintConverter...");
190-
services.AddSingleton<IBlockScriptToBlueprintConverter>(provider =>
191-
{
192-
var parser = provider.GetRequiredService<IBlockScriptParser>();
193-
var nodeRegistry = provider.GetRequiredService<INodeRegistry>();
194-
var layoutService = provider.GetRequiredService<ILayoutService>();
195-
var funcRegistry = provider.GetService<BuiltinFunctionRegistry>();
196-
return new BlockScriptToBlueprintConverter(parser, nodeRegistry, layoutService, funcRegistry!);
197-
});
198-
Log.Information("Registering IBlueprintToBlockScriptConverter...");
199-
services.AddSingleton<IBlueprintToBlockScriptConverter, BlueprintToBlockScriptConverter>();
200-
201-
// Blueprint Export Strategies — all auto-registered from IBuiltinFunctionDefinition implementations
202-
Log.Information("Registering auto-discovered builtin function export strategies...");
203-
foreach (var def in functionRegistry.AllDefinitions)
204-
{
205-
services.AddSingleton<INodeExportStrategy>(new BuiltinFunctionExportStrategyAdapter(def));
206-
}
207-
208-
// Blueprint Services
209-
Log.Information("Registering IBlueprintService...");
210-
services.AddSingleton<IBlueprintService, BlueprintService>();
211-
212-
// Workflow Storage Service
213-
Log.Information("Registering IWorkflowStorageService...");
214-
services.AddSingleton<IWorkflowStorageService, WorkflowStorageService>();
215-
216-
// Trigger Manager
217-
Log.Information("Registering TriggerManager...");
218-
services.AddSingleton<TriggerManager>();
105+
// Workflow Services — full graph registered by the KitX.Workflow library.
106+
// This includes RealPluginManager (registered as a singleton so PluginsServer and
107+
// WorkflowScriptService share the same instance and receive plugin connection events;
108+
// the caller pre-resolves it after BuildServiceProvider()).
109+
services.AddKitXWorkflow();
219110

220111
// IMPORTANT: Do NOT call BuildServiceProvider() here.
221112
// The caller is responsible for building the single IServiceProvider and passing it

KitX Clients/KitX Core/KitX.Core/Device/DeviceHttpClient.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,18 @@
11
using System.Text;
22
using System.Text.Json;
33
using System.Text.Json.Serialization;
4+
using KitX.Core.Contract.Device;
45
using KitX.Shared.CSharp.Device;
56
using KitX.Shared.CSharp.WebCommand;
67
using Serilog;
78

89
namespace KitX.Core.Device;
910

10-
/// <summary>
11-
/// Interface for device HTTP client — sends requests to remote DevicesServer instances.
12-
/// Used for cross-device plugin invocation via the /Api/V1/Plugin/Invoke endpoint.
13-
/// </summary>
14-
public interface IDeviceHttpClient
15-
{
16-
/// <summary>
17-
/// Invokes a plugin method on a remote device via HTTP POST to /Api/V1/Plugin/Invoke.
18-
/// </summary>
19-
/// <param name="targetDevice">Target device info (contains IPv4 and DevicesServerPort)</param>
20-
/// <param name="token">Valid session token for the target device</param>
21-
/// <param name="request">The Request object to send</param>
22-
/// <param name="ct">Cancellation token</param>
23-
/// <returns>HTTP response from remote device, or null on network error</returns>
24-
Task<HttpResponseMessage?> InvokePluginAsync(
25-
DeviceInfo targetDevice,
26-
string token,
27-
Request request,
28-
CancellationToken ct = default);
29-
}
30-
3111
/// <summary>
3212
/// Device HTTP client implementation.
3313
/// Sends plugin invoke requests to remote DevicesServer over HTTP.
3414
/// Protocol compatible with legacy PluginControllerExtensions.RemoteInvoke.
15+
/// Implements the <see cref="IDeviceHttpClient"/> contract now defined in KitX.Core.Contract.
3516
/// </summary>
3617
public class DeviceHttpClient : IDeviceHttpClient
3718
{

KitX Clients/KitX Core/KitX.Core/KitX.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<ProjectReference Include="..\..\..\KitX Standard\KitX Script\Kscript.CSharp.Parser\Kscript.CSharp.Parser.csproj" Condition="false" />
3030
<ProjectReference Include="..\..\..\KitX Standard\KitX Shared\KitX.Shared.CSharp\KitX.Shared.CSharp.csproj" />
3131
<ProjectReference Include="..\..\..\KitX Standard\KitX Contracts\KitX.Contract.CSharp\KitX.Contract.CSharp.csproj" />
32+
<ProjectReference Include="..\..\KitX Workflow\KitX.Workflow\KitX.Workflow.csproj" />
3233
</ItemGroup>
3334

3435
<ItemGroup>

KitX Clients/KitX Core/KitX.Core/Workflow/BlockScriptServiceImpl.cs renamed to KitX Clients/KitX Workflow/KitX.Workflow/BlockScriptServiceImpl.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
using KitX.Core.Contract.Workflow;
2-
using KitX.Core.Workflow.BlockScripting;
1+
using KitX.Core.Contract.Workflow;
2+
using KitX.Workflow.BlockScripting;
3+
using KitX.Workflow.Contract;
34
using Serilog;
45

5-
namespace KitX.Core.Workflow;
6+
namespace KitX.Workflow;
67

78
/// <summary>
89
/// BlockScript parsing and execution service.
9-
/// Implements IBlockScriptService.
10+
/// Implements both the public <c>IBlockScriptService</c> (Dashboard-facing, source-string
11+
/// based methods) and the internal <c>IBlockScriptPipelineService</c> (parsed-model based
12+
/// methods consumed only by the workflow pipeline).
1013
/// </summary>
11-
internal class BlockScriptServiceImpl : IBlockScriptService
14+
internal class BlockScriptServiceImpl : IBlockScriptService, IBlockScriptPipelineService
1215
{
1316
private readonly WorkflowRuntimeState _state;
1417
private RealPluginManager? _realPluginManager;

KitX Clients/KitX Core/KitX.Core/Workflow/BlockScripting/BlockScopeManager.cs renamed to KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockScopeManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using KitX.Core.Contract.Workflow;
1+
using KitX.Core.Contract.Workflow;
22

3-
namespace KitX.Core.Workflow.BlockScripting;
3+
namespace KitX.Workflow.BlockScripting;
44

55
/// <summary>
66
/// Block scope manager implementation - manages variable scoping for block scripts

KitX Clients/KitX Core/KitX.Core/Workflow/BlockScripting/BlockScriptExecutionGlobals.cs renamed to KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockScriptExecutionGlobals.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using KitX.Core.Contract.Workflow;
1+
using KitX.Core.Contract.Workflow;
22

3-
namespace KitX.Core.Workflow.BlockScripting;
3+
namespace KitX.Workflow.BlockScripting;
44

55
/// <summary>
66
/// Script globals for block script execution — 仅保留核心手脚架。

KitX Clients/KitX Core/KitX.Core/Workflow/BlockScripting/BlockScriptExecutor.cs renamed to KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockScriptExecutor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
using System.Diagnostics;
1+
using System.Diagnostics;
22
using KitX.Core.Contract.Workflow;
33
using Serilog;
4-
using KitX.Core.Workflow.CFG;
4+
using KitX.Workflow.CFG;
55

6-
using KitX.Core.Workflow.Conversion;
7-
namespace KitX.Core.Workflow.BlockScripting;
6+
using KitX.Workflow.Conversion;
7+
namespace KitX.Workflow.BlockScripting;
88

99
/// <summary>
1010
/// Block script executor using full-script assembly compilation.

KitX Clients/KitX Core/KitX.Core/Workflow/BlockScripting/BlockScriptParser.cs renamed to KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockScriptParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
using KitX.Core.Contract.Workflow;
1+
using KitX.Core.Contract.Workflow;
22
using Serilog;
33

4-
namespace KitX.Core.Workflow.BlockScripting;
4+
namespace KitX.Workflow.BlockScripting;
55

66
/// <summary>
77
/// Block script parser implementation.

0 commit comments

Comments
 (0)