mcp-codex-subagent 1.0.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.
Files changed (70) hide show
  1. package/README.md +121 -0
  2. package/dist/errors.d.ts +16 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +35 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +19 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/server.d.ts +10 -0
  11. package/dist/server.d.ts.map +1 -0
  12. package/dist/server.js +90 -0
  13. package/dist/server.js.map +1 -0
  14. package/dist/session/storage.d.ts +44 -0
  15. package/dist/session/storage.d.ts.map +1 -0
  16. package/dist/session/storage.js +113 -0
  17. package/dist/session/storage.js.map +1 -0
  18. package/dist/templates/index.d.ts +22 -0
  19. package/dist/templates/index.d.ts.map +1 -0
  20. package/dist/templates/index.js +147 -0
  21. package/dist/templates/index.js.map +1 -0
  22. package/dist/templates/overlays/coder-csharp.mdx +58 -0
  23. package/dist/templates/overlays/coder-go.mdx +53 -0
  24. package/dist/templates/overlays/coder-java.mdx +54 -0
  25. package/dist/templates/overlays/coder-kotlin.mdx +56 -0
  26. package/dist/templates/overlays/coder-nextjs.mdx +65 -0
  27. package/dist/templates/overlays/coder-python.mdx +53 -0
  28. package/dist/templates/overlays/coder-react.mdx +55 -0
  29. package/dist/templates/overlays/coder-ruby.mdx +59 -0
  30. package/dist/templates/overlays/coder-rust.mdx +48 -0
  31. package/dist/templates/overlays/coder-supabase.mdx +268 -0
  32. package/dist/templates/overlays/coder-supastarter.mdx +313 -0
  33. package/dist/templates/overlays/coder-swift.mdx +56 -0
  34. package/dist/templates/overlays/coder-tauri.mdx +566 -0
  35. package/dist/templates/overlays/coder-triggerdev.mdx +296 -0
  36. package/dist/templates/overlays/coder-typescript.mdx +45 -0
  37. package/dist/templates/overlays/coder-vue.mdx +62 -0
  38. package/dist/templates/overlays/planner-architecture.mdx +78 -0
  39. package/dist/templates/overlays/planner-bugfix.mdx +36 -0
  40. package/dist/templates/overlays/planner-feature.mdx +38 -0
  41. package/dist/templates/overlays/planner-migration.mdx +50 -0
  42. package/dist/templates/overlays/planner-refactor.mdx +57 -0
  43. package/dist/templates/overlays/researcher-library.mdx +59 -0
  44. package/dist/templates/overlays/researcher-performance.mdx +68 -0
  45. package/dist/templates/overlays/researcher-security.mdx +86 -0
  46. package/dist/templates/overlays/tester-graphql.mdx +191 -0
  47. package/dist/templates/overlays/tester-playwright.mdx +621 -0
  48. package/dist/templates/overlays/tester-rest.mdx +101 -0
  49. package/dist/templates/overlays/tester-suite.mdx +177 -0
  50. package/dist/templates/super-coder.mdx +529 -0
  51. package/dist/templates/super-planner.mdx +568 -0
  52. package/dist/templates/super-researcher.mdx +406 -0
  53. package/dist/templates/super-tester.mdx +243 -0
  54. package/dist/tools/definitions.d.ts +3 -0
  55. package/dist/tools/definitions.d.ts.map +1 -0
  56. package/dist/tools/definitions.js +186 -0
  57. package/dist/tools/definitions.js.map +1 -0
  58. package/dist/tools/handlers.d.ts +30 -0
  59. package/dist/tools/handlers.d.ts.map +1 -0
  60. package/dist/tools/handlers.js +370 -0
  61. package/dist/tools/handlers.js.map +1 -0
  62. package/dist/types.d.ts +118 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +65 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/utils/command.d.ts +19 -0
  67. package/dist/utils/command.d.ts.map +1 -0
  68. package/dist/utils/command.js +171 -0
  69. package/dist/utils/command.js.map +1 -0
  70. package/package.json +70 -0
