Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 29 additions & 15 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@
reviews:
profile: chill
high_level_summary: true
auto_review:
base_branches:
- "main"
- "release/.*"
pre_merge_checks:
docstrings:
threshold: 65

path_instructions:
- path: "apps/demo/**"
- path: "apps/**"
instructions: >
apps/demo directory contains a demo application for testing purposes.
apps/** directory contains a demo application for testing purposes.
It can be used as a reference for SDK usage examples.

# ─────────────────────────────────────────────────────────
# DOCS HIERARCHY & WORKFLOW
# ─────────────────────────────────────────────────────────

# Latest rendered docs for current minor – GENERATED ONLY
- path: "docs/docs/**"
- path: "docs/live/**"
instructions: >
This folder contains the latest Mintlify documentation for the CURRENT minor
version, using SEO-friendly paths (e.g. "docs/getting-started/welcome").
Expand All @@ -32,7 +36,7 @@ reviews:
2) Update docs/docs/** based on docs/draft/docs/** and the code changes.

# Frozen archived docs for old minors – NEVER EDIT
- path: "docs/v/**"
- path: "docs/live/docs/v/**"
instructions: >
This folder contains frozen, archived documentation for previous minor versions,
e.g. docs/v/0.1/**, docs/v/0.2/**.
Expand All @@ -49,31 +53,31 @@ reviews:
This folder holds the draft/source docs that humans are expected to edit.
When authors want to add or change documentation, they should do it here.
The Codex workflow uses these drafts, together with the code diff, to generate
the latest docs under docs/docs/**.
the latest docs under docs/live/docs/**.
As a reviewer:
- Encourage contributors to add/update content here instead of docs/docs/**.
- Encourage contributors to add/update content here instead of docs/live/docs/**.
- It is fine to do structural/content feedback here (clarity, examples, etc).

# Blogs – human edited, not touched by Codex
- path: "docs/blogs/**"
- path: "docs/live/blogs/**"
instructions: >
This folder contains blog posts (e.g. "docs/blogs/november-2025/...").
This folder contains blog posts (e.g. "docs/live/blogs/november-2025/...").
These are NOT managed by the Codex docs automation.
Human-authored changes here are expected and allowed.
As a reviewer, ensure the changes look intentional and not like bulk/automated
rewrites of the entire blog tree.

# Mintlify navigation config
- path: "docs/docs.json"
- path: "docs/live/docs.json"
instructions: >
Mintlify navigation configuration.
Important structure:
- dropdowns[].dropdown == "Documentation":
- Contains a "versions" array.
- Latest version entry: "version": "vX.Y (latest)", "default": true, with
paths like "docs/getting-started/welcome" and "updates" (NO "v/X.Y" prefix).
paths like "docs/live/docs/getting-started/welcome" and "updates" (NO "v/X.Y" prefix).
- Older versions: "version": "v0.2", "version": "v0.1", etc., with paths
like "docs/v/0.2/getting-started/welcome".
like "docs/live/docs/v/0.2/getting-started/welcome".
- dropdowns[].dropdown == "Blog":
- Contains blog groups (e.g. "blog/november-2025/introducing-frontmcp").
Review guidelines:
Expand All @@ -88,11 +92,13 @@ reviews:
instructions: >
Repository documentation for the SDK, using MDX and hosted by Mintlify.
See more specific rules for:
- docs/docs/** (latest rendered docs, automation-only)
- docs/v/** (archived versions, read-only)
- docs/live/docs/** (latest rendered docs, automation-only)
- docs/live/docs/v/** (archived versions, read-only)
- docs/draft/docs/** (human-editable drafts)
- docs/blogs/** (blogs, human edited)
- docs/docs.json (Mintlify navigation)
- docs/live/blogs/** (blogs, human edited)
- docs/draft/blogs/** (blogs, human edited)
- docs/live/docs.json (Mintlify navigation)
- docs/draft/docs.json (Mintlify navigation)

# SDK libs
- path: "libs/**"
Expand All @@ -102,6 +108,14 @@ reviews:
When public APIs change, ensure there is a matching docs/draft/docs/** update
(not direct edits under docs/docs/**).

# SDK Plugins
- path: "plugins/**"
instructions: >
Contains publishable SDK plugins.
Review for API correctness, breaking changes, and consistency with docs.
When public APIs change, ensure there is a matching docs/draft/docs/** update
(not direct edits under docs/docs/**).

path_filters:
- "!**/dist/**"
- "!**/build/**"
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-agents/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { AgentsApp } from './apps/agents';

const port = parseInt(process.env['PORT'] ?? '3020', 10);
const port = parseInt(process.env['PORT'] ?? '3101', 10);

@FrontMcp({
info: { name: 'Demo E2E Agents', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-cache/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { ComputeApp } from './apps/compute';

const port = parseInt(process.env['PORT'] ?? '3016', 10);
const port = parseInt(process.env['PORT'] ?? '3106', 10);

@FrontMcp({
info: { name: 'Demo E2E Cache', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-codecall/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { CrmApp } from './apps/crm';

const port = parseInt(process.env['PORT'] ?? '3013', 10);
const port = parseInt(process.env['PORT'] ?? '3105', 10);

@FrontMcp({
info: { name: 'Demo E2E CodeCall', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-config/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { ConfigApp } from './apps/config';

const port = parseInt(process.env['PORT'] ?? '3021', 10);
const port = parseInt(process.env['PORT'] ?? '3119', 10);

@FrontMcp({
info: { name: 'Demo E2E Config', version: '0.1.0' },
Expand Down
6 changes: 3 additions & 3 deletions apps/e2e/demo-e2e-direct/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { NotesApp } from './apps/notes';

// Validate port - fallback to 3015 if invalid
const rawPort = parseInt(process.env['PORT'] ?? '3015', 10);
const port = Number.isFinite(rawPort) && rawPort > 0 ? rawPort : 3015;
// Validate port - fallback to 3117 if invalid
const rawPort = parseInt(process.env['PORT'] ?? '3117', 10);
const port = Number.isFinite(rawPort) && rawPort > 0 ? rawPort : 3117;

/**
* Base configuration shared between HTTP server and direct usage.
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-errors/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { ErrorsApp } from './apps/errors';

const port = parseInt(process.env['PORT'] ?? '3019', 10);
const port = parseInt(process.env['PORT'] ?? '3115', 10);

@FrontMcp({
info: { name: 'Demo E2E Errors', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-hooks/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { AuditApp } from './apps/audit';

const port = parseInt(process.env['PORT'] ?? '3018', 10);
const port = parseInt(process.env['PORT'] ?? '3120', 10);

@FrontMcp({
info: { name: 'Demo E2E Hooks', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-multiapp/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { NotesApp } from './apps/notes';
import { TasksApp } from './apps/tasks';
import { CalendarApp } from './apps/calendar';

const port = parseInt(process.env['PORT'] ?? '3022', 10);
const port = parseInt(process.env['PORT'] ?? '3104', 10);

@FrontMcp({
info: { name: 'Demo E2E MultiApp', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-notifications/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { NotifyApp } from './apps/notify';

const port = parseInt(process.env['PORT'] ?? '3020', 10);
const port = parseInt(process.env['PORT'] ?? '3113', 10);

@FrontMcp({
info: { name: 'Demo E2E Notifications', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-openapi/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { EcommerceApp } from './apps/ecommerce';

const port = parseInt(process.env['PORT'] ?? '3012', 10);
const port = parseInt(process.env['PORT'] ?? '3114', 10);

@FrontMcp({
info: { name: 'Demo E2E OpenAPI', version: '0.1.0' },
Expand Down
4 changes: 2 additions & 2 deletions apps/e2e/demo-e2e-orchestrated/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { NotesApp } from './apps/notes';
import { TasksApp } from './apps/tasks';

// Get port from env variable (set by test runner) or default to 3005
const port = parseInt(process.env['PORT'] ?? '3005', 10);
// Get port from env variable (set by test runner) or default to 3121
const port = parseInt(process.env['PORT'] ?? '3121', 10);

@FrontMcp({
info: { name: 'Demo Orchestrated Auth', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-providers/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { ConfigApp } from './apps/config';

const port = parseInt(process.env['PORT'] ?? '3015', 10);
const port = parseInt(process.env['PORT'] ?? '3118', 10);

@FrontMcp({
info: { name: 'Demo E2E Providers', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-public/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { NotesApp } from './apps/notes';

const port = parseInt(process.env['PORT'] ?? '3010', 10);
const port = parseInt(process.env['PORT'] ?? '3100', 10);

@FrontMcp({
info: { name: 'Demo E2E Public', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-redis/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { SessionsApp } from './apps/sessions';
import { VaultApp } from './apps/vault';
import { TransportApp } from './apps/transport';

const port = parseInt(process.env['PORT'] ?? '3014', 10);
const port = parseInt(process.env['PORT'] ?? '3111', 10);

@FrontMcp({
info: { name: 'Demo E2E Redis', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-remember/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { MemoryApp } from './apps/memory';

const port = parseInt(process.env['PORT'] ?? '3020', 10);
const port = parseInt(process.env['PORT'] ?? '3116', 10);

@FrontMcp({
info: { name: 'Demo E2E Remember', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-remote/src/local-mcp-server/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { LocalTestApp } from './apps/local-test';

const port = parseInt(process.env['PORT'] ?? '3099', 10);
const port = parseInt(process.env['PORT'] ?? '3108', 10);

@FrontMcp({
info: { name: 'Local Test MCP', version: '0.1.0' },
Expand Down
4 changes: 2 additions & 2 deletions apps/e2e/demo-e2e-remote/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { CachePlugin } from '@frontmcp/plugins';

const port = parseInt(process.env['PORT'] ?? '3098', 10);
const localMcpPort = parseInt(process.env['LOCAL_MCP_PORT'] ?? '3099', 10);
const port = parseInt(process.env['PORT'] ?? '3112', 10);
const localMcpPort = parseInt(process.env['LOCAL_MCP_PORT'] ?? '3108', 10);

@FrontMcp({
info: { name: 'Remote Gateway E2E', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-serverless/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { ServerlessApp } from './apps/serverless';

const port = parseInt(process.env['PORT'] ?? '3021', 10);
const port = parseInt(process.env['PORT'] ?? '3110', 10);

@FrontMcp({
info: { name: 'Demo E2E Serverless', version: '0.1.0' },
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-standalone/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { IsolatedApp } from './apps/isolated';
import { ParentApp } from './apps/parent';

const port = parseInt(process.env['PORT'] ?? '3030', 10);
const port = parseInt(process.env['PORT'] ?? '3103', 10);

/**
* E2E Test Server for Standalone Apps
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-transparent/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { TasksApp } from './apps/tasks';

const port = parseInt(process.env['PORT'] ?? '3011', 10);
const port = parseInt(process.env['PORT'] ?? '3109', 10);

// The IdP provider URL is set via environment variable
// For E2E testing, this points to a MockOAuthServer instance
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-transport-recreation/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { TransportTestApp } from './apps/transport-test';

const portEnv = process.env['PORT'] ?? '3020';
const portEnv = process.env['PORT'] ?? '3102';
const port = parseInt(portEnv, 10);
if (isNaN(port) || port < 1 || port > 65535) {
throw new Error(`Invalid PORT environment variable: "${portEnv}". Must be a number between 1 and 65535.`);
Expand Down
2 changes: 1 addition & 1 deletion apps/e2e/demo-e2e-ui/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FrontMcp, LogLevel } from '@frontmcp/sdk';
import { WidgetsApp } from './apps/widgets';

const port = parseInt(process.env['PORT'] ?? '3017', 10);
const port = parseInt(process.env['PORT'] ?? '3107', 10);

@FrontMcp({
info: { name: 'Demo E2E UI', version: '0.1.0' },
Expand Down
6 changes: 3 additions & 3 deletions libs/cli/e2e/run-e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ for pkg in "${LIBS_PACKAGES[@]}"; do
echo " Publishing libs/$pkg..."
if [ -d "libs/$pkg/dist" ]; then
cd "libs/$pkg/dist"
if npm publish --registry "$VERDACCIO_URL" --access public 2>&1; then
if npm publish --registry "$VERDACCIO_URL" --access public --tag next 2>&1; then
echo " ✅ Published successfully"
else
echo " ⚠️ Publish failed (may already exist or missing dependency)"
Expand All @@ -125,7 +125,7 @@ for pkg in "${PLUGIN_PACKAGES[@]}"; do
echo " Publishing plugins/$pkg..."
if [ -d "plugins/$pkg/dist" ]; then
cd "plugins/$pkg/dist"
if npm publish --registry "$VERDACCIO_URL" --access public 2>&1; then
if npm publish --registry "$VERDACCIO_URL" --access public --tag next 2>&1; then
echo " ✅ Published successfully"
else
echo " ⚠️ Publish failed (may already exist or missing dependency)"
Expand All @@ -140,7 +140,7 @@ done
echo " Publishing libs/plugins..."
if [ -d "libs/plugins/dist" ]; then
cd "libs/plugins/dist"
if npm publish --registry "$VERDACCIO_URL" --access public 2>&1; then
if npm publish --registry "$VERDACCIO_URL" --access public --tag next 2>&1; then
echo " ✅ Published successfully"
else
echo " ⚠️ Publish failed (may already exist or missing dependency)"
Expand Down