これからヘッダーを小分けにしていくのに、 前方宣言を使いたいのだけどその時に typedef に配慮が必要です。

unknown: html => {"type":"html","value":"<!-- truncate -->","position":{"start":{"line":5,"column":1,"offset":59},"end":{"line":5,"column":18,"offset":76}}}
typedef struct NodeTag
{
  const char *name;
  struct NodeTag *next; // 👈  
} Node;
// 前方宣言
struct Node; // これはだめ
struct NodeTag; // こっちが必要

// ならば同名にすれば?
typedef struct Node
{
  const char *name;
  struct Node *next; // 👈  
} Node;
// 前方宣言
struct Node; 

// 参照するときに struct が要る
void addLink(struct Node* node, struct Node* next);
struct Node
{
  const char *name;
  Node *next;
};
// 前方宣言
struct Node; // OK

// 楽
void addLink(Node* node, Node* next);

なので struct の typedef を削除します。 ほぼ単純作業です。

ついでにポインタ型typedefもやめる

typedef struct _Str {
    char *ptr;
    int length;
    int area_size;
} *Str;

わずかに記述量を節約できるのだけど、 前方宣言で疎結合に変えるときに引っかかるのでやめます。

Str a, b; // ささる注意