Markdown Converter
Agent skill for markdown-converter
Macrograph is a visual programming platform with node-based graph interfaces. Supports both desktop (single-project) and server (multi-project) environments with real-time event processing and type-safe ID management.
Loading actions...
Macrograph is a visual programming platform with node-based graph interfaces. Supports both desktop (single-project) and server (multi-project) environments with real-time event processing and type-safe ID management.
This guide provides essential information for working with Macrograph. For detailed technical documentation, see the agents/ folder.
Schema.brand() (ProjectId, GraphId, NodeId, PackageId, SchemaId)NEVER use as type assertions. Always use .make() methods:
// ✅ CORRECT
const projectId = ProjectId.make(123);
const packageId = PackageId.make("core");
// ❌ INCORRECT - Never do this
const projectId = 123 as ProjectId;
Always work within Effect context:
const program = Effect.gen(function* () {
const projectService = yield* ProjectService;
return yield* projectService.get();
});
Use Effect's error channels, not try-catch:
yield* pipe(
operation(),
Effect.catchTag("ProjectNotFoundError", () => Effect.succeed(defaultProject))
);
Use immutable patterns:
yield* Ref.set(runtime.projectRef, Option.some(project));
Each project runs in isolated ProjectRuntime with independent state, event queues, and event node caches.
Do NOT use TypeScript CLI (tsc) or typecheck command for type checking. Use LSP diagnostics instead:
npm run typecheck or tsc commandsconst project = yield* registry.create("My Project");
const node = yield* graphService.addNode(
graphId,
new SchemaRef({
pkgId: PackageId.make("core"),
schemaId: SchemaId.make("log")
}),
"Logger Node"
);
yield* withProjectRuntime(
ProjectId.make(projectId),
Effect.gen(function* () {
const graphService = yield* GraphService;
// Operations within project context
})
);
Never use: as ProjectId, as GraphId, as NodeId, as PackageId, as SchemaId
pnpm format