feat: introduce archify skill for generating architecture diagrams

- Added a new Archify skill, enabling users to create polished architecture, workflow, sequence, data-flow, and lifecycle diagrams.
- Implemented comprehensive functionality including rendering, validation, and delivery of diagrams in various formats.
- Integrated a user-friendly command-line interface for generating and previewing diagrams.
- Developed supporting files including package.json, LICENSE, and SKILL.md for documentation and licensing.
- Added unit tests to ensure reliability and functionality of the new skill.

These changes enhance the application by providing a structured approach to visualizing system architecture and workflows, improving user experience and data representation.
This commit is contained in:
shancheas
2026-08-31 11:31:29 +07:00
parent 050fafd731
commit 166e0d40ac
221 changed files with 191228 additions and 1 deletions
@@ -0,0 +1,37 @@
import { parse, parseFragment } from 'parse5';
import { SaxesParser } from 'saxes';
function visit(node, callback, insideSvg = false) {
callback(node, insideSvg);
const childInsideSvg = insideSvg || node.tagName === 'svg';
for (const child of node.childNodes || []) visit(child, callback, childInsideSvg);
if (node.content) visit(node.content, callback, childInsideSvg);
}
export function parseXml(source) {
return new SaxesParser({ xmlns: true }).write(source).close();
}
export function extractSvgs(markup, fragment = false) {
const document = fragment
? parseFragment(markup, { sourceCodeLocationInfo: true })
: parse(markup, { sourceCodeLocationInfo: true });
const direct = [];
const srcdocs = [];
visit(document, (node, insideSvg) => {
if (node.tagName === 'svg' && !insideSvg && node.sourceCodeLocation) {
direct.push(markup.slice(node.sourceCodeLocation.startOffset, node.sourceCodeLocation.endOffset));
}
const srcdoc = node.attrs?.find((attribute) => attribute.name === 'srcdoc');
if (srcdoc) srcdocs.push(srcdoc.value);
});
return {
direct,
embedded: srcdocs.flatMap((srcdoc) => {
const nested = extractSvgs(srcdoc, true);
return [...nested.direct, ...nested.embedded];
}),
};
}