Implements FED-010: Agent Spawn via Federation feature that enables spawning and managing Claude agents on remote federated Mosaic Stack instances via COMMAND message type. Features: - Federation agent command types (spawn, status, kill) - FederationAgentService for handling agent operations - Integration with orchestrator's agent spawner/lifecycle services - API endpoints for spawning, querying status, and killing agents - Full command routing through federation COMMAND infrastructure - Comprehensive test coverage (12/12 tests passing) Architecture: - Hub → Spoke: Spawn agents on remote instances - Command flow: FederationController → FederationAgentService → CommandService → Remote Orchestrator - Response handling: Remote orchestrator returns agent status/results - Security: Connection validation, signature verification Files created: - apps/api/src/federation/types/federation-agent.types.ts - apps/api/src/federation/federation-agent.service.ts - apps/api/src/federation/federation-agent.service.spec.ts Files modified: - apps/api/src/federation/command.service.ts (agent command routing) - apps/api/src/federation/federation.controller.ts (agent endpoints) - apps/api/src/federation/federation.module.ts (service registration) - apps/orchestrator/src/api/agents/agents.controller.ts (status endpoint) - apps/orchestrator/src/api/agents/agents.module.ts (lifecycle integration) Testing: - 12/12 tests passing for FederationAgentService - All command service tests passing - TypeScript compilation successful - Linting passed Refs #93 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Knowledge Module Utilities
Wiki-Link Parser
Overview
The wiki-link-parser.ts utility provides parsing of wiki-style [[links]] from markdown content. This is the foundation for the Knowledge Module's linking system.
Features
- Multiple Link Formats: Supports title, slug, and display text variations
- Position Tracking: Returns exact positions for link replacement or highlighting
- Code Block Awareness: Skips links in code blocks (inline and fenced)
- Escape Support: Respects escaped brackets
\[[not a link]] - Edge Case Handling: Properly handles nested brackets, empty links, and malformed syntax
Usage
import { parseWikiLinks } from "./utils/wiki-link-parser";
const content = "See [[Main Page]] and [[Getting Started|start here]].";
const links = parseWikiLinks(content);
// Result:
// [
// {
// raw: '[[Main Page]]',
// target: 'Main Page',
// displayText: 'Main Page',
// start: 4,
// end: 17
// },
// {
// raw: '[[Getting Started|start here]]',
// target: 'Getting Started',
// displayText: 'start here',
// start: 22,
// end: 52
// }
// ]
Supported Link Formats
Basic Link (by title)
[[Page Name]]
Links to a page by its title. Display text will be "Page Name".
Link with Display Text
[[Page Name|custom display]]
Links to "Page Name" but displays "custom display".
Link by Slug
[[page-slug-name]]
Links to a page by its URL slug (kebab-case).
Edge Cases
Nested Brackets
[[Page [with] brackets]] ✓ Parsed correctly
Single brackets inside link text are allowed.
Code Blocks (Not Parsed)
Use `[[WikiLink]]` syntax for linking.
\`\`\`typescript
const link = "[[not parsed]]";
\`\`\`
Links inside inline code or fenced code blocks are ignored.
Escaped Brackets
\[[not a link]] but [[real link]] works
Escaped brackets are not parsed as links.
Empty or Invalid Links
[[]] ✗ Empty link (ignored)
[[]] ✗ Whitespace only (ignored)
[[Target]] ✓ Trimmed to "Target"
Return Type
interface WikiLink {
raw: string; // Full matched text: "[[Page Name]]"
target: string; // Target page: "Page Name"
displayText: string; // Display text: "Page Name" or custom
start: number; // Start position in content
end: number; // End position in content
}
Testing
Comprehensive test suite (100% coverage) includes:
- Basic parsing (single, multiple, consecutive links)
- Display text variations
- Edge cases (brackets, escapes, empty links)
- Code block exclusion (inline, fenced, indented)
- Position tracking
- Unicode support
- Malformed input handling
Run tests:
pnpm test --filter=@mosaic/api -- wiki-link-parser.spec.ts
Integration
This parser is designed to work with the Knowledge Module's linking system:
- On Entry Save: Parse
[[links]]from content - Create Link Records: Store references in database
- Backlink Tracking: Maintain bidirectional link relationships
- Link Rendering: Replace
[[links]]with HTML anchors
See related issues:
- #59 - Wiki-link parser (this implementation)
- Future: Link resolution and storage
- Future: Backlink display and navigation
Markdown Rendering
Overview
The markdown.ts utility provides secure markdown rendering with GFM (GitHub Flavored Markdown) support, syntax highlighting, and XSS protection.
Features
- GFM Support: Tables, task lists, strikethrough, autolinks
- Syntax Highlighting: Code blocks with language detection via highlight.js
- XSS Protection: HTML sanitization using sanitize-html
- Header IDs: Automatic ID generation for headers (for linking)
- Security: Blocks dangerous HTML (scripts, iframes, event handlers)
Usage
import { renderMarkdown, markdownToPlainText } from "./utils/markdown";
// Render markdown to HTML (async)
const html = await renderMarkdown("# Hello **World**");
// Result: <h1 id="hello-world">Hello <strong>World</strong></h1>
// Extract plain text (for search indexing)
const plainText = await markdownToPlainText("# Hello **World**");
// Result: "Hello World"
Supported Markdown Features
Basic Formatting
- Bold:
**text**or__text__ - Italic:
*text*or_text_ Strikethrough:~~text~~Inline code:`code`
Headers
# H1
## H2
### H3
Lists
- Unordered list
- Nested item
1. Ordered list
2. Another item
Task Lists
- [ ] Unchecked task
- [x] Completed task
Tables
| Header 1 | Header 2 |
| -------- | -------- |
| Cell 1 | Cell 2 |
Code Blocks
```typescript
const greeting: string = "Hello";
console.log(greeting);
```
Links and Images
[Link text](https://example.com)

Blockquotes
> This is a quote
> Multi-line quote
Security
The renderer implements multiple layers of security:
- HTML Sanitization: Only allows safe HTML tags and attributes
- URL Validation: Blocks
javascript:and other dangerous protocols - External Links: Automatically adds
target="_blank"andrel="noopener noreferrer" - Task Lists: Checkboxes are disabled to prevent interaction
- No Event Handlers: Blocks
onclick,onload, etc. - No Dangerous Tags: Blocks
<script>,<iframe>,<object>,<embed>
Testing
Comprehensive test suite covers:
- Basic markdown rendering
- GFM features (tables, task lists, strikethrough)
- Code syntax highlighting
- Security (XSS prevention)
- Edge cases (unicode, long content, nested structures)
Run tests:
pnpm test --filter=@mosaic/api -- markdown.spec.ts
Integration
The markdown renderer is integrated into the Knowledge Entry service:
- On Create: Renders
contenttocontentHtml - On Update: Re-renders if content changes
- Caching: HTML is stored in database for performance
See knowledge.service.ts for implementation details.