@@ -0,0 +1,118 @@
1
+ import { z } from 'zod';
2
+ export declare const TOOLS: {
3
+ readonly CODEX: "codex";
4
+ readonly REVIEW: "review";
5
+ readonly PING: "ping";
6
+ readonly HELP: "help";
7
+ readonly LIST_SESSIONS: "listSessions";
8
+ };
9
+ export type ToolName = typeof TOOLS[keyof typeof TOOLS];
10
+ export declare const PINNED_CODEX_MODEL: "gpt-5.3-codex";
11
+ export declare const AGENT_ROLES: readonly ["coder", "planner", "tester", "researcher"];
12
+ export type AgentRole = typeof AGENT_ROLES[number];
13
+ export declare const ROLE_TO_TASK_TYPE: Record<AgentRole, string>;
14
+ export interface ContextFile {
15
+ path: string;
16
+ description?: string;
17
+ start_line?: number;
18
+ end_line?: number;
19
+ }
20
+ export interface ToolAnnotations {
21
+ title?: string;
22
+ readOnlyHint?: boolean;
23
+ destructiveHint?: boolean;
24
+ idempotentHint?: boolean;
25
+ openWorldHint?: boolean;
26
+ }
27
+ export interface ToolDefinition {
28
+ name: ToolName;
29
+ description: string;
30
+ inputSchema: {
31
+ type: 'object';
32
+ properties: Record<string, unknown>;
33
+ required: string[];
34
+ };
35
+ outputSchema?: {
36
+ type: 'object';
37
+ properties?: Record<string, unknown>;
38
+ required?: string[];
39
+ };
40
+ annotations?: ToolAnnotations;
41
+ }
42
+ export interface ToolResult {
43
+ content: Array<{
44
+ type: 'text';
45
+ text: string;
46
+ _meta?: Record<string, unknown>;
47
+ }>;
48
+ structuredContent?: Record<string, unknown>;
49
+ isError?: boolean;
50
+ _meta?: Record<string, unknown>;
51
+ }
52
+ export interface ServerConfig {
53
+ name: string;
54
+ version: string;
55
+ }
56
+ export declare const SandboxMode: z.ZodEnum<{
57
+ "read-only": "read-only";
58
+ "workspace-write": "workspace-write";
59
+ "danger-full-access": "danger-full-access";
60
+ }>;
61
+ export declare const CodexToolSchema: z.ZodObject<{
62
+ prompt: z.ZodString;
63
+ role: z.ZodOptional<z.ZodEnum<{
64
+ coder: "coder";
65
+ planner: "planner";
66
+ tester: "tester";
67
+ researcher: "researcher";
68
+ }>>;
69
+ specialization: z.ZodOptional<z.ZodString>;
70
+ context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
+ path: z.ZodString;
72
+ description: z.ZodOptional<z.ZodString>;
73
+ start_line: z.ZodOptional<z.ZodNumber>;
74
+ end_line: z.ZodOptional<z.ZodNumber>;
75
+ }, z.core.$strip>>>;
76
+ sessionId: z.ZodOptional<z.ZodString>;
77
+ resetSession: z.ZodOptional<z.ZodBoolean>;
78
+ reasoningEffort: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
79
+ low: "low";
80
+ medium: "medium";
81
+ high: "high";
82
+ xhigh: "xhigh";
83
+ }>>>;
84
+ sandbox: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
85
+ "read-only": "read-only";
86
+ "workspace-write": "workspace-write";
87
+ "danger-full-access": "danger-full-access";
88
+ }>>>;
89
+ workingDirectory: z.ZodOptional<z.ZodString>;
90
+ callbackUri: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strip>;
92
+ export declare const ReviewToolSchema: z.ZodObject<{
93
+ prompt: z.ZodOptional<z.ZodString>;
94
+ uncommitted: z.ZodOptional<z.ZodBoolean>;
95
+ base: z.ZodOptional<z.ZodString>;
96
+ commit: z.ZodOptional<z.ZodString>;
97
+ title: z.ZodOptional<z.ZodString>;
98
+ workingDirectory: z.ZodOptional<z.ZodString>;
99
+ }, z.core.$strip>;
100
+ export declare const PingToolSchema: z.ZodObject<{
101
+ message: z.ZodOptional<z.ZodString>;
102
+ }, z.core.$strip>;
103
+ export declare const HelpToolSchema: z.ZodObject<{}, z.core.$strip>;
104
+ export declare const ListSessionsToolSchema: z.ZodObject<{}, z.core.$strip>;
105
+ export type CodexToolArgs = z.infer<typeof CodexToolSchema>;
106
+ export type ReviewToolArgs = z.infer<typeof ReviewToolSchema>;
107
+ export type PingToolArgs = z.infer<typeof PingToolSchema>;
108
+ export type ListSessionsToolArgs = z.infer<typeof ListSessionsToolSchema>;
109
+ export interface CommandResult {
110
+ stdout: string;
111
+ stderr: string;
112
+ }
113
+ export type ProgressToken = string | number;
114
+ export interface ToolHandlerContext {
115
+ progressToken?: ProgressToken;
116
+ sendProgress: (message: string, progress?: number, total?: number) => Promise<void>;
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ // Tool constants
3
+ export const TOOLS = {
4
+ CODEX: 'codex',
5
+ REVIEW: 'review',
6
+ PING: 'ping',
7
+ HELP: 'help',
8
+ LIST_SESSIONS: 'listSessions',
9
+ };
10
+ // Pinned model — all Codex agents use this model
11
+ export const PINNED_CODEX_MODEL = 'gpt-5.3-codex';
12
+ // Agent roles (matching template system)
13
+ export const AGENT_ROLES = ['coder', 'planner', 'tester', 'researcher'];
14
+ // Role → TaskType mapping (for template system)
15
+ export const ROLE_TO_TASK_TYPE = {
16
+ coder: 'super-coder',
17
+ planner: 'super-planner',
18
+ tester: 'super-tester',
19
+ researcher: 'super-researcher',
20
+ };
21
+ // Sandbox mode enum
22
+ export const SandboxMode = z.enum([
23
+ 'read-only',
24
+ 'workspace-write',
25
+ 'danger-full-access',
26
+ ]);
27
+ // Zod schemas for tool arguments
28
+ export const CodexToolSchema = z.object({
29
+ prompt: z.string(),
30
+ role: z.enum(['coder', 'planner', 'tester', 'researcher']).optional(),
31
+ specialization: z.string().optional(),
32
+ context_files: z.array(z.object({
33
+ path: z.string(),
34
+ description: z.string().optional(),
35
+ start_line: z.number().int().positive().optional(),
36
+ end_line: z.number().int().positive().optional(),
37
+ })).max(20).optional(),
38
+ sessionId: z
39
+ .string()
40
+ .max(256, { error: 'Session ID must be 256 characters or fewer' })
41
+ .regex(/^[a-zA-Z0-9_-]+$/, {
42
+ error: 'Session ID can only contain letters, numbers, hyphens, and underscores',
43
+ })
44
+ .optional(),
45
+ resetSession: z.boolean().optional(),
46
+ reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh']).default('xhigh').optional(),
47
+ sandbox: SandboxMode.default('danger-full-access').optional(),
48
+ workingDirectory: z.string().optional(),
49
+ callbackUri: z.string().optional(),
50
+ });
51
+ // Review tool schema
52
+ export const ReviewToolSchema = z.object({
53
+ prompt: z.string().optional(),
54
+ uncommitted: z.boolean().optional(),
55
+ base: z.string().optional(),
56
+ commit: z.string().optional(),
57
+ title: z.string().optional(),
58
+ workingDirectory: z.string().optional(),
59
+ });
60
+ export const PingToolSchema = z.object({
61
+ message: z.string().optional(),
62
+ });
63
+ export const HelpToolSchema = z.object({});
64
+ export const ListSessionsToolSchema = z.object({});
65
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ type ProcessEnv = Record<string, string | undefined>;
2
+ import { type CommandResult } from '../types.js';
3
+ export type ProgressCallback = (message: string) => void;
4
+ export interface StreamingCommandOptions {
5
+ onProgress?: ProgressCallback;
6
+ envOverride?: ProcessEnv;
7
+ }
8
+ export declare function executeCommand(file: string, args?: string[], envOverride?: ProcessEnv): Promise<CommandResult>;
9
+ /**
10
+ * Execute a command with streaming output support.
11
+ * Calls onProgress callback with each chunk of output for real-time feedback.
12
+ *
13
+ * Note: Unlike executeCommand, this function treats stderr output as success
14
+ * because tools like codex write their primary output to stderr. This is
15
+ * intentional for streaming use cases where we want to capture all output.
16
+ */
17
+ export declare function executeCommandStreaming(file: string, args?: string[], options?: StreamingCommandOptions): Promise<CommandResult>;
18
+ export {};
19
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/utils/command.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAKrD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBjD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzD,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,EAAO,EACnB,WAAW,CAAC,EAAE,UAAU,GACvB,OAAO,CAAC,aAAa,CAAC,CA+ExB;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,aAAa,CAAC,CA2GxB"}
@@ -0,0 +1,171 @@
1
+ import { spawn } from 'child_process';
2
+ import chalk from 'chalk';
3
+ import { CommandExecutionError } from '../errors.js';
4
+ /**
5
+ * Escape argument for Windows shell (cmd.exe)
6
+ */
7
+ function escapeArgForWindows(arg) {
8
+ // Escape percent signs to prevent environment variable expansion
9
+ let escaped = arg.replace(/%/g, '%%');
10
+ // If arg contains spaces or special chars, wrap in double quotes
11
+ if (/[\s"&|<>^%]/.test(arg)) {
12
+ // Escape internal double quotes using CMD-style doubling
13
+ escaped = `"${escaped.replace(/"/g, '""')}"`;
14
+ }
15
+ return escaped;
16
+ }
17
+ const isWindows = process.platform === 'win32';
18
+ // Maximum buffer size (10MB) to prevent memory exhaustion from noisy processes
19
+ const MAX_BUFFER_SIZE = 10 * 1024 * 1024;
20
+ export async function executeCommand(file, args = [], envOverride) {
21
+ return new Promise((resolve, reject) => {
22
+ // Escape args for Windows shell
23
+ const escapedArgs = isWindows ? args.map(escapeArgForWindows) : args;
24
+ console.error(chalk.blue('Executing:'), file, escapedArgs.join(' '));
25
+ const child = spawn(file, escapedArgs, {
26
+ shell: isWindows,
27
+ env: envOverride ? { ...process.env, ...envOverride } : process.env,
28
+ stdio: ['pipe', 'pipe', 'pipe'],
29
+ });
30
+ let stdout = '';
31
+ let stderr = '';
32
+ let stdoutTruncated = false;
33
+ let stderrTruncated = false;
34
+ child.stdout.on('data', (data) => {
35
+ if (!stdoutTruncated) {
36
+ const chunk = data.toString();
37
+ if (stdout.length + chunk.length > MAX_BUFFER_SIZE) {
38
+ stdout += chunk.slice(0, MAX_BUFFER_SIZE - stdout.length);
39
+ stdoutTruncated = true;
40
+ console.error(chalk.yellow('Warning: stdout truncated at 10MB'));
41
+ }
42
+ else {
43
+ stdout += chunk;
44
+ }
45
+ }
46
+ });
47
+ child.stderr.on('data', (data) => {
48
+ if (!stderrTruncated) {
49
+ const chunk = data.toString();
50
+ if (stderr.length + chunk.length > MAX_BUFFER_SIZE) {
51
+ stderr += chunk.slice(0, MAX_BUFFER_SIZE - stderr.length);
52
+ stderrTruncated = true;
53
+ console.error(chalk.yellow('Warning: stderr truncated at 10MB'));
54
+ }
55
+ else {
56
+ stderr += chunk;
57
+ }
58
+ }
59
+ });
60
+ child.on('close', (code) => {
61
+ if (stderr) {
62
+ console.error(chalk.yellow('Command stderr:'), stderr);
63
+ }
64
+ // Accept exit code 0 or if we got stdout/stderr output
65
+ // Note: codex CLI writes most output to stderr, so we must check both
66
+ if (code === 0 || stdout || stderr) {
67
+ if (code !== 0 && (stdout || stderr)) {
68
+ console.error(chalk.yellow('Command failed but produced output, using output'));
69
+ }
70
+ resolve({ stdout, stderr });
71
+ }
72
+ else {
73
+ reject(new CommandExecutionError([file, ...args].join(' '), `Command failed with exit code ${code}`, new Error(stderr || 'Unknown error')));
74
+ }
75
+ });
76
+ child.on('error', (error) => {
77
+ reject(new CommandExecutionError([file, ...args].join(' '), 'Command execution failed', error));
78
+ });
79
+ });
80
+ }
81
+ /**
82
+ * Execute a command with streaming output support.
83
+ * Calls onProgress callback with each chunk of output for real-time feedback.
84
+ *
85
+ * Note: Unlike executeCommand, this function treats stderr output as success
86
+ * because tools like codex write their primary output to stderr. This is
87
+ * intentional for streaming use cases where we want to capture all output.
88
+ */
89
+ export async function executeCommandStreaming(file, args = [], options = {}) {
90
+ return new Promise((resolve, reject) => {
91
+ // Escape args for Windows shell
92
+ const escapedArgs = isWindows ? args.map(escapeArgForWindows) : args;
93
+ console.error(chalk.blue('Executing (streaming):'), file, escapedArgs.join(' '));
94
+ const child = spawn(file, escapedArgs, {
95
+ shell: isWindows, // Use shell on Windows to inherit PATH correctly
96
+ env: options.envOverride
97
+ ? { ...process.env, ...options.envOverride }
98
+ : process.env,
99
+ stdio: ['pipe', 'pipe', 'pipe'],
100
+ });
101
+ let stdout = '';
102
+ let stderr = '';
103
+ let stdoutTruncated = false;
104
+ let stderrTruncated = false;
105
+ let lastProgressTime = 0;
106
+ const PROGRESS_DEBOUNCE_MS = 100; // Debounce progress updates
107
+ const sendProgress = (message) => {
108
+ if (!options.onProgress)
109
+ return;
110
+ const now = Date.now();
111
+ // Debounce to avoid flooding with progress updates
112
+ if (now - lastProgressTime >= PROGRESS_DEBOUNCE_MS) {
113
+ options.onProgress(message);
114
+ lastProgressTime = now;
115
+ }
116
+ };
117
+ child.stdout?.on('data', (data) => {
118
+ const chunk = data.toString();
119
+ if (!stdoutTruncated) {
120
+ if (stdout.length + chunk.length > MAX_BUFFER_SIZE) {
121
+ stdout += chunk.slice(0, MAX_BUFFER_SIZE - stdout.length);
122
+ stdoutTruncated = true;
123
+ console.error(chalk.yellow('Warning: stdout truncated at 10MB'));
124
+ }
125
+ else {
126
+ stdout += chunk;
127
+ }
128
+ }
129
+ sendProgress(chunk.trim());
130
+ });
131
+ child.stderr?.on('data', (data) => {
132
+ const chunk = data.toString();
133
+ if (!stderrTruncated) {
134
+ if (stderr.length + chunk.length > MAX_BUFFER_SIZE) {
135
+ stderr += chunk.slice(0, MAX_BUFFER_SIZE - stderr.length);
136
+ stderrTruncated = true;
137
+ console.error(chalk.yellow('Warning: stderr truncated at 10MB'));
138
+ }
139
+ else {
140
+ stderr += chunk;
141
+ }
142
+ }
143
+ // Also send stderr as progress - codex outputs to stderr
144
+ sendProgress(chunk.trim());
145
+ });
146
+ child.on('close', (code) => {
147
+ // Send final progress if there's any remaining output
148
+ if (options.onProgress && (stdout || stderr)) {
149
+ const finalOutput = stdout || stderr;
150
+ const lastChunk = finalOutput.slice(-500); // Last 500 chars
151
+ if (lastChunk.trim()) {
152
+ options.onProgress(`[Completed] ${lastChunk.trim().slice(0, 200)}...`);
153
+ }
154
+ }
155
+ if (code === 0 || stdout || stderr) {
156
+ // Success or we have output (treat as success like the original)
157
+ if (code !== 0 && (stdout || stderr)) {
158
+ console.error(chalk.yellow('Command failed but produced output, using output'));
159
+ }
160
+ resolve({ stdout, stderr });
161
+ }
162
+ else {
163
+ reject(new CommandExecutionError([file, ...args].join(' '), `Command exited with code ${code}`, new Error(`Exit code: ${code}`)));
164
+ }
165
+ });
166
+ child.on('error', (error) => {
167
+ reject(new CommandExecutionError([file, ...args].join(' '), 'Command execution failed', error));
168
+ });
169
+ });
170
+ }
171
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/utils/command.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "mcp-codex-subagent",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for OpenAI Codex CLI with role-based templates, specialization overlays, and context file injection",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "mcp-codex-subagent": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "directories": {
13
+ "doc": "docs"
14
+ },
15
+ "scripts": {
16
+ "build": "tsc && mkdir -p dist/templates/overlays && cp src/templates/*.mdx dist/templates/ && cp src/templates/overlays/*.mdx dist/templates/overlays/",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsx src/index.ts",
19
+ "test": "jest",
20
+ "test:watch": "jest --watch",
21
+ "test:coverage": "jest --coverage",
22
+ "lint": "eslint src/**/*.ts",
23
+ "lint:fix": "eslint src/**/*.ts --fix",
24
+ "format": "prettier --write src/**/*.ts",
25
+ "format:check": "prettier --check src/**/*.ts",
26
+ "clean": "rm -rf dist"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/yigitkonur/mcp-codex-subagent.git"
31
+ },
32
+ "keywords": [
33
+ "mcp",
34
+ "codex",
35
+ "openai",
36
+ "claude",
37
+ "ai",
38
+ "cli",
39
+ "superagent",
40
+ "templates",
41
+ "role-based",
42
+ "specialization",
43
+ "context-files",
44
+ "model-context-protocol"
45
+ ],
46
+ "author": "yigitkonur",
47
+ "license": "ISC",
48
+ "type": "module",
49
+ "bugs": {
50
+ "url": "https://github.com/yigitkonur/mcp-codex-subagent/issues"
51
+ },
52
+ "homepage": "https://github.com/yigitkonur/mcp-codex-subagent#readme",
53
+ "dependencies": {
54
+ "@modelcontextprotocol/sdk": "^1.24.0",
55
+ "chalk": "^5.6.0",
56
+ "zod": "^4.0.17"
57
+ },
58
+ "devDependencies": {
59
+ "@types/jest": "^30.0.0",
60
+ "@types/node": "^24.3.0",
61
+ "@typescript-eslint/eslint-plugin": "^8.39.1",
62
+ "@typescript-eslint/parser": "^8.39.1",
63
+ "eslint": "^9.33.0",
64
+ "jest": "^30.0.5",
65
+ "prettier": "^3.6.2",
66
+ "ts-jest": "^29.4.1",
67
+ "tsx": "^4.20.4",
68
+ "typescript": "^5.9.2"
69
+ }
70
+ }