Replace Probe with Agent across node runtime, Fleet contracts, backend state, API and storage. Report incoming sessions and outgoing link health through each Agent uplink, and retain directed link controls and retry. Update protocol fixtures and end-to-end coverage for the unified model; accept requested cancellation during the Fleet timeout test cleanup.
57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using System.Text.Json.Serialization;
|
||
using Fleet.Core;
|
||
|
||
namespace MoShiro.Protocol;
|
||
|
||
[JsonConverter(typeof(TaskIdJsonConverter))]
|
||
public readonly record struct TaskId(string Value)
|
||
{
|
||
public const string Prefix = "tsk";
|
||
|
||
public override string ToString() => Value;
|
||
}
|
||
|
||
[JsonConverter(typeof(TestIdJsonConverter))]
|
||
public readonly record struct TestId(string Value)
|
||
{
|
||
public const string Prefix = "tst";
|
||
|
||
public override string ToString() => Value;
|
||
}
|
||
|
||
/// <summary>原始块 ID(UUIDv7,同时是发件箱的 msg_id)。</summary>
|
||
[JsonConverter(typeof(ChunkIdJsonConverter))]
|
||
public readonly record struct ChunkId(Guid Value)
|
||
{
|
||
public static ChunkId New(TimeProvider time) => new(Guid.CreateVersion7(time.GetUtcNow()));
|
||
|
||
public override string ToString() => Value.ToString();
|
||
}
|
||
|
||
public static class AgentIds
|
||
{
|
||
/// <summary>Agent 就是 Fleet 节点,ID 前缀为 <c>agt</c>。</summary>
|
||
public const string Prefix = "agt";
|
||
}
|
||
|
||
public sealed class TaskIdJsonConverter : StringIdJsonConverter<TaskId>
|
||
{
|
||
protected override TaskId Create(string value) => new(value);
|
||
|
||
protected override string GetValue(TaskId id) => id.Value;
|
||
}
|
||
|
||
public sealed class TestIdJsonConverter : StringIdJsonConverter<TestId>
|
||
{
|
||
protected override TestId Create(string value) => new(value);
|
||
|
||
protected override string GetValue(TestId id) => id.Value;
|
||
}
|
||
|
||
public sealed class ChunkIdJsonConverter : StringIdJsonConverter<ChunkId>
|
||
{
|
||
protected override ChunkId Create(string value) => new(Guid.Parse(value));
|
||
|
||
protected override string GetValue(ChunkId id) => id.Value.ToString();
|
||
}
|