メッセージシーケンスを調べる
特定のメッセージからの流れを出力する例です。
public void GetSendMessages(ICommandContext c, ICommandParams p)
{
    ISequenceDiagram sequenceDiagram = c.App.Workspace.CurrentEditor as ISequenceDiagram;
    if (sequenceDiagram == null) return;
    // 起点となるメッセージを取得します
    var message = sequenceDiagram.GetSelectedShapes().FirstOrDefault() as IMessageShape;
    // 起点となるメッセージが、応答メッセージの場合は処理を終了します
    if (message.GetMessageKind() == "reply") return;
    // メッセージ情報を出力します
    OutputMessageInfo(message, c);
}
// 対象メッセージを起点とするメッセージ情報を出力します
private void OutputMessageInfo(IMessageShape message, ICommandContext c)
{
    OutputLog(message, c);
    var receivePort = message.ReceivePort;
    // メッセージの受信先が実行仕様の場合、次のメッセージを辿ります
    if (receivePort is IExecutionSpecificationShape executionSpecification)
    {
        foreach (IMessageShape sendMessage in executionSpecification.SendMessages)
        {
            if (sendMessage.GetMessageKind() == "reply") continue;
            OutputMessageInfo(sendMessage, c);
        }
    }
}
// メッセージ情報を出力します
 private void OutputLog(IMessageShape message, ICommandContext c)
{
    // メッセージ情報(送信元・受信先を含む)を出力します
    c.App.Output.WriteLine("sample", $"{message.GetSendPortText()} -> {message.GetReceivePortText()} : {message.Text}");
}
public static class IMessageShapeExtension
{
    // メッセージの種類を取得します
    public static string GetMessageKind(this IMessageShape self)
    {
        return ((IMessage) self.Model).Kind;
    }
    // 送信元ポートのテキストを取得します
    public static string GetSendPortText(this IMessageShape self)
    {
        return GetMessagePortText(self.SendPort);
    }
    // 受信先ポートのテキストを取得します
    public static string GetReceivePortText(this IMessageShape self)
    {
        return GetMessagePortText(self.ReceivePort);
    }
    // メッセージ端点のテキストを取得します
    private static string GetMessagePortText(IMessagePortShape messagePort)
    {
        // メッセージ端の種類により、出力するテキストを取得します
        switch (messagePort)
        {
            case IFrameShape frame:
                return frame.Text;
            case IExecutionSpecificationShape executionSpecification:
                return executionSpecification.Lifeline.Text;
            case IMessageEndShape messageEnd:
                return "メッセージ端";
        }
        return string.Empty;
    }
}