@sanurb/ringi 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3JLVANJR.js → chunk-KMYSGMD3.js} +1819 -75
- package/dist/chunk-KMYSGMD3.js.map +1 -0
- package/dist/cli.js +108 -39
- package/dist/cli.js.map +1 -1
- package/dist/mcp.js +1 -1
- package/dist/mcp.js.map +1 -1
- package/package.json +10 -83
- package/LICENSE +0 -674
- package/README.md +0 -378
- package/dist/chunk-3JLVANJR.js.map +0 -1
package/dist/mcp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReviewSourceType, ReviewId, TodoId, CoreLive, TodoService, ReviewService, CommentService, ExportService, parseDiff, getDiffSummary, GitService } from './chunk-
|
|
1
|
+
import { ReviewSourceType, ReviewId, TodoId, CoreLive, TodoService, ReviewService, CommentService, ExportService, parseDiff, getDiffSummary, GitService } from './chunk-KMYSGMD3.js';
|
|
2
2
|
import { stdin, stdout } from 'node:process';
|
|
3
3
|
import { execFileSync } from 'node:child_process';
|
|
4
4
|
import * as Context from 'effect/Context';
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mcp/config.ts","../src/mcp/errors.ts","../src/mcp/namespaces.ts","../src/mcp/sandbox.ts","../src/mcp/schemas.ts","../src/mcp/execute.ts","../src/mcp/runtime.ts","../src/mcp/server.ts"],"names":["Layer","Schema","parsed","Schema3","result","markdown","hunks","review","comments","executeCode","formatError"],"mappings":"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","file":"mcp.js","sourcesContent":["import { execFileSync } from \"node:child_process\";\n\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\n\nconst DEFAULT_DB_PATH = \".ringi/reviews.db\";\nconst DEFAULT_MAX_OUTPUT_BYTES = 100 * 1024;\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\n\nexport interface McpConfigShape {\n readonly cwd: string;\n readonly dbPath: string;\n readonly defaultTimeoutMs: number;\n readonly maxOutputBytes: number;\n readonly maxTimeoutMs: number;\n readonly readonly: boolean;\n readonly repoRoot: string;\n}\n\nexport class McpConfig extends Context.Tag(\"McpConfig\")<\n McpConfig,\n McpConfigShape\n>() {}\n\nexport const McpConfigLive = (config: McpConfigShape) =>\n Layer.succeed(McpConfig, config);\n\nconst resolveRepositoryRoot = (repoOverride?: string): string => {\n const cwd = repoOverride ?? process.cwd();\n\n return execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n cwd,\n encoding: \"utf8\",\n }).trim();\n};\n\nconst resolveDbPath = (repoRoot: string, dbPathOverride?: string): string =>\n dbPathOverride ?? `${repoRoot}/${DEFAULT_DB_PATH}`;\n\nconst parseNumberFlag = (\n flagValue: string | undefined,\n fallback: number,\n name: string\n): number => {\n if (flagValue === undefined) {\n return fallback;\n }\n\n const parsed = Number.parseInt(flagValue, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(\n `Invalid ${name}: expected a positive integer, received ${flagValue}`\n );\n }\n\n return parsed;\n};\n\nexport const resolveMcpConfig = (argv: readonly string[]): McpConfigShape => {\n const args = [...argv];\n const readonly = args.includes(\"--readonly\");\n const dbIndex = args.indexOf(\"--db-path\");\n const repoIndex = args.indexOf(\"--repo\");\n const timeoutIndex = args.indexOf(\"--timeout-ms\");\n const maxOutputIndex = args.indexOf(\"--max-output-bytes\");\n\n const repoRoot = resolveRepositoryRoot(\n repoIndex === -1 ? undefined : args[repoIndex + 1]\n );\n\n return {\n cwd: process.cwd(),\n dbPath: resolveDbPath(\n repoRoot,\n dbIndex === -1 ? undefined : args[dbIndex + 1]\n ),\n defaultTimeoutMs: parseNumberFlag(\n timeoutIndex === -1 ? undefined : args[timeoutIndex + 1],\n DEFAULT_TIMEOUT_MS,\n \"timeout\"\n ),\n maxOutputBytes: parseNumberFlag(\n maxOutputIndex === -1 ? undefined : args[maxOutputIndex + 1],\n DEFAULT_MAX_OUTPUT_BYTES,\n \"max output bytes\"\n ),\n maxTimeoutMs: MAX_TIMEOUT_MS,\n readonly,\n repoRoot,\n };\n};\n","/**\n * MCP execution domain errors.\n *\n * All errors that can occur during sandbox execution are modeled as typed,\n * tagged errors for exhaustive handling via catchTag/catchTags.\n */\n\nimport * as Schema from \"effect/Schema\";\n\n/** Code validation failed (empty, too long, non-string). */\nexport class InvalidCodeError extends Schema.TaggedError<InvalidCodeError>()(\n \"InvalidCodeError\",\n { message: Schema.String }\n) {}\n\n/** Timeout parameter is invalid (non-finite, zero, negative). */\nexport class InvalidTimeoutError extends Schema.TaggedError<InvalidTimeoutError>()(\n \"InvalidTimeoutError\",\n { message: Schema.String, received: Schema.Unknown }\n) {}\n\n/** Schema-based input decoding failed. */\nexport class InputDecodeError extends Schema.TaggedError<InputDecodeError>()(\n \"InputDecodeError\",\n { message: Schema.String, operation: Schema.String }\n) {}\n\n/** Write operation rejected in readonly mode. */\nexport class ReadonlyViolationError extends Schema.TaggedError<ReadonlyViolationError>()(\n \"ReadonlyViolationError\",\n { message: Schema.String }\n) {}\n\n/** Sandbox execution timed out. */\nexport class ExecutionTimeoutError extends Schema.TaggedError<ExecutionTimeoutError>()(\n \"ExecutionTimeoutError\",\n { message: Schema.String, timeoutMs: Schema.Number }\n) {}\n\n/** Sandbox execution failed with an unrecoverable error. */\nexport class SandboxExecutionError extends Schema.TaggedError<SandboxExecutionError>()(\n \"SandboxExecutionError\",\n { error: Schema.Defect, message: Schema.String }\n) {}\n","/**\n * MCP sandbox namespace factories.\n *\n * Each factory creates a frozen namespace object suitable for injection into the\n * vm.Context sandbox. Factories accept dependency-injected callbacks so they can\n * be tested without an Effect runtime.\n */\n\nimport { parseDiff, getDiffSummary } from \"@/core/services/diff.service\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const PHASE_UNAVAILABLE_MESSAGE =\n \"This capability is not available in the current server phase. Intelligence features require Phase 2.\";\n\n// ---------------------------------------------------------------------------\n// Types (match docs/MCP.md contracts)\n// ---------------------------------------------------------------------------\n\ntype ReviewEventType =\n | \"reviews.updated\"\n | \"comments.updated\"\n | \"todos.updated\"\n | \"files.changed\";\n\ninterface EventSubscription {\n id: string;\n eventTypes: ReviewEventType[];\n reviewId?: string;\n}\n\ninterface ReviewEvent {\n type: ReviewEventType;\n reviewId?: string;\n timestamp: number;\n payload?: unknown;\n}\n\ntype ReviewSource =\n | { type: \"staged\" }\n | { type: \"branch\"; baseRef: string; headRef: string }\n | { type: \"commits\"; commits: string[] };\n\n// ---------------------------------------------------------------------------\n// intelligence namespace — Phase 2+, all methods fail as phase unavailable\n// ---------------------------------------------------------------------------\n\nexport const createIntelligenceNamespace = () =>\n Object.freeze({\n getConfidence: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n getImpacts: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n getRelationships: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n validate: (_options: {\n reviewId: string;\n checks?: string[];\n }): Promise<never> => Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n });\n\n// ---------------------------------------------------------------------------\n// session namespace\n// ---------------------------------------------------------------------------\n\ninterface SessionDeps {\n readonly: boolean;\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getLatestReviewId: () => Promise<string | null>;\n}\n\nexport const createSessionNamespace = (deps: SessionDeps) =>\n Object.freeze({\n context: async () => {\n const repo = await deps.getRepositoryInfo();\n const activeReviewId = await deps.getLatestReviewId();\n return {\n activeReviewId,\n activeSnapshotId: null as string | null,\n readonly: deps.readonly,\n repository: repo,\n serverMode: \"stdio\" as const,\n };\n },\n status: async () => ({\n activeSubscriptions: 0,\n currentPhase: \"phase1\" as const,\n ok: true as const,\n readonly: deps.readonly,\n }),\n });\n\n// ---------------------------------------------------------------------------\n// sources namespace\n// ---------------------------------------------------------------------------\n\ninterface SourcesDeps {\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getStagedFiles: () => Promise<readonly { path: string; status: string }[]>;\n getBranches: () => Promise<readonly { name: string; current: boolean }[]>;\n getRecentCommits: () => Promise<\n readonly { hash: string; author: string; date: string; message: string }[]\n >;\n getStagedDiff: () => Promise<string>;\n getBranchDiff: (branch: string) => Promise<string>;\n getCommitDiff: (shas: string[]) => Promise<string>;\n}\n\nconst buildPreview = (diffText: string, source: ReviewSource) => {\n const files = parseDiff(diffText);\n const summary = getDiffSummary(files);\n return {\n files: files.map((f) => ({\n additions: f.additions,\n deletions: f.deletions,\n path: f.newPath,\n status: f.status,\n })),\n source,\n summary: {\n totalAdditions: summary.totalAdditions,\n totalDeletions: summary.totalDeletions,\n totalFiles: summary.totalFiles,\n },\n };\n};\n\nexport const createSourcesNamespace = (deps: SourcesDeps) =>\n Object.freeze({\n list: async () => {\n const [stagedFiles, branches, commits] = await Promise.all([\n deps.getStagedFiles(),\n deps.getBranches(),\n deps.getRecentCommits(),\n ]);\n return {\n branches: branches.map((b) => ({ current: b.current, name: b.name })),\n recentCommits: commits.map((c) => ({\n author: c.author,\n date: c.date,\n hash: c.hash,\n message: c.message,\n })),\n staged: { available: stagedFiles.length > 0 },\n };\n },\n previewDiff: async (source: ReviewSource) => {\n let diffText: string;\n switch (source.type) {\n case \"staged\": {\n diffText = await deps.getStagedDiff();\n break;\n }\n case \"branch\": {\n diffText = await deps.getBranchDiff(source.baseRef);\n break;\n }\n case \"commits\": {\n diffText = await deps.getCommitDiff(source.commits);\n break;\n }\n default: {\n throw new Error(\n `Unsupported source type: ${(source as { type: string }).type}`\n );\n }\n }\n return buildPreview(diffText, source);\n },\n });\n\n// ---------------------------------------------------------------------------\n// events namespace — Phase 1 stub with in-memory subscription tracking\n// ---------------------------------------------------------------------------\n\nexport const createEventsNamespace = () => {\n let subscriptionCounter = 0;\n\n return Object.freeze({\n listRecent: async (_filter?: {\n reviewId?: string;\n limit?: number;\n }): Promise<ReviewEvent[]> => [],\n subscribe: async (filter?: {\n eventTypes?: ReviewEventType[];\n reviewId?: string;\n }): Promise<EventSubscription> => {\n subscriptionCounter += 1;\n return {\n eventTypes: filter?.eventTypes ?? [\n \"reviews.updated\",\n \"comments.updated\",\n \"todos.updated\",\n \"files.changed\",\n ],\n id: `sub_${subscriptionCounter}`,\n reviewId: filter?.reviewId,\n };\n },\n });\n};\n","/**\n * MCP sandbox global construction.\n *\n * Creates the six spec-compliant namespaces (`reviews`, `todos`, `sources`,\n * `intelligence`, `events`, `session`) from injected dependencies.\n *\n * All domain interaction goes through the `call` callback so the sandbox module\n * stays testable without an Effect runtime.\n */\n\nimport {\n createEventsNamespace,\n createIntelligenceNamespace,\n createSessionNamespace,\n createSourcesNamespace,\n} from \"@/mcp/namespaces\";\n\n// ---------------------------------------------------------------------------\n// Dependency contract\n// ---------------------------------------------------------------------------\n\nexport interface SandboxDeps {\n readonly readonly: boolean;\n readonly repoRoot: string;\n\n /** Run a named domain operation, recording it in the journal. */\n call: <T>(name: string, fn: () => Promise<T>) => Promise<T>;\n\n /** Throws if the server is in readonly mode. */\n requireWritable: () => void;\n\n // -- Git-backed deps for sources/session --\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getLatestReviewId: () => Promise<string | null>;\n getStagedFiles: () => Promise<readonly { path: string; status: string }[]>;\n getBranches: () => Promise<readonly { name: string; current: boolean }[]>;\n getRecentCommits: () => Promise<\n readonly { hash: string; author: string; date: string; message: string }[]\n >;\n getStagedDiff: () => Promise<string>;\n getBranchDiff: (branch: string) => Promise<string>;\n getCommitDiff: (shas: string[]) => Promise<string>;\n}\n\n// ---------------------------------------------------------------------------\n// Namespace types (public for test assertions)\n// ---------------------------------------------------------------------------\n\nexport interface SandboxGlobals {\n readonly reviews: ReviewsNamespace;\n readonly todos: TodosNamespace;\n readonly sources: ReturnType<typeof createSourcesNamespace>;\n readonly intelligence: ReturnType<typeof createIntelligenceNamespace>;\n readonly events: ReturnType<typeof createEventsNamespace>;\n readonly session: ReturnType<typeof createSessionNamespace>;\n}\n\ninterface ReviewsNamespace {\n list: (filters?: unknown) => Promise<unknown>;\n get: (reviewId: unknown) => Promise<unknown>;\n create: (input: unknown) => Promise<unknown>;\n getFiles: (reviewId: unknown) => Promise<unknown>;\n getDiff: (query: unknown) => Promise<unknown>;\n getComments: (reviewId: unknown, filePath?: unknown) => Promise<unknown>;\n getSuggestions: (reviewId: unknown) => Promise<unknown>;\n getStatus: (reviewId: unknown) => Promise<unknown>;\n export: (options: unknown) => Promise<unknown>;\n}\n\ninterface TodosNamespace {\n list: (filter?: unknown) => Promise<unknown>;\n add: (input: unknown) => Promise<unknown>;\n done: (todoId: unknown) => Promise<unknown>;\n undone: (todoId: unknown) => Promise<unknown>;\n move: (todoId: unknown, position: unknown) => Promise<unknown>;\n remove: (todoId: unknown) => Promise<unknown>;\n clear: (reviewId?: unknown) => Promise<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Validation helpers\n// ---------------------------------------------------------------------------\n\nconst parseId = (value: unknown, fieldName: string): string => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Invalid ${fieldName}: expected a non-empty string`);\n }\n return value;\n};\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Build the six frozen namespace objects for sandbox injection.\n *\n * The `call` callback wraps every domain operation with journal tracking and\n * error handling. This keeps the sandbox module free of Effect imports.\n */\nexport const createSandboxGlobals = (deps: SandboxDeps): SandboxGlobals => {\n // -- reviews namespace (spec: reviews.*) ----------------------------------\n const reviews: ReviewsNamespace = Object.freeze({\n create: async (_input: unknown) => {\n deps.requireWritable();\n return deps.call(\"reviews.create\", async () => {\n throw new Error(\"reviews.create: not wired to runtime\");\n });\n },\n export: (_options: unknown) =>\n deps.call(\"reviews.export\", async () => {\n throw new Error(\"reviews.export: not wired to runtime\");\n }),\n get: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.get\", async () => {\n throw new Error(\"reviews.get: not wired to runtime\");\n });\n },\n getComments: (reviewIdValue: unknown, _filePath?: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getComments\", async () => {\n throw new Error(\"reviews.getComments: not wired to runtime\");\n });\n },\n getDiff: (_query: unknown) =>\n deps.call(\"reviews.getDiff\", async () => {\n throw new Error(\"reviews.getDiff: not wired to runtime\");\n }),\n getFiles: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getFiles\", async () => {\n throw new Error(\"reviews.getFiles: not wired to runtime\");\n });\n },\n getStatus: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getStatus\", async () => {\n throw new Error(\"reviews.getStatus: not wired to runtime\");\n });\n },\n getSuggestions: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getSuggestions\", async () => {\n throw new Error(\"reviews.getSuggestions: not wired to runtime\");\n });\n },\n list: (_filters?: unknown) =>\n deps.call(\"reviews.list\", async () => {\n throw new Error(\"reviews.list: not wired to runtime\");\n }),\n });\n\n // -- todos namespace (spec: todos.*) --------------------------------------\n const todos: TodosNamespace = Object.freeze({\n add: async (_input: unknown) => {\n deps.requireWritable();\n return deps.call(\"todos.add\", async () => {\n throw new Error(\"todos.add: not wired to runtime\");\n });\n },\n clear: async (_reviewIdValue?: unknown) => {\n deps.requireWritable();\n return deps.call(\"todos.clear\", async () => {\n throw new Error(\"todos.clear: not wired to runtime\");\n });\n },\n done: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.done\", async () => {\n throw new Error(\"todos.done: not wired to runtime\");\n });\n },\n list: (_filter?: unknown) =>\n deps.call(\"todos.list\", async () => {\n throw new Error(\"todos.list: not wired to runtime\");\n }),\n move: async (todoIdValue: unknown, _positionValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.move\", async () => {\n throw new Error(\"todos.move: not wired to runtime\");\n });\n },\n remove: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.remove\", async () => {\n throw new Error(\"todos.remove: not wired to runtime\");\n });\n },\n undone: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.undone\", async () => {\n throw new Error(\"todos.undone: not wired to runtime\");\n });\n },\n });\n\n // -- Remaining namespaces use dedicated factories -------------------------\n const sources = createSourcesNamespace({\n getBranchDiff: deps.getBranchDiff,\n getBranches: deps.getBranches,\n getCommitDiff: deps.getCommitDiff,\n getRecentCommits: deps.getRecentCommits,\n getRepositoryInfo: deps.getRepositoryInfo,\n getStagedDiff: deps.getStagedDiff,\n getStagedFiles: deps.getStagedFiles,\n });\n\n const intelligence = createIntelligenceNamespace();\n\n const events = createEventsNamespace();\n\n const session = createSessionNamespace({\n getLatestReviewId: deps.getLatestReviewId,\n getRepositoryInfo: deps.getRepositoryInfo,\n readonly: deps.readonly,\n });\n\n return { events, intelligence, reviews, session, sources, todos };\n};\n","/**\n * MCP sandbox input schemas.\n *\n * Centralizes all validation for sandbox namespace inputs using Effect Schema.\n * Replaces hand-written parse* helpers with declarative, composable schemas.\n */\n\nimport * as Schema from \"effect/Schema\";\n\nimport { ReviewId, ReviewSourceType } from \"@/api/schemas/review\";\nimport { TodoId } from \"@/api/schemas/todo\";\n\n// ---------------------------------------------------------------------------\n// Shared\n// ---------------------------------------------------------------------------\n\nconst NonEmptyString = Schema.String.pipe(Schema.minLength(1));\n\n// ---------------------------------------------------------------------------\n// Review inputs\n// ---------------------------------------------------------------------------\n\n/**\n * Spec shape: `{ source: { type, baseRef } }`.\n * Legacy shape: `{ sourceType, sourceRef }`.\n *\n * We use Schema.Union to accept either and normalize to the legacy shape.\n */\nconst ReviewCreateFromSpec = Schema.Struct({\n source: Schema.Struct({\n baseRef: Schema.optionalWith(Schema.NullOr(Schema.String), {\n default: () => null,\n }),\n type: Schema.optionalWith(ReviewSourceType, {\n default: () => \"staged\" as const,\n }),\n }),\n});\n\nconst ReviewCreateFromLegacy = Schema.Struct({\n sourceRef: Schema.optionalWith(Schema.NullOr(Schema.String), {\n default: () => null,\n }),\n sourceType: Schema.optionalWith(ReviewSourceType, {\n default: () => \"staged\" as const,\n }),\n});\n\n/** Normalized review creation input. */\nexport interface ReviewCreateInput {\n readonly sourceRef: string | null;\n readonly sourceType: \"staged\" | \"branch\" | \"commits\";\n}\n\n/** Decode unknown input into a normalized ReviewCreateInput. */\nexport const decodeReviewCreateInput = (input: unknown): ReviewCreateInput => {\n // Try spec shape first, then legacy\n if (\n typeof input === \"object\" &&\n input !== null &&\n \"source\" in (input as Record<string, unknown>)\n ) {\n const parsed = Schema.decodeUnknownSync(ReviewCreateFromSpec)(input);\n return {\n sourceRef: parsed.source.baseRef,\n sourceType: parsed.source.type,\n };\n }\n const parsed = Schema.decodeUnknownSync(ReviewCreateFromLegacy)(input);\n return {\n sourceRef: parsed.sourceRef,\n sourceType: parsed.sourceType,\n };\n};\n\nexport const ReviewExportInput = Schema.Struct({\n reviewId: ReviewId,\n});\nexport type ReviewExportInput = typeof ReviewExportInput.Type;\n\nexport const ReviewDiffQuery = Schema.Struct({\n filePath: NonEmptyString,\n reviewId: ReviewId,\n});\nexport type ReviewDiffQuery = typeof ReviewDiffQuery.Type;\n\nexport const ReviewListFilters = Schema.Struct({\n limit: Schema.optionalWith(Schema.Number, { default: () => 20 }),\n page: Schema.optionalWith(Schema.Number, { default: () => 1 }),\n pageSize: Schema.optionalWith(Schema.Number, { default: () => 20 }),\n sourceType: Schema.optional(Schema.String),\n status: Schema.optional(Schema.String),\n});\nexport type ReviewListFilters = typeof ReviewListFilters.Type;\n\n// ---------------------------------------------------------------------------\n// Todo inputs\n// ---------------------------------------------------------------------------\n\n/**\n * Accepts both `text` (MCP spec) and `content` (legacy) for the todo body.\n * Normalizes to `{ content, reviewId }`.\n */\nexport interface CreateTodoInput {\n readonly content: string;\n readonly reviewId: typeof ReviewId.Type | null;\n}\n\nconst TodoInputFromSpec = Schema.Struct({\n reviewId: Schema.optionalWith(Schema.NullOr(ReviewId), {\n default: () => null,\n }),\n text: NonEmptyString,\n});\n\nconst TodoInputFromLegacy = Schema.Struct({\n content: NonEmptyString,\n reviewId: Schema.optionalWith(Schema.NullOr(ReviewId), {\n default: () => null,\n }),\n});\n\n/** Decode unknown input into a normalized CreateTodoInput. */\nexport const decodeCreateTodoInput = (input: unknown): CreateTodoInput => {\n if (\n typeof input === \"object\" &&\n input !== null &&\n \"text\" in (input as Record<string, unknown>)\n ) {\n const parsed = Schema.decodeUnknownSync(TodoInputFromSpec)(input);\n return { content: parsed.text, reviewId: parsed.reviewId };\n }\n const parsed = Schema.decodeUnknownSync(TodoInputFromLegacy)(input);\n return { content: parsed.content, reviewId: parsed.reviewId };\n};\n\nexport const TodoListFilter = Schema.Struct({\n reviewId: Schema.optional(ReviewId),\n});\nexport type TodoListFilter = typeof TodoListFilter.Type;\n\nexport const TodoMoveInput = Schema.Struct({\n position: Schema.Number,\n todoId: TodoId,\n});\nexport type TodoMoveInput = typeof TodoMoveInput.Type;\n\n// ---------------------------------------------------------------------------\n// Re-exports for convenience\n// ---------------------------------------------------------------------------\n\nexport { ReviewId, TodoId };\n","import * as vm from \"node:vm\";\n\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ReviewId } from \"@/api/schemas/review\";\nimport type {\n CreateTodoInput as CoreCreateTodoInput,\n TodoId,\n} from \"@/api/schemas/todo\";\nimport { CommentService } from \"@/core/services/comment.service\";\nimport { ExportService } from \"@/core/services/export.service\";\nimport { GitService } from \"@/core/services/git.service\";\nimport { ReviewService } from \"@/core/services/review.service\";\nimport { TodoService } from \"@/core/services/todo.service\";\nimport type { McpConfigShape } from \"@/mcp/config\";\nimport {\n ExecutionTimeoutError,\n InvalidCodeError,\n InvalidTimeoutError,\n SandboxExecutionError,\n} from \"@/mcp/errors\";\nimport type { McpManagedRuntime, McpRuntimeContext } from \"@/mcp/runtime\";\nimport type { SandboxDeps } from \"@/mcp/sandbox\";\nimport { createSandboxGlobals } from \"@/mcp/sandbox\";\nimport {\n decodeCreateTodoInput,\n decodeReviewCreateInput,\n ReviewDiffQuery,\n ReviewExportInput,\n ReviewListFilters,\n TodoListFilter,\n TodoMoveInput,\n} from \"@/mcp/schemas\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst MAX_CODE_LENGTH = 50_000;\nconst MIN_PREVIEW_BYTES = 256;\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface ExecuteInput {\n readonly code: string;\n readonly timeout?: number;\n}\n\nexport interface ExecuteOutput {\n readonly error?: string;\n readonly ok: boolean;\n readonly result: unknown;\n readonly truncated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Journal\n// ---------------------------------------------------------------------------\n\ninterface OperationJournalEntry {\n readonly error?: string;\n readonly name: string;\n readonly ok: boolean;\n readonly result?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers (exported for tests)\n// ---------------------------------------------------------------------------\n\nexport const clampTimeout = (\n requestedTimeout: number | undefined,\n config: Pick<McpConfigShape, \"defaultTimeoutMs\" | \"maxTimeoutMs\">\n): number => {\n if (requestedTimeout === undefined) {\n return config.defaultTimeoutMs;\n }\n if (!Number.isFinite(requestedTimeout) || requestedTimeout <= 0) {\n throw new Error(\n `Invalid timeout: expected a positive integer, received ${requestedTimeout}`\n );\n }\n return Math.min(Math.trunc(requestedTimeout), config.maxTimeoutMs);\n};\n\nconst formatError = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst truncateUtf8 = (text: string, maxBytes: number): string => {\n const buffer = Buffer.from(text, \"utf8\");\n if (buffer.byteLength <= maxBytes) {\n return text;\n }\n return buffer.subarray(0, maxBytes).toString(\"utf8\");\n};\n\nconst summarizeForJournal = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n return value.length > 200 ? `${value.slice(0, 200)}…` : value;\n }\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return { kind: \"array\", length: value.length };\n }\n if (typeof value === \"object\") {\n return {\n keys: Object.keys(value as Record<string, unknown>).slice(0, 10),\n kind: \"object\",\n };\n }\n return typeof value;\n};\n\nexport const finalizeOutput = (\n output: ExecuteOutput,\n maxOutputBytes: number\n): ExecuteOutput => {\n const serialized = JSON.stringify(output);\n if (Buffer.byteLength(serialized, \"utf8\") <= maxOutputBytes) {\n return output;\n }\n const previewBudget = Math.max(\n MIN_PREVIEW_BYTES,\n maxOutputBytes - Math.min(1024, Math.floor(maxOutputBytes / 4))\n );\n return {\n ...output,\n result: {\n note: \"Result truncated to fit MCP output budget\",\n preview: truncateUtf8(JSON.stringify(output.result), previewBudget),\n },\n truncated: true,\n };\n};\n\nexport const ensureCode = (code: unknown): string => {\n if (typeof code !== \"string\") {\n throw new TypeError(\"Invalid code: expected a string\");\n }\n const trimmed = code.trim();\n if (trimmed.length === 0) {\n throw new Error(\"Invalid code: expected a non-empty string\");\n }\n if (trimmed.length > MAX_CODE_LENGTH) {\n throw new Error(\n `Invalid code: maximum length is ${MAX_CODE_LENGTH} characters`\n );\n }\n return trimmed;\n};\n\n// ---------------------------------------------------------------------------\n// Schema-based decoding helper\n// ---------------------------------------------------------------------------\n\n/** Synchronous decode — throws on failure (for use inside Promise-returning sandbox callbacks). */\nconst decodeInputSync = <A, I>(\n schema: Schema.Schema<A, I>,\n input: unknown,\n operation: string\n): A => {\n try {\n return Schema.decodeUnknownSync(schema)(input);\n } catch (error) {\n if (error instanceof ParseResult.ParseError) {\n throw new TypeError(\n `${operation}: ${ParseResult.TreeFormatter.formatErrorSync(error)}`,\n { cause: error }\n );\n }\n throw error;\n }\n};\n\n// ---------------------------------------------------------------------------\n// Effect-based validation\n// ---------------------------------------------------------------------------\n\nconst validateCode = (code: unknown): Effect.Effect<string, InvalidCodeError> =>\n Effect.try({\n catch: (e) => new InvalidCodeError({ message: formatError(e) }),\n try: () => ensureCode(code),\n });\n\nconst validateTimeout = (\n requested: number | undefined,\n config: Pick<McpConfigShape, \"defaultTimeoutMs\" | \"maxTimeoutMs\">\n): Effect.Effect<number, InvalidTimeoutError> =>\n Effect.try({\n catch: () =>\n new InvalidTimeoutError({\n message: `Invalid timeout: expected a positive integer, received ${requested}`,\n received: requested,\n }),\n try: () => clampTimeout(requested, config),\n });\n\n// ---------------------------------------------------------------------------\n// Sandbox console\n// ---------------------------------------------------------------------------\n\nconst writeSandboxLog = (level: string, args: readonly unknown[]): void => {\n const line = args\n .map((arg) => {\n if (typeof arg === \"string\") {\n return arg;\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(\" \");\n process.stderr.write(`[ringi:mcp:${level}] ${line}\\n`);\n};\n\nconst createSandboxConsole = () =>\n Object.freeze({\n error: (...args: readonly unknown[]) => writeSandboxLog(\"error\", args),\n info: (...args: readonly unknown[]) => writeSandboxLog(\"info\", args),\n log: (...args: readonly unknown[]) => writeSandboxLog(\"log\", args),\n warn: (...args: readonly unknown[]) => writeSandboxLog(\"warn\", args),\n });\n\n// ---------------------------------------------------------------------------\n// VM sandbox runner (Effect-based, single timeout via fiber interruption)\n// ---------------------------------------------------------------------------\n\n/**\n * Runs user code in a VM sandbox with a single, deterministic timeout model:\n *\n * 1. `vm.Script.runInContext({ timeout })` — CPU-bound timeout for sync JS\n * 2. `Effect.timeoutFail` — wall-clock timeout for the full async execution\n *\n * No `Promise.race` — timeout is handled by fiber interruption which properly\n * cleans up resources. The vm timeout catches infinite sync loops while the\n * Effect timeout catches slow async operations.\n */\nconst runSandbox = (\n globals: Record<string, unknown>,\n code: string,\n timeoutMs: number\n): Effect.Effect<unknown, ExecutionTimeoutError | SandboxExecutionError> => {\n const execute = Effect.tryPromise({\n catch: (error) =>\n new SandboxExecutionError({\n error,\n message: formatError(error),\n }),\n try: () => {\n const context = vm.createContext({\n ...globals,\n Buffer: undefined,\n clearImmediate: undefined,\n clearInterval: undefined,\n clearTimeout: undefined,\n console: createSandboxConsole(),\n fetch: undefined,\n process: undefined,\n queueMicrotask,\n require: undefined,\n setImmediate: undefined,\n setInterval: undefined,\n setTimeout: undefined,\n });\n const script = new vm.Script(\n `\"use strict\"; (async () => {\\n${code}\\n})()`,\n { filename: \"ringi-mcp-execute.js\" }\n );\n // vm timeout guards sync CPU loops; Effect.timeoutFail guards the full async span\n return Promise.resolve(\n script.runInContext(context, { timeout: timeoutMs })\n );\n },\n });\n\n return execute.pipe(\n Effect.timeoutFail({\n duration: Duration.millis(timeoutMs),\n onTimeout: () =>\n new ExecutionTimeoutError({\n message: `Execution timed out after ${timeoutMs}ms`,\n timeoutMs,\n }),\n })\n );\n};\n\n// ---------------------------------------------------------------------------\n// Journal helpers\n// ---------------------------------------------------------------------------\n\nconst createJournal = () => {\n const entries: OperationJournalEntry[] = [];\n\n const recordSuccess = (name: string, result: unknown): void => {\n entries.push({ name, ok: true, result: summarizeForJournal(result) });\n };\n\n const recordFailure = (name: string, error: unknown): void => {\n entries.push({ error: formatError(error), name, ok: false });\n };\n\n /**\n * Runs a runtime Effect with journal tracking. Returns a Promise for sandbox use.\n *\n * The R parameter accepts any subset of McpRuntimeContext — the managed runtime\n * provides all services, so any effect requiring a subset of them is safe to run.\n */\n const tracked = <A, R extends McpRuntimeContext>(\n runtime: McpManagedRuntime,\n name: string,\n effect: Effect.Effect<A, unknown, R>\n ): Promise<A> =>\n runtime\n .runPromise(\n effect as unknown as Effect.Effect<A, never, McpRuntimeContext>\n )\n .then(\n (result) => {\n recordSuccess(name, result);\n return result;\n },\n (error) => {\n recordFailure(name, error);\n throw error;\n }\n );\n\n /** Promise-based call wrapper for non-Effect operations. */\n const trackedAsync = async <T>(\n name: string,\n fn: () => Promise<T>\n ): Promise<T> => {\n try {\n const result = await fn();\n recordSuccess(name, result);\n return result;\n } catch (error) {\n recordFailure(name, error);\n throw error;\n }\n };\n\n return { entries, recordFailure, recordSuccess, tracked, trackedAsync };\n};\n\n// ---------------------------------------------------------------------------\n// buildSandboxGlobals — wire services to the runtime\n// ---------------------------------------------------------------------------\n\nconst buildSandboxGlobals = (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n journal: ReturnType<typeof createJournal>\n) => {\n const { tracked, trackedAsync } = journal;\n\n const throwIfReadonly = (): void => {\n if (config.readonly) {\n throw new Error(\n \"Mutation rejected: MCP server is running in readonly mode\"\n );\n }\n };\n\n // -- SandboxDeps (Promise bridge for sources/session/events) --------------\n\n const run = <A, R extends McpRuntimeContext>(\n name: string,\n effect: Effect.Effect<A, unknown, R>\n ): Promise<A> => tracked(runtime, name, effect);\n\n const deps: SandboxDeps = {\n call: trackedAsync,\n getBranchDiff: (branch: string) =>\n run(\n \"git.getBranchDiff\",\n Effect.gen(function* getBranchDiff() {\n const git = yield* GitService;\n return yield* git.getBranchDiff(branch);\n })\n ),\n getBranches: () =>\n run(\n \"git.getBranches\",\n Effect.gen(function* getBranches() {\n const git = yield* GitService;\n return yield* git.getBranches;\n })\n ),\n getCommitDiff: (shas: string[]) =>\n run(\n \"git.getCommitDiff\",\n Effect.gen(function* getCommitDiff() {\n const git = yield* GitService;\n return yield* git.getCommitDiff(shas);\n })\n ),\n getLatestReviewId: async () => {\n const result = await run(\n \"reviews.latestId\",\n Effect.gen(function* result() {\n const svc = yield* ReviewService;\n return yield* svc.list({\n page: 1,\n pageSize: 1,\n repositoryPath: config.repoRoot,\n });\n })\n );\n return result.reviews[0]?.id ?? null;\n },\n getRecentCommits: async () => {\n const result = await run(\n \"git.getCommits\",\n Effect.gen(function* result() {\n const git = yield* GitService;\n return yield* git.getCommits({ limit: 10, offset: 0 });\n })\n );\n return result.commits;\n },\n getRepositoryInfo: () =>\n run(\n \"git.getRepositoryInfo\",\n Effect.gen(function* getRepositoryInfo() {\n const git = yield* GitService;\n return yield* git.getRepositoryInfo;\n })\n ),\n getStagedDiff: () =>\n run(\n \"git.getStagedDiff\",\n Effect.gen(function* getStagedDiff() {\n const git = yield* GitService;\n return yield* git.getStagedDiff;\n })\n ),\n getStagedFiles: () =>\n run(\n \"git.getStagedFiles\",\n Effect.gen(function* getStagedFiles() {\n const git = yield* GitService;\n return yield* git.getStagedFiles;\n })\n ),\n readonly: config.readonly,\n repoRoot: config.repoRoot,\n requireWritable: throwIfReadonly,\n };\n\n const baseGlobals = createSandboxGlobals(deps);\n\n // -- reviews namespace (schema-validated) ---------------------------------\n\n const reviews = Object.freeze({\n create: async (inputValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeReviewCreateInput(inputValue);\n return run(\n \"reviews.create\",\n Effect.gen(function* create() {\n const svc = yield* ReviewService;\n return yield* svc.create(parsed);\n })\n );\n },\n export: async (options: unknown) => {\n const opts = decodeInputSync(\n ReviewExportInput,\n options,\n \"reviews.export\"\n );\n const markdown = await run(\n \"reviews.export\",\n Effect.gen(function* markdown() {\n const svc = yield* ExportService;\n return yield* svc.exportReview(opts.reviewId);\n })\n );\n return { markdown, reviewId: opts.reviewId };\n },\n get: (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n return run(\n \"reviews.get\",\n Effect.gen(function* get() {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n );\n },\n getComments: (reviewIdValue: unknown, filePath?: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n if (\n filePath !== null &&\n filePath !== undefined &&\n typeof filePath !== \"string\"\n ) {\n return Promise.reject(new Error(\"Invalid filePath: expected a string\"));\n }\n return run(\n \"reviews.getComments\",\n Effect.gen(function* getComments() {\n const svc = yield* CommentService;\n return filePath\n ? yield* svc.getByFile(reviewId, filePath as string)\n : yield* svc.getByReview(reviewId);\n })\n );\n },\n getDiff: async (query: unknown) => {\n const q = decodeInputSync(ReviewDiffQuery, query, \"reviews.getDiff\");\n const hunks = await run(\n `reviews.getDiff:${q.filePath}`,\n Effect.gen(function* hunks() {\n const svc = yield* ReviewService;\n return yield* svc.getFileHunks(q.reviewId, q.filePath);\n })\n );\n return { filePath: q.filePath, hunks, reviewId: q.reviewId };\n },\n getFiles: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const review = await run(\n \"reviews.getFiles\",\n Effect.gen(function* review() {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n );\n return review.files;\n },\n getStatus: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const [review, stats] = await Promise.all([\n run(\n \"reviews.getStatus.review\",\n Effect.gen(function* () {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n ),\n run(\n \"reviews.getStatus.comments\",\n Effect.gen(function* () {\n const svc = yield* CommentService;\n return yield* svc.getStats(reviewId);\n })\n ),\n ]);\n return {\n resolvedComments: stats.resolved,\n reviewId,\n status: review.status,\n totalComments: stats.total,\n unresolvedComments: stats.unresolved,\n withSuggestions: 0,\n };\n },\n getSuggestions: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const comments = await run(\n \"reviews.getSuggestions\",\n Effect.gen(function* comments() {\n const svc = yield* CommentService;\n return yield* svc.getByReview(reviewId);\n })\n );\n return comments\n .filter((c: { suggestion?: string | null }) => c.suggestion != null)\n .map((c: { id: string; suggestion: string | null }) => ({\n commentId: c.id,\n id: c.id,\n originalCode: \"\",\n suggestedCode: c.suggestion ?? \"\",\n }));\n },\n list: async (filters?: unknown) => {\n const parsed = decodeInputSync(\n ReviewListFilters,\n filters ?? {},\n \"reviews.list\"\n );\n return run(\n \"reviews.list\",\n Effect.gen(function* list() {\n const svc = yield* ReviewService;\n return yield* svc.list({\n page: parsed.page,\n pageSize: parsed.limit,\n repositoryPath: config.repoRoot,\n sourceType: parsed.sourceType,\n status: parsed.status as\n | \"approved\"\n | \"changes_requested\"\n | \"in_progress\"\n | undefined,\n });\n })\n );\n },\n });\n\n // -- todos namespace (schema-validated) -----------------------------------\n\n const todos = Object.freeze({\n add: async (inputValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeCreateTodoInput(inputValue);\n return run(\n \"todos.add\",\n Effect.gen(function* add() {\n const svc = yield* TodoService;\n return yield* svc.create(parsed as CoreCreateTodoInput);\n })\n );\n },\n clear: async (_reviewIdValue?: unknown) => {\n throwIfReadonly();\n return run(\n \"todos.clear\",\n Effect.gen(function* clear() {\n const svc = yield* TodoService;\n const result = yield* svc.removeCompleted();\n return { removed: result.deleted, success: true as const };\n })\n );\n },\n done: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.done\",\n Effect.gen(function* done() {\n const svc = yield* TodoService;\n const todo = yield* svc.getById(todoId);\n if (todo.completed) {\n return todo;\n }\n return yield* svc.toggle(todoId);\n })\n );\n },\n list: async (filter?: unknown) => {\n const parsed = decodeInputSync(\n TodoListFilter,\n filter ?? {},\n \"todos.list\"\n );\n const result = await run(\n \"todos.list\",\n Effect.gen(function* result() {\n const svc = yield* TodoService;\n return yield* svc.list({ reviewId: parsed.reviewId });\n })\n );\n return result.data;\n },\n move: async (todoIdValue: unknown, positionValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeInputSync(\n TodoMoveInput,\n { position: positionValue, todoId: todoIdValue },\n \"todos.move\"\n );\n return run(\n \"todos.move\",\n Effect.gen(function* move() {\n const svc = yield* TodoService;\n return yield* svc.move(parsed.todoId, parsed.position);\n })\n );\n },\n remove: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.remove\",\n Effect.gen(function* remove() {\n const svc = yield* TodoService;\n return yield* svc.remove(todoId);\n })\n );\n },\n undone: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.undone\",\n Effect.gen(function* undone() {\n const svc = yield* TodoService;\n const todo = yield* svc.getById(todoId);\n if (!todo.completed) {\n return todo;\n }\n return yield* svc.toggle(todoId);\n })\n );\n },\n });\n\n return {\n events: baseGlobals.events,\n intelligence: baseGlobals.intelligence,\n reviews,\n session: baseGlobals.session,\n sources: baseGlobals.sources,\n todos,\n };\n};\n\n// ---------------------------------------------------------------------------\n// executeCode — main entry point (Effect-first)\n// ---------------------------------------------------------------------------\n\n/**\n * Execute sandboxed user code against the Ringi core services.\n *\n * The execution pipeline is an Effect that:\n * - Validates code and timeout via typed errors\n * - Builds schema-validated sandbox namespaces\n * - Runs the VM sandbox with a deterministic timeout model\n * (vm.Script timeout for sync loops + Effect.timeoutFail for async wall-clock)\n * - Propagates errors via typed tagged errors, never raw throws\n *\n * The managed runtime is passed explicitly — it provides the concrete service\n * environment. Individual sandbox namespace methods use `runtime.runPromise`\n * because they are called from user JS inside the vm sandbox (Promise boundary).\n */\nexport const executeCode = (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n input: ExecuteInput\n): Effect.Effect<\n ExecuteOutput,\n InvalidCodeError | InvalidTimeoutError,\n never\n> =>\n Effect.gen(function* executeCode() {\n const timeoutMs = yield* validateTimeout(input.timeout, config);\n const code = yield* validateCode(input.code);\n const journal = createJournal();\n const globals = buildSandboxGlobals(runtime, config, journal);\n\n const sandboxResult = yield* runSandbox(globals, code, timeoutMs).pipe(\n Effect.catchTags({\n ExecutionTimeoutError: (e) =>\n Effect.succeed({\n error: e.message,\n ok: false as const,\n result:\n journal.entries.length === 0\n ? null\n : { operations: journal.entries },\n }),\n SandboxExecutionError: (e) =>\n Effect.succeed({\n error: e.message,\n ok: false as const,\n result:\n journal.entries.length === 0\n ? null\n : { operations: journal.entries },\n }),\n }),\n Effect.map((result) => {\n if (\n typeof result === \"object\" &&\n result !== null &&\n \"ok\" in result &&\n (result as { ok: boolean }).ok === false\n ) {\n return result as ExecuteOutput;\n }\n return { ok: true as const, result } as ExecuteOutput;\n })\n );\n\n return finalizeOutput(sandboxResult, config.maxOutputBytes);\n });\n\n// ---------------------------------------------------------------------------\n// executeCodeToPromise — bridge for the MCP server\n// ---------------------------------------------------------------------------\n\n/**\n * Runs the Effect-based `executeCode` pipeline against the managed runtime.\n * This is the ONLY place `runtime.runPromise` is called for the execution\n * pipeline — the server boundary.\n *\n * Typed errors (InvalidCodeError, InvalidTimeoutError) are caught and\n * formatted as ExecuteOutput instead of propagating as rejections.\n */\nexport const executeCodeToPromise = async (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n input: ExecuteInput\n): Promise<ExecuteOutput> => {\n const program = executeCode(runtime, config, input).pipe(\n Effect.catchTags({\n InvalidCodeError: (e) =>\n Effect.succeed<ExecuteOutput>({\n error: e.message,\n ok: false,\n result: null,\n }),\n InvalidTimeoutError: (e) =>\n Effect.succeed<ExecuteOutput>({\n error: e.message,\n ok: false,\n result: null,\n }),\n })\n );\n\n try {\n return await Effect.runPromise(program);\n } catch (error) {\n // Catch-all for defects — return a safe output\n return finalizeOutput(\n {\n error: formatError(error),\n ok: false,\n result: null,\n },\n config.maxOutputBytes\n );\n }\n};\n","import * as ConfigProvider from \"effect/ConfigProvider\";\nimport * as Layer from \"effect/Layer\";\nimport * as ManagedRuntime from \"effect/ManagedRuntime\";\n\nimport { CoreLive } from \"@/core/runtime\";\nimport type { McpConfigShape } from \"@/mcp/config\";\nimport { McpConfigLive } from \"@/mcp/config\";\n\nconst makeConfigLayer = (config: McpConfigShape) =>\n Layer.setConfigProvider(\n ConfigProvider.fromMap(\n new Map([\n [\"DB_PATH\", config.dbPath],\n [\"REPOSITORY_PATH\", config.repoRoot],\n ])\n )\n );\n\nconst makeMcpLayer = (config: McpConfigShape) =>\n Layer.mergeAll(CoreLive, McpConfigLive(config)).pipe(\n Layer.provideMerge(makeConfigLayer(config))\n );\n\n/** The concrete environment provided by the MCP runtime layer. */\nexport type McpRuntimeContext = Layer.Layer.Success<\n ReturnType<typeof makeMcpLayer>\n>;\n\n/** Typed MCP managed runtime — no `any` in the environment or error channels. */\nexport type McpManagedRuntime = ManagedRuntime.ManagedRuntime<\n McpRuntimeContext,\n never\n>;\n\nexport const createMcpRuntime = (config: McpConfigShape): McpManagedRuntime =>\n ManagedRuntime.make(makeMcpLayer(config)) as McpManagedRuntime;\n","import { stdin, stdout } from \"node:process\";\n\nimport { resolveMcpConfig } from \"@/mcp/config\";\nimport type { ExecuteInput } from \"@/mcp/execute\";\nimport { executeCodeToPromise } from \"@/mcp/execute\";\nimport { createMcpRuntime } from \"@/mcp/runtime\";\n\nconst JSON_RPC_VERSION = \"2.0\";\nconst LATEST_PROTOCOL_VERSION = \"2025-11-25\";\nconst MCP_SERVER_NAME = \"ringi\";\nconst MCP_SERVER_VERSION = process.env.npm_package_version ?? \"0.0.0-dev\";\n\nconst EXECUTE_TOOL = {\n description:\n \"Run constrained JavaScript against Ringi review namespaces: review, todo, comment, diff, export, and session.\",\n inputSchema: {\n additionalProperties: false,\n properties: {\n code: {\n description:\n \"JavaScript snippet to evaluate inside the Ringi MCP sandbox.\",\n type: \"string\",\n },\n timeout: {\n description:\n \"Optional timeout in milliseconds. Defaults to 30000 and clamps at 120000.\",\n type: \"number\",\n },\n },\n required: [\"code\"],\n type: \"object\",\n },\n name: \"execute\",\n outputSchema: {\n additionalProperties: false,\n properties: {\n error: { type: \"string\" },\n ok: { type: \"boolean\" },\n result: {},\n truncated: { type: \"boolean\" },\n },\n required: [\"ok\", \"result\"],\n type: \"object\",\n },\n} as const;\n\ntype JsonRpcId = number | string | null;\n\ninterface JsonRpcRequest {\n readonly id?: JsonRpcId;\n readonly method: string;\n readonly params?: Record<string, unknown>;\n}\n\nconst writeStderr = (message: string): void => {\n process.stderr.write(`[ringi:mcp] ${message}\\n`);\n};\n\nconst writeMessage = (message: unknown): void => {\n const body = JSON.stringify(message);\n const payload = `Content-Length: ${Buffer.byteLength(body, \"utf8\")}\\r\\n\\r\\n${body}`;\n stdout.write(payload);\n};\n\nconst parseContentLength = (headerText: string): number => {\n const headerLine = headerText\n .split(\"\\r\\n\")\n .find((line) => line.toLowerCase().startsWith(\"content-length:\"));\n\n if (!headerLine) {\n throw new Error(\"Missing Content-Length header\");\n }\n\n const rawValue = headerLine.slice(headerLine.indexOf(\":\") + 1).trim();\n const parsed = Number.parseInt(rawValue, 10);\n\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(`Invalid Content-Length header: ${rawValue}`);\n }\n\n return parsed;\n};\n\nconst formatError = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n};\n\nconst sendError = (id: JsonRpcId, code: number, message: string): void => {\n writeMessage({\n error: {\n code,\n message,\n },\n id,\n jsonrpc: JSON_RPC_VERSION,\n });\n};\n\nconst sendResult = (id: JsonRpcId, result: unknown): void => {\n writeMessage({\n id,\n jsonrpc: JSON_RPC_VERSION,\n result,\n });\n};\n\nconst createInitializeResult = () => ({\n capabilities: {\n tools: {\n listChanged: false,\n },\n },\n protocolVersion: LATEST_PROTOCOL_VERSION,\n serverInfo: {\n description:\n \"Local-first MCP codemode adapter over the Ringi core runtime.\",\n name: MCP_SERVER_NAME,\n version: MCP_SERVER_VERSION,\n },\n});\n\nclass StdioJsonRpcServer {\n private readonly config = resolveMcpConfig(process.argv.slice(2));\n\n private readonly runtime = createMcpRuntime(this.config);\n\n private buffer = Buffer.alloc(0);\n\n private initialized = false;\n\n private shuttingDown = false;\n\n public start(): void {\n stdin.on(\"data\", async (chunk: Buffer) => {\n this.buffer = Buffer.concat([this.buffer, chunk]);\n try {\n await this.drainBuffer();\n } catch (error) {\n writeStderr(`fatal buffer drain error: ${formatError(error)}`);\n }\n });\n\n stdin.on(\"end\", async () => {\n await this.runtime.dispose();\n });\n\n process.on(\"SIGINT\", async () => {\n await this.close(0);\n });\n\n process.on(\"SIGTERM\", async () => {\n await this.close(0);\n });\n\n writeStderr(\n `server started readonly=${String(this.config.readonly)} repo=${this.config.repoRoot}`\n );\n }\n\n private async close(code: number): Promise<void> {\n await this.runtime.dispose();\n process.exit(code);\n }\n\n private async drainBuffer(): Promise<void> {\n while (true) {\n const headerEnd = this.buffer.indexOf(\"\\r\\n\\r\\n\");\n if (headerEnd === -1) {\n return;\n }\n\n const headerText = this.buffer.subarray(0, headerEnd).toString(\"utf8\");\n const contentLength = parseContentLength(headerText);\n const messageEnd = headerEnd + 4 + contentLength;\n if (this.buffer.byteLength < messageEnd) {\n return;\n }\n\n const payload = this.buffer\n .subarray(headerEnd + 4, messageEnd)\n .toString(\"utf8\");\n this.buffer = this.buffer.subarray(messageEnd);\n\n let message: JsonRpcRequest;\n try {\n message = JSON.parse(payload) as JsonRpcRequest;\n } catch (error) {\n sendError(null, -32_700, `Parse error: ${formatError(error)}`);\n continue;\n }\n\n await this.handleMessage(message);\n }\n }\n\n private async handleMessage(message: JsonRpcRequest): Promise<void> {\n if (typeof message.method !== \"string\") {\n sendError(message.id ?? null, -32_600, \"Invalid JSON-RPC request\");\n return;\n }\n\n try {\n if (await this.handleLifecycleMessage(message)) {\n return;\n }\n\n this.assertInitialized();\n\n if (message.method === \"tools/list\") {\n sendResult(message.id ?? null, { tools: [EXECUTE_TOOL] });\n return;\n }\n\n if (message.method === \"tools/call\") {\n await this.handleToolCall(message.id ?? null, message.params);\n return;\n }\n\n sendError(\n message.id ?? null,\n -32_601,\n `Method not found: ${message.method}`\n );\n } catch (error) {\n sendError(message.id ?? null, -32_603, formatError(error));\n }\n }\n\n private async handleLifecycleMessage(\n message: JsonRpcRequest\n ): Promise<boolean> {\n if (message.method === \"initialize\") {\n this.initialized = true;\n sendResult(message.id ?? null, createInitializeResult());\n return true;\n }\n\n if (message.method === \"notifications/initialized\") {\n return true;\n }\n\n if (message.method === \"ping\") {\n sendResult(message.id ?? null, {});\n return true;\n }\n\n if (message.method === \"shutdown\") {\n this.shuttingDown = true;\n sendResult(message.id ?? null, {});\n return true;\n }\n\n if (message.method === \"exit\") {\n await this.close(this.shuttingDown ? 0 : 1);\n return true;\n }\n\n return false;\n }\n\n private assertInitialized(): void {\n if (!this.initialized) {\n throw new Error(\"Server is not initialized\");\n }\n\n if (this.shuttingDown) {\n throw new Error(\"Server is shutting down\");\n }\n }\n\n private async handleToolCall(\n id: JsonRpcId,\n params: Record<string, unknown> | undefined\n ): Promise<void> {\n if (!params || typeof params.name !== \"string\") {\n sendError(id, -32_602, \"Invalid tools/call params\");\n return;\n }\n\n if (params.name !== EXECUTE_TOOL.name) {\n sendError(id, -32_602, `Tool not found: ${String(params.name)}`);\n return;\n }\n\n const argumentsValue = params.arguments;\n if (typeof argumentsValue !== \"object\" || argumentsValue === null) {\n sendError(id, -32_602, \"Invalid tools/call arguments\");\n return;\n }\n\n const executeResult = await executeCodeToPromise(\n this.runtime,\n this.config,\n argumentsValue as ExecuteInput\n );\n\n sendResult(id, {\n content: [\n {\n text: JSON.stringify(executeResult),\n type: \"text\",\n },\n ],\n isError: !executeResult.ok,\n structuredContent: executeResult,\n });\n }\n}\n\nnew StdioJsonRpcServer().start();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/mcp/config.ts","../src/mcp/errors.ts","../src/mcp/namespaces.ts","../src/mcp/sandbox.ts","../src/mcp/schemas.ts","../src/mcp/execute.ts","../src/mcp/runtime.ts","../src/mcp/server.ts"],"names":["Layer","Schema","parsed","Schema3","result","markdown","hunks","review","comments","executeCode","formatError"],"mappings":"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","file":"mcp.js","sourcesContent":["import { execFileSync } from \"node:child_process\";\n\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\n\nconst DEFAULT_DB_PATH = \".ringi/reviews.db\";\nconst DEFAULT_MAX_OUTPUT_BYTES = 100 * 1024;\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\n\nexport interface McpConfigShape {\n readonly cwd: string;\n readonly dbPath: string;\n readonly defaultTimeoutMs: number;\n readonly maxOutputBytes: number;\n readonly maxTimeoutMs: number;\n readonly readonly: boolean;\n readonly repoRoot: string;\n}\n\nexport class McpConfig extends Context.Tag(\"McpConfig\")<\n McpConfig,\n McpConfigShape\n>() {}\n\nexport const McpConfigLive = (config: McpConfigShape) =>\n Layer.succeed(McpConfig, config);\n\nconst resolveRepositoryRoot = (repoOverride?: string): string => {\n const cwd = repoOverride ?? process.cwd();\n\n return execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n cwd,\n encoding: \"utf8\",\n }).trim();\n};\n\nconst resolveDbPath = (repoRoot: string, dbPathOverride?: string): string =>\n dbPathOverride ?? `${repoRoot}/${DEFAULT_DB_PATH}`;\n\nconst parseNumberFlag = (\n flagValue: string | undefined,\n fallback: number,\n name: string\n): number => {\n if (flagValue === undefined) {\n return fallback;\n }\n\n const parsed = Number.parseInt(flagValue, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(\n `Invalid ${name}: expected a positive integer, received ${flagValue}`\n );\n }\n\n return parsed;\n};\n\nexport const resolveMcpConfig = (argv: readonly string[]): McpConfigShape => {\n const args = [...argv];\n const readonly = args.includes(\"--readonly\");\n const dbIndex = args.indexOf(\"--db-path\");\n const repoIndex = args.indexOf(\"--repo\");\n const timeoutIndex = args.indexOf(\"--timeout-ms\");\n const maxOutputIndex = args.indexOf(\"--max-output-bytes\");\n\n const repoRoot = resolveRepositoryRoot(\n repoIndex === -1 ? undefined : args[repoIndex + 1]\n );\n\n return {\n cwd: process.cwd(),\n dbPath: resolveDbPath(\n repoRoot,\n dbIndex === -1 ? undefined : args[dbIndex + 1]\n ),\n defaultTimeoutMs: parseNumberFlag(\n timeoutIndex === -1 ? undefined : args[timeoutIndex + 1],\n DEFAULT_TIMEOUT_MS,\n \"timeout\"\n ),\n maxOutputBytes: parseNumberFlag(\n maxOutputIndex === -1 ? undefined : args[maxOutputIndex + 1],\n DEFAULT_MAX_OUTPUT_BYTES,\n \"max output bytes\"\n ),\n maxTimeoutMs: MAX_TIMEOUT_MS,\n readonly,\n repoRoot,\n };\n};\n","/**\n * MCP execution domain errors.\n *\n * All errors that can occur during sandbox execution are modeled as typed,\n * tagged errors for exhaustive handling via catchTag/catchTags.\n */\n\nimport * as Schema from \"effect/Schema\";\n\n/** Code validation failed (empty, too long, non-string). */\nexport class InvalidCodeError extends Schema.TaggedError<InvalidCodeError>()(\n \"InvalidCodeError\",\n { message: Schema.String }\n) {}\n\n/** Timeout parameter is invalid (non-finite, zero, negative). */\nexport class InvalidTimeoutError extends Schema.TaggedError<InvalidTimeoutError>()(\n \"InvalidTimeoutError\",\n { message: Schema.String, received: Schema.Unknown }\n) {}\n\n/** Schema-based input decoding failed. */\nexport class InputDecodeError extends Schema.TaggedError<InputDecodeError>()(\n \"InputDecodeError\",\n { message: Schema.String, operation: Schema.String }\n) {}\n\n/** Write operation rejected in readonly mode. */\nexport class ReadonlyViolationError extends Schema.TaggedError<ReadonlyViolationError>()(\n \"ReadonlyViolationError\",\n { message: Schema.String }\n) {}\n\n/** Sandbox execution timed out. */\nexport class ExecutionTimeoutError extends Schema.TaggedError<ExecutionTimeoutError>()(\n \"ExecutionTimeoutError\",\n { message: Schema.String, timeoutMs: Schema.Number }\n) {}\n\n/** Sandbox execution failed with an unrecoverable error. */\nexport class SandboxExecutionError extends Schema.TaggedError<SandboxExecutionError>()(\n \"SandboxExecutionError\",\n { error: Schema.Defect, message: Schema.String }\n) {}\n","/**\n * MCP sandbox namespace factories.\n *\n * Each factory creates a frozen namespace object suitable for injection into the\n * vm.Context sandbox. Factories accept dependency-injected callbacks so they can\n * be tested without an Effect runtime.\n */\n\nimport { parseDiff, getDiffSummary } from \"@ringi/core/services/diff.service\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const PHASE_UNAVAILABLE_MESSAGE =\n \"This capability is not available in the current server phase. Intelligence features require Phase 2.\";\n\n// ---------------------------------------------------------------------------\n// Types (match docs/MCP.md contracts)\n// ---------------------------------------------------------------------------\n\ntype ReviewEventType =\n | \"reviews.updated\"\n | \"comments.updated\"\n | \"todos.updated\"\n | \"files.changed\";\n\ninterface EventSubscription {\n id: string;\n eventTypes: ReviewEventType[];\n reviewId?: string;\n}\n\ninterface ReviewEvent {\n type: ReviewEventType;\n reviewId?: string;\n timestamp: number;\n payload?: unknown;\n}\n\ntype ReviewSource =\n | { type: \"staged\" }\n | { type: \"branch\"; baseRef: string; headRef: string }\n | { type: \"commits\"; commits: string[] };\n\n// ---------------------------------------------------------------------------\n// intelligence namespace — Phase 2+, all methods fail as phase unavailable\n// ---------------------------------------------------------------------------\n\nexport const createIntelligenceNamespace = () =>\n Object.freeze({\n getConfidence: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n getImpacts: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n getRelationships: (_reviewId: string): Promise<never> =>\n Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n validate: (_options: {\n reviewId: string;\n checks?: string[];\n }): Promise<never> => Promise.reject(new Error(PHASE_UNAVAILABLE_MESSAGE)),\n });\n\n// ---------------------------------------------------------------------------\n// session namespace\n// ---------------------------------------------------------------------------\n\ninterface SessionDeps {\n readonly: boolean;\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getLatestReviewId: () => Promise<string | null>;\n}\n\nexport const createSessionNamespace = (deps: SessionDeps) =>\n Object.freeze({\n context: async () => {\n const repo = await deps.getRepositoryInfo();\n const activeReviewId = await deps.getLatestReviewId();\n return {\n activeReviewId,\n activeSnapshotId: null as string | null,\n readonly: deps.readonly,\n repository: repo,\n serverMode: \"stdio\" as const,\n };\n },\n status: async () => ({\n activeSubscriptions: 0,\n currentPhase: \"phase1\" as const,\n ok: true as const,\n readonly: deps.readonly,\n }),\n });\n\n// ---------------------------------------------------------------------------\n// sources namespace\n// ---------------------------------------------------------------------------\n\ninterface SourcesDeps {\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getStagedFiles: () => Promise<readonly { path: string; status: string }[]>;\n getBranches: () => Promise<readonly { name: string; current: boolean }[]>;\n getRecentCommits: () => Promise<\n readonly { hash: string; author: string; date: string; message: string }[]\n >;\n getStagedDiff: () => Promise<string>;\n getBranchDiff: (branch: string) => Promise<string>;\n getCommitDiff: (shas: string[]) => Promise<string>;\n}\n\nconst buildPreview = (diffText: string, source: ReviewSource) => {\n const files = parseDiff(diffText);\n const summary = getDiffSummary(files);\n return {\n files: files.map((f) => ({\n additions: f.additions,\n deletions: f.deletions,\n path: f.newPath,\n status: f.status,\n })),\n source,\n summary: {\n totalAdditions: summary.totalAdditions,\n totalDeletions: summary.totalDeletions,\n totalFiles: summary.totalFiles,\n },\n };\n};\n\nexport const createSourcesNamespace = (deps: SourcesDeps) =>\n Object.freeze({\n list: async () => {\n const [stagedFiles, branches, commits] = await Promise.all([\n deps.getStagedFiles(),\n deps.getBranches(),\n deps.getRecentCommits(),\n ]);\n return {\n branches: branches.map((b) => ({ current: b.current, name: b.name })),\n recentCommits: commits.map((c) => ({\n author: c.author,\n date: c.date,\n hash: c.hash,\n message: c.message,\n })),\n staged: { available: stagedFiles.length > 0 },\n };\n },\n previewDiff: async (source: ReviewSource) => {\n let diffText: string;\n switch (source.type) {\n case \"staged\": {\n diffText = await deps.getStagedDiff();\n break;\n }\n case \"branch\": {\n diffText = await deps.getBranchDiff(source.baseRef);\n break;\n }\n case \"commits\": {\n diffText = await deps.getCommitDiff(source.commits);\n break;\n }\n default: {\n throw new Error(\n `Unsupported source type: ${(source as { type: string }).type}`\n );\n }\n }\n return buildPreview(diffText, source);\n },\n });\n\n// ---------------------------------------------------------------------------\n// events namespace — Phase 1 stub with in-memory subscription tracking\n// ---------------------------------------------------------------------------\n\nexport const createEventsNamespace = () => {\n let subscriptionCounter = 0;\n\n return Object.freeze({\n listRecent: async (_filter?: {\n reviewId?: string;\n limit?: number;\n }): Promise<ReviewEvent[]> => [],\n subscribe: async (filter?: {\n eventTypes?: ReviewEventType[];\n reviewId?: string;\n }): Promise<EventSubscription> => {\n subscriptionCounter += 1;\n return {\n eventTypes: filter?.eventTypes ?? [\n \"reviews.updated\",\n \"comments.updated\",\n \"todos.updated\",\n \"files.changed\",\n ],\n id: `sub_${subscriptionCounter}`,\n reviewId: filter?.reviewId,\n };\n },\n });\n};\n","/**\n * MCP sandbox global construction.\n *\n * Creates the six spec-compliant namespaces (`reviews`, `todos`, `sources`,\n * `intelligence`, `events`, `session`) from injected dependencies.\n *\n * All domain interaction goes through the `call` callback so the sandbox module\n * stays testable without an Effect runtime.\n */\n\nimport {\n createEventsNamespace,\n createIntelligenceNamespace,\n createSessionNamespace,\n createSourcesNamespace,\n} from \"@/mcp/namespaces\";\n\n// ---------------------------------------------------------------------------\n// Dependency contract\n// ---------------------------------------------------------------------------\n\nexport interface SandboxDeps {\n readonly readonly: boolean;\n readonly repoRoot: string;\n\n /** Run a named domain operation, recording it in the journal. */\n call: <T>(name: string, fn: () => Promise<T>) => Promise<T>;\n\n /** Throws if the server is in readonly mode. */\n requireWritable: () => void;\n\n // -- Git-backed deps for sources/session --\n getRepositoryInfo: () => Promise<{\n name: string;\n path: string;\n branch: string;\n remote: string | null;\n }>;\n getLatestReviewId: () => Promise<string | null>;\n getStagedFiles: () => Promise<readonly { path: string; status: string }[]>;\n getBranches: () => Promise<readonly { name: string; current: boolean }[]>;\n getRecentCommits: () => Promise<\n readonly { hash: string; author: string; date: string; message: string }[]\n >;\n getStagedDiff: () => Promise<string>;\n getBranchDiff: (branch: string) => Promise<string>;\n getCommitDiff: (shas: string[]) => Promise<string>;\n}\n\n// ---------------------------------------------------------------------------\n// Namespace types (public for test assertions)\n// ---------------------------------------------------------------------------\n\nexport interface SandboxGlobals {\n readonly reviews: ReviewsNamespace;\n readonly todos: TodosNamespace;\n readonly sources: ReturnType<typeof createSourcesNamespace>;\n readonly intelligence: ReturnType<typeof createIntelligenceNamespace>;\n readonly events: ReturnType<typeof createEventsNamespace>;\n readonly session: ReturnType<typeof createSessionNamespace>;\n}\n\ninterface ReviewsNamespace {\n list: (filters?: unknown) => Promise<unknown>;\n get: (reviewId: unknown) => Promise<unknown>;\n create: (input: unknown) => Promise<unknown>;\n getFiles: (reviewId: unknown) => Promise<unknown>;\n getDiff: (query: unknown) => Promise<unknown>;\n getComments: (reviewId: unknown, filePath?: unknown) => Promise<unknown>;\n getSuggestions: (reviewId: unknown) => Promise<unknown>;\n getStatus: (reviewId: unknown) => Promise<unknown>;\n export: (options: unknown) => Promise<unknown>;\n}\n\ninterface TodosNamespace {\n list: (filter?: unknown) => Promise<unknown>;\n add: (input: unknown) => Promise<unknown>;\n done: (todoId: unknown) => Promise<unknown>;\n undone: (todoId: unknown) => Promise<unknown>;\n move: (todoId: unknown, position: unknown) => Promise<unknown>;\n remove: (todoId: unknown) => Promise<unknown>;\n clear: (reviewId?: unknown) => Promise<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Validation helpers\n// ---------------------------------------------------------------------------\n\nconst parseId = (value: unknown, fieldName: string): string => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Invalid ${fieldName}: expected a non-empty string`);\n }\n return value;\n};\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Build the six frozen namespace objects for sandbox injection.\n *\n * The `call` callback wraps every domain operation with journal tracking and\n * error handling. This keeps the sandbox module free of Effect imports.\n */\nexport const createSandboxGlobals = (deps: SandboxDeps): SandboxGlobals => {\n // -- reviews namespace (spec: reviews.*) ----------------------------------\n const reviews: ReviewsNamespace = Object.freeze({\n create: async (_input: unknown) => {\n deps.requireWritable();\n return deps.call(\"reviews.create\", async () => {\n throw new Error(\"reviews.create: not wired to runtime\");\n });\n },\n export: (_options: unknown) =>\n deps.call(\"reviews.export\", async () => {\n throw new Error(\"reviews.export: not wired to runtime\");\n }),\n get: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.get\", async () => {\n throw new Error(\"reviews.get: not wired to runtime\");\n });\n },\n getComments: (reviewIdValue: unknown, _filePath?: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getComments\", async () => {\n throw new Error(\"reviews.getComments: not wired to runtime\");\n });\n },\n getDiff: (_query: unknown) =>\n deps.call(\"reviews.getDiff\", async () => {\n throw new Error(\"reviews.getDiff: not wired to runtime\");\n }),\n getFiles: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getFiles\", async () => {\n throw new Error(\"reviews.getFiles: not wired to runtime\");\n });\n },\n getStatus: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getStatus\", async () => {\n throw new Error(\"reviews.getStatus: not wired to runtime\");\n });\n },\n getSuggestions: (reviewIdValue: unknown) => {\n parseId(reviewIdValue, \"reviewId\");\n return deps.call(\"reviews.getSuggestions\", async () => {\n throw new Error(\"reviews.getSuggestions: not wired to runtime\");\n });\n },\n list: (_filters?: unknown) =>\n deps.call(\"reviews.list\", async () => {\n throw new Error(\"reviews.list: not wired to runtime\");\n }),\n });\n\n // -- todos namespace (spec: todos.*) --------------------------------------\n const todos: TodosNamespace = Object.freeze({\n add: async (_input: unknown) => {\n deps.requireWritable();\n return deps.call(\"todos.add\", async () => {\n throw new Error(\"todos.add: not wired to runtime\");\n });\n },\n clear: async (_reviewIdValue?: unknown) => {\n deps.requireWritable();\n return deps.call(\"todos.clear\", async () => {\n throw new Error(\"todos.clear: not wired to runtime\");\n });\n },\n done: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.done\", async () => {\n throw new Error(\"todos.done: not wired to runtime\");\n });\n },\n list: (_filter?: unknown) =>\n deps.call(\"todos.list\", async () => {\n throw new Error(\"todos.list: not wired to runtime\");\n }),\n move: async (todoIdValue: unknown, _positionValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.move\", async () => {\n throw new Error(\"todos.move: not wired to runtime\");\n });\n },\n remove: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.remove\", async () => {\n throw new Error(\"todos.remove: not wired to runtime\");\n });\n },\n undone: async (todoIdValue: unknown) => {\n deps.requireWritable();\n parseId(todoIdValue, \"todoId\");\n return deps.call(\"todos.undone\", async () => {\n throw new Error(\"todos.undone: not wired to runtime\");\n });\n },\n });\n\n // -- Remaining namespaces use dedicated factories -------------------------\n const sources = createSourcesNamespace({\n getBranchDiff: deps.getBranchDiff,\n getBranches: deps.getBranches,\n getCommitDiff: deps.getCommitDiff,\n getRecentCommits: deps.getRecentCommits,\n getRepositoryInfo: deps.getRepositoryInfo,\n getStagedDiff: deps.getStagedDiff,\n getStagedFiles: deps.getStagedFiles,\n });\n\n const intelligence = createIntelligenceNamespace();\n\n const events = createEventsNamespace();\n\n const session = createSessionNamespace({\n getLatestReviewId: deps.getLatestReviewId,\n getRepositoryInfo: deps.getRepositoryInfo,\n readonly: deps.readonly,\n });\n\n return { events, intelligence, reviews, session, sources, todos };\n};\n","/**\n * MCP sandbox input schemas.\n *\n * Centralizes all validation for sandbox namespace inputs using Effect Schema.\n * Replaces hand-written parse* helpers with declarative, composable schemas.\n */\n\nimport { ReviewId, ReviewSourceType } from \"@ringi/core/schemas/review\";\nimport { TodoId } from \"@ringi/core/schemas/todo\";\nimport * as Schema from \"effect/Schema\";\n\n// ---------------------------------------------------------------------------\n// Shared\n// ---------------------------------------------------------------------------\n\nconst NonEmptyString = Schema.String.pipe(Schema.minLength(1));\n\n// ---------------------------------------------------------------------------\n// Review inputs\n// ---------------------------------------------------------------------------\n\n/**\n * Spec shape: `{ source: { type, baseRef } }`.\n * Legacy shape: `{ sourceType, sourceRef }`.\n *\n * We use Schema.Union to accept either and normalize to the legacy shape.\n */\nconst ReviewCreateFromSpec = Schema.Struct({\n source: Schema.Struct({\n baseRef: Schema.optionalWith(Schema.NullOr(Schema.String), {\n default: () => null,\n }),\n type: Schema.optionalWith(ReviewSourceType, {\n default: () => \"staged\" as const,\n }),\n }),\n});\n\nconst ReviewCreateFromLegacy = Schema.Struct({\n sourceRef: Schema.optionalWith(Schema.NullOr(Schema.String), {\n default: () => null,\n }),\n sourceType: Schema.optionalWith(ReviewSourceType, {\n default: () => \"staged\" as const,\n }),\n});\n\n/** Normalized review creation input. */\nexport interface ReviewCreateInput {\n readonly sourceRef: string | null;\n readonly sourceType: \"staged\" | \"branch\" | \"commits\";\n}\n\n/** Decode unknown input into a normalized ReviewCreateInput. */\nexport const decodeReviewCreateInput = (input: unknown): ReviewCreateInput => {\n // Try spec shape first, then legacy\n if (\n typeof input === \"object\" &&\n input !== null &&\n \"source\" in (input as Record<string, unknown>)\n ) {\n const parsed = Schema.decodeUnknownSync(ReviewCreateFromSpec)(input);\n return {\n sourceRef: parsed.source.baseRef,\n sourceType: parsed.source.type,\n };\n }\n const parsed = Schema.decodeUnknownSync(ReviewCreateFromLegacy)(input);\n return {\n sourceRef: parsed.sourceRef,\n sourceType: parsed.sourceType,\n };\n};\n\nexport const ReviewExportInput = Schema.Struct({\n reviewId: ReviewId,\n});\nexport type ReviewExportInput = typeof ReviewExportInput.Type;\n\nexport const ReviewDiffQuery = Schema.Struct({\n filePath: NonEmptyString,\n reviewId: ReviewId,\n});\nexport type ReviewDiffQuery = typeof ReviewDiffQuery.Type;\n\nexport const ReviewListFilters = Schema.Struct({\n limit: Schema.optionalWith(Schema.Number, { default: () => 20 }),\n page: Schema.optionalWith(Schema.Number, { default: () => 1 }),\n pageSize: Schema.optionalWith(Schema.Number, { default: () => 20 }),\n sourceType: Schema.optional(Schema.String),\n status: Schema.optional(Schema.String),\n});\nexport type ReviewListFilters = typeof ReviewListFilters.Type;\n\n// ---------------------------------------------------------------------------\n// Todo inputs\n// ---------------------------------------------------------------------------\n\n/**\n * Accepts both `text` (MCP spec) and `content` (legacy) for the todo body.\n * Normalizes to `{ content, reviewId }`.\n */\nexport interface CreateTodoInput {\n readonly content: string;\n readonly reviewId: typeof ReviewId.Type | null;\n}\n\nconst TodoInputFromSpec = Schema.Struct({\n reviewId: Schema.optionalWith(Schema.NullOr(ReviewId), {\n default: () => null,\n }),\n text: NonEmptyString,\n});\n\nconst TodoInputFromLegacy = Schema.Struct({\n content: NonEmptyString,\n reviewId: Schema.optionalWith(Schema.NullOr(ReviewId), {\n default: () => null,\n }),\n});\n\n/** Decode unknown input into a normalized CreateTodoInput. */\nexport const decodeCreateTodoInput = (input: unknown): CreateTodoInput => {\n if (\n typeof input === \"object\" &&\n input !== null &&\n \"text\" in (input as Record<string, unknown>)\n ) {\n const parsed = Schema.decodeUnknownSync(TodoInputFromSpec)(input);\n return { content: parsed.text, reviewId: parsed.reviewId };\n }\n const parsed = Schema.decodeUnknownSync(TodoInputFromLegacy)(input);\n return { content: parsed.content, reviewId: parsed.reviewId };\n};\n\nexport const TodoListFilter = Schema.Struct({\n reviewId: Schema.optional(ReviewId),\n});\nexport type TodoListFilter = typeof TodoListFilter.Type;\n\nexport const TodoMoveInput = Schema.Struct({\n position: Schema.Number,\n todoId: TodoId,\n});\nexport type TodoMoveInput = typeof TodoMoveInput.Type;\n\n// ---------------------------------------------------------------------------\n// Re-exports for convenience\n// ---------------------------------------------------------------------------\n\nexport { ReviewId, TodoId };\n","import * as vm from \"node:vm\";\n\nimport type { ReviewId } from \"@ringi/core/schemas/review\";\nimport type {\n CreateTodoInput as CoreCreateTodoInput,\n TodoId,\n} from \"@ringi/core/schemas/todo\";\nimport { CommentService } from \"@ringi/core/services/comment.service\";\nimport { ExportService } from \"@ringi/core/services/export.service\";\nimport { GitService } from \"@ringi/core/services/git.service\";\nimport { ReviewService } from \"@ringi/core/services/review.service\";\nimport { TodoService } from \"@ringi/core/services/todo.service\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { McpConfigShape } from \"@/mcp/config\";\nimport {\n ExecutionTimeoutError,\n InvalidCodeError,\n InvalidTimeoutError,\n SandboxExecutionError,\n} from \"@/mcp/errors\";\nimport type { McpManagedRuntime, McpRuntimeContext } from \"@/mcp/runtime\";\nimport type { SandboxDeps } from \"@/mcp/sandbox\";\nimport { createSandboxGlobals } from \"@/mcp/sandbox\";\nimport {\n decodeCreateTodoInput,\n decodeReviewCreateInput,\n ReviewDiffQuery,\n ReviewExportInput,\n ReviewListFilters,\n TodoListFilter,\n TodoMoveInput,\n} from \"@/mcp/schemas\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst MAX_CODE_LENGTH = 50_000;\nconst MIN_PREVIEW_BYTES = 256;\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface ExecuteInput {\n readonly code: string;\n readonly timeout?: number;\n}\n\nexport interface ExecuteOutput {\n readonly error?: string;\n readonly ok: boolean;\n readonly result: unknown;\n readonly truncated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Journal\n// ---------------------------------------------------------------------------\n\ninterface OperationJournalEntry {\n readonly error?: string;\n readonly name: string;\n readonly ok: boolean;\n readonly result?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers (exported for tests)\n// ---------------------------------------------------------------------------\n\nexport const clampTimeout = (\n requestedTimeout: number | undefined,\n config: Pick<McpConfigShape, \"defaultTimeoutMs\" | \"maxTimeoutMs\">\n): number => {\n if (requestedTimeout === undefined) {\n return config.defaultTimeoutMs;\n }\n if (!Number.isFinite(requestedTimeout) || requestedTimeout <= 0) {\n throw new Error(\n `Invalid timeout: expected a positive integer, received ${requestedTimeout}`\n );\n }\n return Math.min(Math.trunc(requestedTimeout), config.maxTimeoutMs);\n};\n\nconst formatError = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nconst truncateUtf8 = (text: string, maxBytes: number): string => {\n const buffer = Buffer.from(text, \"utf8\");\n if (buffer.byteLength <= maxBytes) {\n return text;\n }\n return buffer.subarray(0, maxBytes).toString(\"utf8\");\n};\n\nconst summarizeForJournal = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n return value.length > 200 ? `${value.slice(0, 200)}…` : value;\n }\n if (\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return { kind: \"array\", length: value.length };\n }\n if (typeof value === \"object\") {\n return {\n keys: Object.keys(value as Record<string, unknown>).slice(0, 10),\n kind: \"object\",\n };\n }\n return typeof value;\n};\n\nexport const finalizeOutput = (\n output: ExecuteOutput,\n maxOutputBytes: number\n): ExecuteOutput => {\n const serialized = JSON.stringify(output);\n if (Buffer.byteLength(serialized, \"utf8\") <= maxOutputBytes) {\n return output;\n }\n const previewBudget = Math.max(\n MIN_PREVIEW_BYTES,\n maxOutputBytes - Math.min(1024, Math.floor(maxOutputBytes / 4))\n );\n return {\n ...output,\n result: {\n note: \"Result truncated to fit MCP output budget\",\n preview: truncateUtf8(JSON.stringify(output.result), previewBudget),\n },\n truncated: true,\n };\n};\n\nexport const ensureCode = (code: unknown): string => {\n if (typeof code !== \"string\") {\n throw new TypeError(\"Invalid code: expected a string\");\n }\n const trimmed = code.trim();\n if (trimmed.length === 0) {\n throw new Error(\"Invalid code: expected a non-empty string\");\n }\n if (trimmed.length > MAX_CODE_LENGTH) {\n throw new Error(\n `Invalid code: maximum length is ${MAX_CODE_LENGTH} characters`\n );\n }\n return trimmed;\n};\n\n// ---------------------------------------------------------------------------\n// Schema-based decoding helper\n// ---------------------------------------------------------------------------\n\n/** Synchronous decode — throws on failure (for use inside Promise-returning sandbox callbacks). */\nconst decodeInputSync = <A, I>(\n schema: Schema.Schema<A, I>,\n input: unknown,\n operation: string\n): A => {\n try {\n return Schema.decodeUnknownSync(schema)(input);\n } catch (error) {\n if (error instanceof ParseResult.ParseError) {\n throw new TypeError(\n `${operation}: ${ParseResult.TreeFormatter.formatErrorSync(error)}`,\n { cause: error }\n );\n }\n throw error;\n }\n};\n\n// ---------------------------------------------------------------------------\n// Effect-based validation\n// ---------------------------------------------------------------------------\n\nconst validateCode = (code: unknown): Effect.Effect<string, InvalidCodeError> =>\n Effect.try({\n catch: (e) => new InvalidCodeError({ message: formatError(e) }),\n try: () => ensureCode(code),\n });\n\nconst validateTimeout = (\n requested: number | undefined,\n config: Pick<McpConfigShape, \"defaultTimeoutMs\" | \"maxTimeoutMs\">\n): Effect.Effect<number, InvalidTimeoutError> =>\n Effect.try({\n catch: () =>\n new InvalidTimeoutError({\n message: `Invalid timeout: expected a positive integer, received ${requested}`,\n received: requested,\n }),\n try: () => clampTimeout(requested, config),\n });\n\n// ---------------------------------------------------------------------------\n// Sandbox console\n// ---------------------------------------------------------------------------\n\nconst writeSandboxLog = (level: string, args: readonly unknown[]): void => {\n const line = args\n .map((arg) => {\n if (typeof arg === \"string\") {\n return arg;\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(\" \");\n process.stderr.write(`[ringi:mcp:${level}] ${line}\\n`);\n};\n\nconst createSandboxConsole = () =>\n Object.freeze({\n error: (...args: readonly unknown[]) => writeSandboxLog(\"error\", args),\n info: (...args: readonly unknown[]) => writeSandboxLog(\"info\", args),\n log: (...args: readonly unknown[]) => writeSandboxLog(\"log\", args),\n warn: (...args: readonly unknown[]) => writeSandboxLog(\"warn\", args),\n });\n\n// ---------------------------------------------------------------------------\n// VM sandbox runner (Effect-based, single timeout via fiber interruption)\n// ---------------------------------------------------------------------------\n\n/**\n * Runs user code in a VM sandbox with a single, deterministic timeout model:\n *\n * 1. `vm.Script.runInContext({ timeout })` — CPU-bound timeout for sync JS\n * 2. `Effect.timeoutFail` — wall-clock timeout for the full async execution\n *\n * No `Promise.race` — timeout is handled by fiber interruption which properly\n * cleans up resources. The vm timeout catches infinite sync loops while the\n * Effect timeout catches slow async operations.\n */\nconst runSandbox = (\n globals: Record<string, unknown>,\n code: string,\n timeoutMs: number\n): Effect.Effect<unknown, ExecutionTimeoutError | SandboxExecutionError> => {\n const execute = Effect.tryPromise({\n catch: (error) =>\n new SandboxExecutionError({\n error,\n message: formatError(error),\n }),\n try: () => {\n const context = vm.createContext({\n ...globals,\n Buffer: undefined,\n clearImmediate: undefined,\n clearInterval: undefined,\n clearTimeout: undefined,\n console: createSandboxConsole(),\n fetch: undefined,\n process: undefined,\n queueMicrotask,\n require: undefined,\n setImmediate: undefined,\n setInterval: undefined,\n setTimeout: undefined,\n });\n const script = new vm.Script(\n `\"use strict\"; (async () => {\\n${code}\\n})()`,\n { filename: \"ringi-mcp-execute.js\" }\n );\n // vm timeout guards sync CPU loops; Effect.timeoutFail guards the full async span\n return Promise.resolve(\n script.runInContext(context, { timeout: timeoutMs })\n );\n },\n });\n\n return execute.pipe(\n Effect.timeoutFail({\n duration: Duration.millis(timeoutMs),\n onTimeout: () =>\n new ExecutionTimeoutError({\n message: `Execution timed out after ${timeoutMs}ms`,\n timeoutMs,\n }),\n })\n );\n};\n\n// ---------------------------------------------------------------------------\n// Journal helpers\n// ---------------------------------------------------------------------------\n\nconst createJournal = () => {\n const entries: OperationJournalEntry[] = [];\n\n const recordSuccess = (name: string, result: unknown): void => {\n entries.push({ name, ok: true, result: summarizeForJournal(result) });\n };\n\n const recordFailure = (name: string, error: unknown): void => {\n entries.push({ error: formatError(error), name, ok: false });\n };\n\n /**\n * Runs a runtime Effect with journal tracking. Returns a Promise for sandbox use.\n *\n * The R parameter accepts any subset of McpRuntimeContext — the managed runtime\n * provides all services, so any effect requiring a subset of them is safe to run.\n */\n const tracked = <A, R extends McpRuntimeContext>(\n runtime: McpManagedRuntime,\n name: string,\n effect: Effect.Effect<A, unknown, R>\n ): Promise<A> =>\n runtime\n .runPromise(\n effect as unknown as Effect.Effect<A, never, McpRuntimeContext>\n )\n .then(\n (result) => {\n recordSuccess(name, result);\n return result;\n },\n (error) => {\n recordFailure(name, error);\n throw error;\n }\n );\n\n /** Promise-based call wrapper for non-Effect operations. */\n const trackedAsync = async <T>(\n name: string,\n fn: () => Promise<T>\n ): Promise<T> => {\n try {\n const result = await fn();\n recordSuccess(name, result);\n return result;\n } catch (error) {\n recordFailure(name, error);\n throw error;\n }\n };\n\n return { entries, recordFailure, recordSuccess, tracked, trackedAsync };\n};\n\n// ---------------------------------------------------------------------------\n// buildSandboxGlobals — wire services to the runtime\n// ---------------------------------------------------------------------------\n\nconst buildSandboxGlobals = (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n journal: ReturnType<typeof createJournal>\n) => {\n const { tracked, trackedAsync } = journal;\n\n const throwIfReadonly = (): void => {\n if (config.readonly) {\n throw new Error(\n \"Mutation rejected: MCP server is running in readonly mode\"\n );\n }\n };\n\n // -- SandboxDeps (Promise bridge for sources/session/events) --------------\n\n const run = <A, R extends McpRuntimeContext>(\n name: string,\n effect: Effect.Effect<A, unknown, R>\n ): Promise<A> => tracked(runtime, name, effect);\n\n const deps: SandboxDeps = {\n call: trackedAsync,\n getBranchDiff: (branch: string) =>\n run(\n \"git.getBranchDiff\",\n Effect.gen(function* getBranchDiff() {\n const git = yield* GitService;\n return yield* git.getBranchDiff(branch);\n })\n ),\n getBranches: () =>\n run(\n \"git.getBranches\",\n Effect.gen(function* getBranches() {\n const git = yield* GitService;\n return yield* git.getBranches;\n })\n ),\n getCommitDiff: (shas: string[]) =>\n run(\n \"git.getCommitDiff\",\n Effect.gen(function* getCommitDiff() {\n const git = yield* GitService;\n return yield* git.getCommitDiff(shas);\n })\n ),\n getLatestReviewId: async () => {\n const result = await run(\n \"reviews.latestId\",\n Effect.gen(function* result() {\n const svc = yield* ReviewService;\n return yield* svc.list({\n page: 1,\n pageSize: 1,\n repositoryPath: config.repoRoot,\n });\n })\n );\n return result.reviews[0]?.id ?? null;\n },\n getRecentCommits: async () => {\n const result = await run(\n \"git.getCommits\",\n Effect.gen(function* result() {\n const git = yield* GitService;\n return yield* git.getCommits({ limit: 10, offset: 0 });\n })\n );\n return result.commits;\n },\n getRepositoryInfo: () =>\n run(\n \"git.getRepositoryInfo\",\n Effect.gen(function* getRepositoryInfo() {\n const git = yield* GitService;\n return yield* git.getRepositoryInfo;\n })\n ),\n getStagedDiff: () =>\n run(\n \"git.getStagedDiff\",\n Effect.gen(function* getStagedDiff() {\n const git = yield* GitService;\n return yield* git.getStagedDiff;\n })\n ),\n getStagedFiles: () =>\n run(\n \"git.getStagedFiles\",\n Effect.gen(function* getStagedFiles() {\n const git = yield* GitService;\n return yield* git.getStagedFiles;\n })\n ),\n readonly: config.readonly,\n repoRoot: config.repoRoot,\n requireWritable: throwIfReadonly,\n };\n\n const baseGlobals = createSandboxGlobals(deps);\n\n // -- reviews namespace (schema-validated) ---------------------------------\n\n const reviews = Object.freeze({\n create: async (inputValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeReviewCreateInput(inputValue);\n return run(\n \"reviews.create\",\n Effect.gen(function* create() {\n const svc = yield* ReviewService;\n return yield* svc.create(parsed);\n })\n );\n },\n export: async (options: unknown) => {\n const opts = decodeInputSync(\n ReviewExportInput,\n options,\n \"reviews.export\"\n );\n const markdown = await run(\n \"reviews.export\",\n Effect.gen(function* markdown() {\n const svc = yield* ExportService;\n return yield* svc.exportReview(opts.reviewId);\n })\n );\n return { markdown, reviewId: opts.reviewId };\n },\n get: (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n return run(\n \"reviews.get\",\n Effect.gen(function* get() {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n );\n },\n getComments: (reviewIdValue: unknown, filePath?: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n if (\n filePath !== null &&\n filePath !== undefined &&\n typeof filePath !== \"string\"\n ) {\n return Promise.reject(new Error(\"Invalid filePath: expected a string\"));\n }\n return run(\n \"reviews.getComments\",\n Effect.gen(function* getComments() {\n const svc = yield* CommentService;\n return filePath\n ? yield* svc.getByFile(reviewId, filePath as string)\n : yield* svc.getByReview(reviewId);\n })\n );\n },\n getDiff: async (query: unknown) => {\n const q = decodeInputSync(ReviewDiffQuery, query, \"reviews.getDiff\");\n const hunks = await run(\n `reviews.getDiff:${q.filePath}`,\n Effect.gen(function* hunks() {\n const svc = yield* ReviewService;\n return yield* svc.getFileHunks(q.reviewId, q.filePath);\n })\n );\n return { filePath: q.filePath, hunks, reviewId: q.reviewId };\n },\n getFiles: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const review = await run(\n \"reviews.getFiles\",\n Effect.gen(function* review() {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n );\n return review.files;\n },\n getStatus: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const [review, stats] = await Promise.all([\n run(\n \"reviews.getStatus.review\",\n Effect.gen(function* () {\n const svc = yield* ReviewService;\n return yield* svc.getById(reviewId);\n })\n ),\n run(\n \"reviews.getStatus.comments\",\n Effect.gen(function* () {\n const svc = yield* CommentService;\n return yield* svc.getStats(reviewId);\n })\n ),\n ]);\n return {\n resolvedComments: stats.resolved,\n reviewId,\n status: review.status,\n totalComments: stats.total,\n unresolvedComments: stats.unresolved,\n withSuggestions: 0,\n };\n },\n getSuggestions: async (reviewIdValue: unknown) => {\n const reviewId = reviewIdValue as ReviewId;\n const comments = await run(\n \"reviews.getSuggestions\",\n Effect.gen(function* comments() {\n const svc = yield* CommentService;\n return yield* svc.getByReview(reviewId);\n })\n );\n return comments\n .filter((c: { suggestion?: string | null }) => c.suggestion != null)\n .map((c: { id: string; suggestion: string | null }) => ({\n commentId: c.id,\n id: c.id,\n originalCode: \"\",\n suggestedCode: c.suggestion ?? \"\",\n }));\n },\n list: async (filters?: unknown) => {\n const parsed = decodeInputSync(\n ReviewListFilters,\n filters ?? {},\n \"reviews.list\"\n );\n return run(\n \"reviews.list\",\n Effect.gen(function* list() {\n const svc = yield* ReviewService;\n return yield* svc.list({\n page: parsed.page,\n pageSize: parsed.limit,\n repositoryPath: config.repoRoot,\n sourceType: parsed.sourceType,\n status: parsed.status as\n | \"approved\"\n | \"changes_requested\"\n | \"in_progress\"\n | undefined,\n });\n })\n );\n },\n });\n\n // -- todos namespace (schema-validated) -----------------------------------\n\n const todos = Object.freeze({\n add: async (inputValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeCreateTodoInput(inputValue);\n return run(\n \"todos.add\",\n Effect.gen(function* add() {\n const svc = yield* TodoService;\n return yield* svc.create(parsed as CoreCreateTodoInput);\n })\n );\n },\n clear: async (_reviewIdValue?: unknown) => {\n throwIfReadonly();\n return run(\n \"todos.clear\",\n Effect.gen(function* clear() {\n const svc = yield* TodoService;\n const result = yield* svc.removeCompleted();\n return { removed: result.deleted, success: true as const };\n })\n );\n },\n done: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.done\",\n Effect.gen(function* done() {\n const svc = yield* TodoService;\n const todo = yield* svc.getById(todoId);\n if (todo.completed) {\n return todo;\n }\n return yield* svc.toggle(todoId);\n })\n );\n },\n list: async (filter?: unknown) => {\n const parsed = decodeInputSync(\n TodoListFilter,\n filter ?? {},\n \"todos.list\"\n );\n const result = await run(\n \"todos.list\",\n Effect.gen(function* result() {\n const svc = yield* TodoService;\n return yield* svc.list({ reviewId: parsed.reviewId });\n })\n );\n return result.data;\n },\n move: async (todoIdValue: unknown, positionValue: unknown) => {\n throwIfReadonly();\n const parsed = decodeInputSync(\n TodoMoveInput,\n { position: positionValue, todoId: todoIdValue },\n \"todos.move\"\n );\n return run(\n \"todos.move\",\n Effect.gen(function* move() {\n const svc = yield* TodoService;\n return yield* svc.move(parsed.todoId, parsed.position);\n })\n );\n },\n remove: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.remove\",\n Effect.gen(function* remove() {\n const svc = yield* TodoService;\n return yield* svc.remove(todoId);\n })\n );\n },\n undone: async (todoIdValue: unknown) => {\n throwIfReadonly();\n const todoId = todoIdValue as TodoId;\n return run(\n \"todos.undone\",\n Effect.gen(function* undone() {\n const svc = yield* TodoService;\n const todo = yield* svc.getById(todoId);\n if (!todo.completed) {\n return todo;\n }\n return yield* svc.toggle(todoId);\n })\n );\n },\n });\n\n return {\n events: baseGlobals.events,\n intelligence: baseGlobals.intelligence,\n reviews,\n session: baseGlobals.session,\n sources: baseGlobals.sources,\n todos,\n };\n};\n\n// ---------------------------------------------------------------------------\n// executeCode — main entry point (Effect-first)\n// ---------------------------------------------------------------------------\n\n/**\n * Execute sandboxed user code against the Ringi core services.\n *\n * The execution pipeline is an Effect that:\n * - Validates code and timeout via typed errors\n * - Builds schema-validated sandbox namespaces\n * - Runs the VM sandbox with a deterministic timeout model\n * (vm.Script timeout for sync loops + Effect.timeoutFail for async wall-clock)\n * - Propagates errors via typed tagged errors, never raw throws\n *\n * The managed runtime is passed explicitly — it provides the concrete service\n * environment. Individual sandbox namespace methods use `runtime.runPromise`\n * because they are called from user JS inside the vm sandbox (Promise boundary).\n */\nexport const executeCode = (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n input: ExecuteInput\n): Effect.Effect<\n ExecuteOutput,\n InvalidCodeError | InvalidTimeoutError,\n never\n> =>\n Effect.gen(function* executeCode() {\n const timeoutMs = yield* validateTimeout(input.timeout, config);\n const code = yield* validateCode(input.code);\n const journal = createJournal();\n const globals = buildSandboxGlobals(runtime, config, journal);\n\n const sandboxResult = yield* runSandbox(globals, code, timeoutMs).pipe(\n Effect.catchTags({\n ExecutionTimeoutError: (e) =>\n Effect.succeed({\n error: e.message,\n ok: false as const,\n result:\n journal.entries.length === 0\n ? null\n : { operations: journal.entries },\n }),\n SandboxExecutionError: (e) =>\n Effect.succeed({\n error: e.message,\n ok: false as const,\n result:\n journal.entries.length === 0\n ? null\n : { operations: journal.entries },\n }),\n }),\n Effect.map((result) => {\n if (\n typeof result === \"object\" &&\n result !== null &&\n \"ok\" in result &&\n (result as { ok: boolean }).ok === false\n ) {\n return result as ExecuteOutput;\n }\n return { ok: true as const, result } as ExecuteOutput;\n })\n );\n\n return finalizeOutput(sandboxResult, config.maxOutputBytes);\n });\n\n// ---------------------------------------------------------------------------\n// executeCodeToPromise — bridge for the MCP server\n// ---------------------------------------------------------------------------\n\n/**\n * Runs the Effect-based `executeCode` pipeline against the managed runtime.\n * This is the ONLY place `runtime.runPromise` is called for the execution\n * pipeline — the server boundary.\n *\n * Typed errors (InvalidCodeError, InvalidTimeoutError) are caught and\n * formatted as ExecuteOutput instead of propagating as rejections.\n */\nexport const executeCodeToPromise = async (\n runtime: McpManagedRuntime,\n config: McpConfigShape,\n input: ExecuteInput\n): Promise<ExecuteOutput> => {\n const program = executeCode(runtime, config, input).pipe(\n Effect.catchTags({\n InvalidCodeError: (e) =>\n Effect.succeed<ExecuteOutput>({\n error: e.message,\n ok: false,\n result: null,\n }),\n InvalidTimeoutError: (e) =>\n Effect.succeed<ExecuteOutput>({\n error: e.message,\n ok: false,\n result: null,\n }),\n })\n );\n\n try {\n return await Effect.runPromise(program);\n } catch (error) {\n // Catch-all for defects — return a safe output\n return finalizeOutput(\n {\n error: formatError(error),\n ok: false,\n result: null,\n },\n config.maxOutputBytes\n );\n }\n};\n","import { CoreLive } from \"@ringi/core/runtime\";\nimport * as ConfigProvider from \"effect/ConfigProvider\";\nimport * as Layer from \"effect/Layer\";\nimport * as ManagedRuntime from \"effect/ManagedRuntime\";\n\nimport type { McpConfigShape } from \"@/mcp/config\";\nimport { McpConfigLive } from \"@/mcp/config\";\n\nconst makeConfigLayer = (config: McpConfigShape) =>\n Layer.setConfigProvider(\n ConfigProvider.fromMap(\n new Map([\n [\"DB_PATH\", config.dbPath],\n [\"REPOSITORY_PATH\", config.repoRoot],\n ])\n )\n );\n\nconst makeMcpLayer = (config: McpConfigShape) =>\n Layer.mergeAll(CoreLive, McpConfigLive(config)).pipe(\n Layer.provideMerge(makeConfigLayer(config))\n );\n\n/** The concrete environment provided by the MCP runtime layer. */\nexport type McpRuntimeContext = Layer.Layer.Success<\n ReturnType<typeof makeMcpLayer>\n>;\n\n/** Typed MCP managed runtime — no `any` in the environment or error channels. */\nexport type McpManagedRuntime = ManagedRuntime.ManagedRuntime<\n McpRuntimeContext,\n never\n>;\n\nexport const createMcpRuntime = (config: McpConfigShape): McpManagedRuntime =>\n ManagedRuntime.make(makeMcpLayer(config)) as McpManagedRuntime;\n","import { stdin, stdout } from \"node:process\";\n\nimport { resolveMcpConfig } from \"@/mcp/config\";\nimport type { ExecuteInput } from \"@/mcp/execute\";\nimport { executeCodeToPromise } from \"@/mcp/execute\";\nimport { createMcpRuntime } from \"@/mcp/runtime\";\n\nconst JSON_RPC_VERSION = \"2.0\";\nconst LATEST_PROTOCOL_VERSION = \"2025-11-25\";\nconst MCP_SERVER_NAME = \"ringi\";\nconst MCP_SERVER_VERSION = process.env.npm_package_version ?? \"0.0.0-dev\";\n\nconst EXECUTE_TOOL = {\n description:\n \"Run constrained JavaScript against Ringi review namespaces: review, todo, comment, diff, export, and session.\",\n inputSchema: {\n additionalProperties: false,\n properties: {\n code: {\n description:\n \"JavaScript snippet to evaluate inside the Ringi MCP sandbox.\",\n type: \"string\",\n },\n timeout: {\n description:\n \"Optional timeout in milliseconds. Defaults to 30000 and clamps at 120000.\",\n type: \"number\",\n },\n },\n required: [\"code\"],\n type: \"object\",\n },\n name: \"execute\",\n outputSchema: {\n additionalProperties: false,\n properties: {\n error: { type: \"string\" },\n ok: { type: \"boolean\" },\n result: {},\n truncated: { type: \"boolean\" },\n },\n required: [\"ok\", \"result\"],\n type: \"object\",\n },\n} as const;\n\ntype JsonRpcId = number | string | null;\n\ninterface JsonRpcRequest {\n readonly id?: JsonRpcId;\n readonly method: string;\n readonly params?: Record<string, unknown>;\n}\n\nconst writeStderr = (message: string): void => {\n process.stderr.write(`[ringi:mcp] ${message}\\n`);\n};\n\nconst writeMessage = (message: unknown): void => {\n const body = JSON.stringify(message);\n const payload = `Content-Length: ${Buffer.byteLength(body, \"utf8\")}\\r\\n\\r\\n${body}`;\n stdout.write(payload);\n};\n\nconst parseContentLength = (headerText: string): number => {\n const headerLine = headerText\n .split(\"\\r\\n\")\n .find((line) => line.toLowerCase().startsWith(\"content-length:\"));\n\n if (!headerLine) {\n throw new Error(\"Missing Content-Length header\");\n }\n\n const rawValue = headerLine.slice(headerLine.indexOf(\":\") + 1).trim();\n const parsed = Number.parseInt(rawValue, 10);\n\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(`Invalid Content-Length header: ${rawValue}`);\n }\n\n return parsed;\n};\n\nconst formatError = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n};\n\nconst sendError = (id: JsonRpcId, code: number, message: string): void => {\n writeMessage({\n error: {\n code,\n message,\n },\n id,\n jsonrpc: JSON_RPC_VERSION,\n });\n};\n\nconst sendResult = (id: JsonRpcId, result: unknown): void => {\n writeMessage({\n id,\n jsonrpc: JSON_RPC_VERSION,\n result,\n });\n};\n\nconst createInitializeResult = () => ({\n capabilities: {\n tools: {\n listChanged: false,\n },\n },\n protocolVersion: LATEST_PROTOCOL_VERSION,\n serverInfo: {\n description:\n \"Local-first MCP codemode adapter over the Ringi core runtime.\",\n name: MCP_SERVER_NAME,\n version: MCP_SERVER_VERSION,\n },\n});\n\nclass StdioJsonRpcServer {\n private readonly config = resolveMcpConfig(process.argv.slice(2));\n\n private readonly runtime = createMcpRuntime(this.config);\n\n private buffer = Buffer.alloc(0);\n\n private initialized = false;\n\n private shuttingDown = false;\n\n public start(): void {\n stdin.on(\"data\", async (chunk: Buffer) => {\n this.buffer = Buffer.concat([this.buffer, chunk]);\n try {\n await this.drainBuffer();\n } catch (error) {\n writeStderr(`fatal buffer drain error: ${formatError(error)}`);\n }\n });\n\n stdin.on(\"end\", async () => {\n await this.runtime.dispose();\n });\n\n process.on(\"SIGINT\", async () => {\n await this.close(0);\n });\n\n process.on(\"SIGTERM\", async () => {\n await this.close(0);\n });\n\n writeStderr(\n `server started readonly=${String(this.config.readonly)} repo=${this.config.repoRoot}`\n );\n }\n\n private async close(code: number): Promise<void> {\n await this.runtime.dispose();\n process.exit(code);\n }\n\n private async drainBuffer(): Promise<void> {\n while (true) {\n const headerEnd = this.buffer.indexOf(\"\\r\\n\\r\\n\");\n if (headerEnd === -1) {\n return;\n }\n\n const headerText = this.buffer.subarray(0, headerEnd).toString(\"utf8\");\n const contentLength = parseContentLength(headerText);\n const messageEnd = headerEnd + 4 + contentLength;\n if (this.buffer.byteLength < messageEnd) {\n return;\n }\n\n const payload = this.buffer\n .subarray(headerEnd + 4, messageEnd)\n .toString(\"utf8\");\n this.buffer = this.buffer.subarray(messageEnd);\n\n let message: JsonRpcRequest;\n try {\n message = JSON.parse(payload) as JsonRpcRequest;\n } catch (error) {\n sendError(null, -32_700, `Parse error: ${formatError(error)}`);\n continue;\n }\n\n await this.handleMessage(message);\n }\n }\n\n private async handleMessage(message: JsonRpcRequest): Promise<void> {\n if (typeof message.method !== \"string\") {\n sendError(message.id ?? null, -32_600, \"Invalid JSON-RPC request\");\n return;\n }\n\n try {\n if (await this.handleLifecycleMessage(message)) {\n return;\n }\n\n this.assertInitialized();\n\n if (message.method === \"tools/list\") {\n sendResult(message.id ?? null, { tools: [EXECUTE_TOOL] });\n return;\n }\n\n if (message.method === \"tools/call\") {\n await this.handleToolCall(message.id ?? null, message.params);\n return;\n }\n\n sendError(\n message.id ?? null,\n -32_601,\n `Method not found: ${message.method}`\n );\n } catch (error) {\n sendError(message.id ?? null, -32_603, formatError(error));\n }\n }\n\n private async handleLifecycleMessage(\n message: JsonRpcRequest\n ): Promise<boolean> {\n if (message.method === \"initialize\") {\n this.initialized = true;\n sendResult(message.id ?? null, createInitializeResult());\n return true;\n }\n\n if (message.method === \"notifications/initialized\") {\n return true;\n }\n\n if (message.method === \"ping\") {\n sendResult(message.id ?? null, {});\n return true;\n }\n\n if (message.method === \"shutdown\") {\n this.shuttingDown = true;\n sendResult(message.id ?? null, {});\n return true;\n }\n\n if (message.method === \"exit\") {\n await this.close(this.shuttingDown ? 0 : 1);\n return true;\n }\n\n return false;\n }\n\n private assertInitialized(): void {\n if (!this.initialized) {\n throw new Error(\"Server is not initialized\");\n }\n\n if (this.shuttingDown) {\n throw new Error(\"Server is shutting down\");\n }\n }\n\n private async handleToolCall(\n id: JsonRpcId,\n params: Record<string, unknown> | undefined\n ): Promise<void> {\n if (!params || typeof params.name !== \"string\") {\n sendError(id, -32_602, \"Invalid tools/call params\");\n return;\n }\n\n if (params.name !== EXECUTE_TOOL.name) {\n sendError(id, -32_602, `Tool not found: ${String(params.name)}`);\n return;\n }\n\n const argumentsValue = params.arguments;\n if (typeof argumentsValue !== \"object\" || argumentsValue === null) {\n sendError(id, -32_602, \"Invalid tools/call arguments\");\n return;\n }\n\n const executeResult = await executeCodeToPromise(\n this.runtime,\n this.config,\n argumentsValue as ExecuteInput\n );\n\n sendResult(id, {\n content: [\n {\n text: JSON.stringify(executeResult),\n type: \"text\",\n },\n ],\n isError: !executeResult.ok,\n structuredContent: executeResult,\n });\n }\n}\n\nnew StdioJsonRpcServer().start();\n"]}
|