Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
b826290
💾 Feat: Workflow UI Base
StardustSeemsInk Feb 9, 2025
81b32a3
💾 Feat(Kscript.CSharp): 添加接口和服务类以支持设备和插件功能-初始化
StardustSeemsInk Feb 9, 2025
c5e413e
💾 🐛Feat, Bug(Kscript.CSharp): 更新接口以支持新功能,移除不必要的网络连接器,未找到合适的获取网络广播信息的方法
StardustSeemsInk Feb 9, 2025
9ba9d8e
🔧 Fix(Kscript.CSharp): 修改接口以使用字符串数组作为参数,重命名方法参数以提高可读性
StardustSeemsInk Feb 10, 2025
93b834d
💾 Feat(Kscript.CSharp): 添加对 System.Text.Json 的支持,更新接口以返回可空类型,优化插件列表获取…
StardustSeemsInk Feb 11, 2025
c759c6a
💾 Feat(Kscript.CSharp): 更新服务类以支持可选的 Connector 参数,优化插件和设备实例化逻辑
StardustSeemsInk Feb 15, 2025
d72cb55
💾 Feat(Kscript.CSharp): 添加设备事件监听器接口和网络工具类,提供设备状态更新和网络地址检查功能-想重构它
StardustSeemsInk Feb 15, 2025
090432d
💾 Feat(Kscript.CSharp.Parser): 创建并初步实现从插件信息列表Json文件生成插件静态API,使C#脚本能无感…
StardustSeemsInk Jul 29, 2025
9c6eda2
💾 Feat(Kscript.CSharp.Parser): 尝试适配Dashboard的插件管理器(未完成,待优化)
StardustSeemsInk Nov 7, 2025
fdbbfef
🧩 Refactor(Parser): 大幅优化代码结构,删除不必要逻辑并修复潜在隐患
StardustSeemsInk Nov 8, 2025
010e095
📄 Docs(README, USAGE): 更新文档适配最新架构
StardustSeemsInk Nov 8, 2025
6fa0986
🧩 Refactor(Examples): 将基础用法示例和实际插件管理器使用示例拆出为独立程序
StardustSeemsInk Nov 8, 2025
a1ad5e7
💾 Feat(MethodEmitter, AssemblyCache): 添加可收集的程序集加载上下文,支持动态程序集的卸载与清理;更新…
StardustSeemsInk Nov 8, 2025
92fa4d1
💾 Feat(Examples): 添加端到端测试和脚本执行示例,验证插件调用链和脚本执行功能
StardustSeemsInk Nov 8, 2025
e80de9d
🔧 Fix(Examples): 移除基础用法示例和实际插件管理器示例,复制示例数据至新测试项目
StardustSeemsInk Nov 8, 2025
ea85a5a
🔧 Fix(ScriptExecutor): 移除不必要的命名空间引用“System.Console”以简化脚本选项
StardustSeemsInk Nov 8, 2025
3512cc5
💾 Feat(RealPluginManager, IPluginServiceProvider): 重构插件管理器以使用插件服务提供者接…
StardustSeemsInk Feb 13, 2026
4c0b44d
💾 Feat(KitX.Core.Contract): Add KitX.Core.Contract to provide standa…
StardustSeemsInk Feb 20, 2026
be9302d
💾 📝 Feat(IPluginInstallation): Added Id parameter to IPluginInstallat…
StardustSeemsInk Feb 25, 2026
dd21efb
💾 🧩 Feat, Refactor: 迁移并整理配置与设备安全相关功能的接口。
StardustSeemsInk Mar 10, 2026
05cc000
💾 Feat(Kscript.CSharp.Parser): 使用由插件原始设置的参数名称而不是索引作为参数名称;适配参数的IsOptio…
StardustSeemsInk Mar 15, 2026
bc08809
💾 Feat(Workflow): 进一步实现Workflow脚本功能
StardustSeemsInk Mar 18, 2026
13ae5c6
💾 Feat(Workflow): 为block script特性预设接口
StardustSeemsInk Mar 19, 2026
eba7ee4
💾 Feat(Workflow): 为block script特性预设接口
StardustSeemsInk Mar 19, 2026
314b184
💾 Feat(Workflow): 更新块脚本模型和接口,添加循环块支持及执行结果处理
StardustSeemsInk Mar 24, 2026
691241f
💾 Feat(Blueprint): 更新块脚本获取逻辑,优先检查循环块;添加蓝图可视化数据支持;新增节点模板接口及定义
StardustSeemsInk Mar 30, 2026
cc7f85e
💾 Feat(Blueprint): 添加节点创建和布局服务接口;优化蓝图连接添加逻辑以避免重复
StardustSeemsInk Apr 1, 2026
1046378
💾 Feat(Blueprint): 添加蓝图渲染数据类及服务接口,用于分类执行和数据连接
StardustSeemsInk Apr 4, 2026
5693426
🧩 Refactor(Blueprint): 优化代码结构
StardustSeemsInk Apr 5, 2026
46442b1
🧩 Refactor(Blueprint): 引入节点注册表与策略模式,消除(添加新内置节点时的)散弹式修改
StardustSeemsInk Apr 6, 2026
302d65f
💾 Feat(Workflow): Implement Blueprint service - bp2bs
StardustSeemsInk Apr 7, 2026
0740abe
💾 Feat(Blueprint): 添加源代码重生方法并优化节点构造函数以使用描述符初始化引脚
StardustSeemsInk Apr 7, 2026
dd7a554
💾 Feat(Blueprint): 添加多态 JSON 序列化支持,以确保具体节点类型通过 System.Text.Json 正确回传
StardustSeemsInk Apr 9, 2026
1788c03
💾 Feat(Workflow): 添加 IWorkflowEditorBridge 接口以支持 BlueprintEditor 和 Wo…
StardustSeemsInk Apr 9, 2026
ff4aa0d
💾 Feat(Blueprint): 添加 VariableNode 类型与常量覆盖执行接口
StardustSeemsInk Apr 9, 2026
27bbe78
💾 Feat(Contract): IPluginServer 接口新增 Connections 属性
StardustSeemsInk Apr 10, 2026
639b79d
💾 Feat(Blueprint): 添加 BuiltinFunctionNode 类型及其在 INodeRegistry 中的创建方法
StardustSeemsInk Apr 10, 2026
4dead35
🔧 Fix(Kscript): 修复 Device/Function/Plugin 服务类的可空引用类型编译警告
StardustSeemsInk Apr 11, 2026
88f7e0a
💾 Feat(Workflow): 扩展 IWorkflowCase 模型,IconPath 改为 Author,新增时间戳与触发类型字段…
StardustSeemsInk Apr 11, 2026
4c0b204
💾 Feat(Event): 新增 WorkflowRenamedEventArgs 和 WorkflowSavedEventArgs 事…
StardustSeemsInk Apr 11, 2026
1ce4ddf
💾 Feat(Workflow): 扩展 WorkflowSavedEventArgs 支持 Description 与 Author 字段同步
StardustSeemsInk Apr 12, 2026
aeb466d
💾 Feat(Trigger): 添加插件触发器支持,新增 TriggerConfig 类及相关事件参数,扩展工作流执行结果和错误状态处理
StardustSeemsInk Apr 13, 2026
8f2ee17
💾 Feat(Plugin): 新增 IPluginManager 接口及 PluginCallInfo 类,支持插件调用和参数传递;扩展…
StardustSeemsInk Apr 14, 2026
7d38df8
💾 Feat(CallNode): 添加 TargetDevice 属性以支持跨设备调用;更新 GetDisplayTitle 方法以显示…
StardustSeemsInk Apr 18, 2026
7ff6a86
🧩Refactor: 架构规范性梳理和God Classes拆分
StardustSeemsInk Apr 19, 2026
9495389
💾 Feat(CallNode): 添加 TargetDevice 属性以支持跨设备调用;更新 GetDisplayTitle 方法以显示…
StardustSeemsInk Apr 20, 2026
6cf48eb
💾 Feat(ISecurityConfig): 添加 DeviceLocator 和 RsaPublicKeyPem 属性以增强设备密钥接口
StardustSeemsInk Apr 27, 2026
f8509d2
💾 Feat(DeviceService): 添加设备登录状态检查、获取设备令牌及已登录设备列表功能;新增 ServerStatus 枚举
StardustSeemsInk May 2, 2026
ddd94f7
🧩Refactor: 移除不再使用的脚本执行接口和主程序分析结果类
StardustSeemsInk May 5, 2026
8d1243f
💾🧩 Feat, Refactor(Contract): 扩展CFG调试接口与AST节点身份追踪能力
StardustSeemsInk May 17, 2026
51da134
🧩Refactor: 移除不再使用的节点类型(BranchNode、BreakNode、GetNode、LoopNode、PauseNod…
StardustSeemsInk May 18, 2026
6d12db2
🧩 Refactor(Workflow): 瘦身 Core.Contract 至 Dashboard 公共契约面-新增 ITriggerM…
StardustSeemsInk Jun 15, 2026
bed8756
Merge pull request #5 from Crequency/dev=Workflow-Sep
StardustSeemsInk Jun 17, 2026
c1671fa
🧩 Refactor(Contract): 删除 IWorkflowEditorBridge 接口
StardustSeemsInk Jun 17, 2026
7d256fc
💾 Feat(Workflow): 添加 RunWorkflowWithDetailsAsync 方法以返回完整执行结果和 Print() 输出
StardustSeemsInk Jun 19, 2026
d9996ce
🧩 Refactor(Contract): 新增 BranchArm 与 VariadicPinSpec,扩展 NodeDescriptor
StardustSeemsInk Jun 19, 2026
03f800f
🧩 Refactor(Workflow): NodeDescriptor去死字段-KISS优化阶段L0
StardustSeemsInk Jun 20, 2026
829afd3
🧩 Refactor(Workflow): BranchArm.Clone-KISS优化阶段L1
StardustSeemsInk Jun 20, 2026
da48fc4
🧩 Refactor(Workflow): 抽取ControlFlowArms共享值对象-KISS优化阶段L5
StardustSeemsInk Jun 20, 2026
2b82702
🧩 Refactor(Workflow): 移除 IWorkflowPluginService 和 IWorkflowCase 中的冗余字段
StardustSeemsInk Jun 20, 2026
8276213
🧩 Refactor(Workflow.Contract): 移除无消费者的工作流接口成员-死代码清理
StardustSeemsInk Jun 20, 2026
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
44 changes: 44 additions & 0 deletions KitX Contracts/KitX.Contract.CSharp/TriggerHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using KitX.Shared.CSharp.WebCommand;
using KitX.Shared.CSharp.WebCommand.Infos;

namespace KitX.Contract.CSharp;

/// <summary>
/// 插件触发器辅助工具。插件通过此类发送触发信号到 Dashboard。
/// 触发器是纯信号,不携带业务数据。工作流被触发后通过调用插件函数获取数据。
/// </summary>
public static class TriggerHelper
{
private static readonly JsonSerializerOptions _options = new()
{
WriteIndented = false,
IncludeFields = true,
PropertyNameCaseInsensitive = true,
};

/// <summary>
/// 触发一个信号事件
/// </summary>
/// <param name="sendAction">SetSendCommandAction 提供的发送回调</param>
/// <param name="triggerName">触发器名称</param>
public static void FireTrigger(Action<Request>? sendAction, string triggerName)
{
if (sendAction is null) return;

var request = new Request
{
Type = RequestTypes.Command,
Version = RequestVersions.V1,
Content = JsonSerializer.Serialize(new Command
{
Request = CommandRequestInfo.TriggerFired,
Tags = new Dictionary<string, string> { { "TriggerName", triggerName } }
}, _options)
};

sendAction.Invoke(request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;

namespace KitX.Core.Contract.Activity;

/// <summary>
/// Activity management service interface
/// </summary>
public interface IActivityService
{
/// <summary>
/// Records app start event
/// </summary>
void RecordAppStart();

/// <summary>
/// Records app exit event
/// </summary>
void RecordAppExit();

/// <summary>
/// Records an activity
/// </summary>
/// <param name="type">The activity type</param>
/// <param name="details">Optional details</param>
void RecordActivity(string type, Dictionary<string, object>? details = null);

/// <summary>
/// Gets activities
/// </summary>
/// <param name="startDate">Optional start date</param>
/// <param name="endDate">Optional end date</param>
/// <param name="limit">Maximum number of activities to return</param>
/// <returns>List of activities</returns>
IList<IActivity> GetActivities(DateTime? startDate = null, DateTime? endDate = null, int limit = 100);

/// <summary>
/// Gets activity statistics
/// </summary>
/// <param name="startDate">Start date</param>
/// <param name="endDate">End date</param>
/// <returns>Activity statistics</returns>
IActivityStatistics GetStatistics(DateTime startDate, DateTime endDate);

/// <summary>
/// Event raised when activities are updated
/// </summary>
event EventHandler? ActivitiesUpdated;
}

/// <summary>
/// Activity interface
/// </summary>
public interface IActivity
{
/// <summary>
/// Gets the activity ID
/// </summary>
string Id { get; }

/// <summary>
/// Gets the activity type
/// </summary>
string Type { get; }

/// <summary>
/// Gets the timestamp
/// </summary>
DateTime Timestamp { get; }

/// <summary>
/// Gets the details
/// </summary>
Dictionary<string, object> Details { get; }
}

/// <summary>
/// Activity statistics interface
/// </summary>
public interface IActivityStatistics
{
/// <summary>
/// Gets the total number of activities
/// </summary>
int TotalActivities { get; }

/// <summary>
/// Gets the activities grouped by type
/// </summary>
Dictionary<string, int> ActivitiesByType { get; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
using KitX.Core.Contract.Configuration;

namespace KitX.Core.Contract.Announcement;

/// <summary>
/// Announcement service interface
/// </summary>
public interface IAnnouncementService
{
/// <summary>
/// Gets the announcement configuration
/// </summary>
IAnnouncementConfig AnnouncementConfig { get; }

/// <summary>
/// Checks for new announcements
/// </summary>
/// <returns>List of new announcements</returns>
Task<IReadOnlyList<IAnnouncement>> CheckNewAnnouncementsAsync();

/// <summary>
/// Marks an announcement as read
/// </summary>
/// <param name="announcementId">The announcement ID</param>
void MarkAsRead(string announcementId);

/// <summary>
/// Gets all read announcement IDs
/// </summary>
/// <returns>List of read announcement IDs</returns>
IReadOnlyList<string> GetReadAnnouncementIds();

/// <summary>
/// Saves the announcement configuration
/// </summary>
void SaveAnnouncementConfig();

/// <summary>
/// Event raised when new announcements are available
/// </summary>
event EventHandler<NewAnnouncementsEventArgs>? NewAnnouncementsAvailable;
}

/// <summary>
/// Announcement interface
/// </summary>
public interface IAnnouncement
{
/// <summary>
/// Gets the announcement ID
/// </summary>
string Id { get; }

/// <summary>
/// Gets the announcement title
/// </summary>
string Title { get; }

/// <summary>
/// Gets the announcement content
/// </summary>
string Content { get; }

/// <summary>
/// Gets the publish date
/// </summary>
DateTime PublishDate { get; }

/// <summary>
/// Gets the version
/// </summary>
string Version { get; }
}

/// <summary>
/// New announcements event arguments
/// </summary>
public class NewAnnouncementsEventArgs : EventArgs
{
/// <summary>
/// Gets or sets the announcements
/// </summary>
public IReadOnlyList<IAnnouncement> Announcements { get; set; } = Array.Empty<IAnnouncement>();

/// <summary>
/// Gets or sets announcements as dictionary (date -> content)
/// </summary>
public Dictionary<string, string>? AnnouncementsDict { get; set; }
}

/// <summary>
/// Announcement error event arguments
/// </summary>
public class AnnouncementErrorEventArgs : EventArgs
{
/// <summary>
/// Gets or sets the error message
/// </summary>
public string ErrorMessage { get; set; } = string.Empty;

/// <summary>
/// Gets or sets the stack trace
/// </summary>
public string StackTrace { get; set; } = string.Empty;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;

namespace KitX.Core.Contract.Configuration;

/// <summary>
/// Configuration changed event arguments
/// </summary>
public class ConfigChangedEventArgs : EventArgs
{
/// <summary>
/// Gets or sets the configuration type (e.g., "App", "Plugins", "Security")
/// </summary>
public string ConfigType { get; set; } = string.Empty;

/// <summary>
/// Gets or sets the property name that changed
/// </summary>
public string PropertyName { get; set; } = string.Empty;

/// <summary>
/// Gets or sets the old value
/// </summary>
public object? OldValue { get; set; }

/// <summary>
/// Gets or sets the new value
/// </summary>
public object? NewValue { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace KitX.Core.Contract.Configuration;

/// <summary>
/// Activity configuration section
/// </summary>
public interface IActivityConf
{
int TotalRecorded { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Collections.Generic;

namespace KitX.Core.Contract.Configuration;

public interface IAnnouncementConfig
{
/// <summary>
/// Gets or sets the list of accepted announcement IDs
/// </summary>
List<string> Accepted { get; set; }

/// <summary>
/// Gets or sets the config file location
/// </summary>
string? ConfigFileLocation { get; set; }
}
68 changes: 68 additions & 0 deletions KitX Core Contracts/KitX.Core.Contract/Configuration/IAppConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using System.Collections.Generic;

namespace KitX.Core.Contract.Configuration;

/// <summary>
/// Application configuration interface (complete structure)
/// </summary>
public interface IAppConfig
{
/// <summary>
/// Gets or sets the application configuration
/// </summary>
IAppConf App { get; set; }

/// <summary>
/// Gets or sets the windows configuration
/// </summary>
IWindowsConf Windows { get; set; }

/// <summary>
/// Gets or sets the pages configuration
/// </summary>
IPagesConf Pages { get; set; }

/// <summary>
/// Gets or sets the web configuration
/// </summary>
IWebConf Web { get; set; }

/// <summary>
/// Gets or sets the log configuration
/// </summary>
ILogConf Log { get; set; }

/// <summary>
/// Gets or sets the IO configuration
/// </summary>
IIOConf IO { get; set; }

/// <summary>
/// Gets or sets the activity configuration
/// </summary>
IActivityConf Activity { get; set; }

/// <summary>
/// Gets or sets the loaders configuration
/// </summary>
ILoadersConf Loaders { get; set; }
}

/// <summary>
/// Application configuration section
/// </summary>
public interface IAppConf
{
string IconFileName { get; set; }
string CoverIconFileName { get; set; }
string AppLanguage { get; set; }
string Theme { get; set; }
string ThemeColor { get; set; }
Dictionary<string, string> SurpportLanguages { get; set; }
string LocalPluginsFileFolder { get; set; }
string LocalPluginsDataFolder { get; set; }
bool DeveloperSetting { get; set; }
bool ShowAnnouncementWhenStart { get; set; }
ulong RanTime { get; set; }
int LastBreakAfterExit { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
namespace KitX.Core.Contract.Configuration;

/// <summary>
/// Loads configuration from files
/// </summary>
public interface IConfigLoader
{
/// <summary>
/// Loads a config file from the specified location
/// </summary>
/// <typeparam name="T">Config type</typeparam>
/// <param name="location">Directory path</param>
/// <param name="fileName">File name</param>
/// <returns>The loaded config or default</returns>
T Load<T>(string location, string fileName) where T : class, new();

/// <summary>
/// Loads SecurityConfig with special handling
/// </summary>
ISecurityConfig LoadSecurityConfig(string location);
}
Loading
Loading