@youdie006/prodex 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/LICENSE +21 -0
- package/README.md +418 -0
- package/dist/banner.d.ts +5 -0
- package/dist/banner.js +47 -0
- package/dist/banner.js.map +1 -0
- package/dist/bundle.d.ts +15 -0
- package/dist/bundle.js +30 -0
- package/dist/bundle.js.map +1 -0
- package/dist/chatgpt-browser.d.ts +119 -0
- package/dist/chatgpt-browser.js +857 -0
- package/dist/chatgpt-browser.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +3502 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.js +277 -0
- package/dist/config.js.map +1 -0
- package/dist/http-mcp.d.ts +20 -0
- package/dist/http-mcp.js +236 -0
- package/dist/http-mcp.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +395 -0
- package/dist/mcp-tools.js +167 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/mcp.d.ts +37 -0
- package/dist/mcp.js +229 -0
- package/dist/mcp.js.map +1 -0
- package/dist/repo-write.d.ts +47 -0
- package/dist/repo-write.js +427 -0
- package/dist/repo-write.js.map +1 -0
- package/dist/repo.d.ts +27 -0
- package/dist/repo.js +386 -0
- package/dist/repo.js.map +1 -0
- package/dist/safe-file.d.ts +25 -0
- package/dist/safe-file.js +295 -0
- package/dist/safe-file.js.map +1 -0
- package/dist/schema.d.ts +402 -0
- package/dist/schema.js +109 -0
- package/dist/schema.js.map +1 -0
- package/dist/store.d.ts +157 -0
- package/dist/store.js +1402 -0
- package/dist/store.js.map +1 -0
- package/docs/claude.md +130 -0
- package/docs/clients.md +75 -0
- package/docs/http-mcp.md +223 -0
- package/package.json +67 -0
- package/scripts/release-check.mjs +436 -0
- package/scripts/release-pack.mjs +481 -0
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { serializeMessage } from "@modelcontextprotocol/sdk/shared/stdio.js";
|
|
5
|
+
import { JSONRPCMessageSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { createMcpToolHandlers, MAX_MCP_BRIDGE_TEXT_BYTES, MAX_MCP_SHORT_TEXT_BYTES } from "./mcp-tools.js";
|
|
8
|
+
import { ReceiptKindSchema } from "./schema.js";
|
|
9
|
+
const McpBridgeTextSchema = z.string().max(MAX_MCP_BRIDGE_TEXT_BYTES);
|
|
10
|
+
const McpShortTextSchema = z.string().max(MAX_MCP_SHORT_TEXT_BYTES);
|
|
11
|
+
const BridgeFileInputSchema = z.object({
|
|
12
|
+
path: McpShortTextSchema,
|
|
13
|
+
role: z.enum(["context", "artifact", "result"]).optional(),
|
|
14
|
+
bytes: z.number().int().nonnegative().optional()
|
|
15
|
+
});
|
|
16
|
+
export const DEFAULT_STDIO_MESSAGE_LIMIT_BYTES = 1_048_576;
|
|
17
|
+
function asText(value) {
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: JSON.stringify(value, null, 2)
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const mcpPackageJson = createRequire(import.meta.url)("../package.json");
|
|
28
|
+
export function createServer(cwd = process.cwd(), options = {}) {
|
|
29
|
+
const server = new McpServer({ name: "prodex", version: mcpPackageJson.version ?? "0.0.0" });
|
|
30
|
+
const handlers = createMcpToolHandlers({ cwd, source: options.source, claimedBy: options.claimedBy });
|
|
31
|
+
server.registerTool("bridge_create_task", {
|
|
32
|
+
description: "Create a durable task for Codex/local execution in .bridge/tasks.",
|
|
33
|
+
inputSchema: {
|
|
34
|
+
title: McpShortTextSchema.min(1),
|
|
35
|
+
prompt: McpBridgeTextSchema.min(1),
|
|
36
|
+
repo_id: McpShortTextSchema.optional(),
|
|
37
|
+
files: z.array(BridgeFileInputSchema).max(100).optional()
|
|
38
|
+
}
|
|
39
|
+
}, async (input) => asText(await handlers.bridge_create_task(input)));
|
|
40
|
+
server.registerTool("bridge_list_tasks", {
|
|
41
|
+
description: "List durable bridge tasks.",
|
|
42
|
+
inputSchema: { status: z.enum(["new", "claimed", "done", "blocked"]).optional() }
|
|
43
|
+
}, async (input) => asText(await handlers.bridge_list_tasks(input)));
|
|
44
|
+
server.registerTool("bridge_get_task", {
|
|
45
|
+
description: "Fetch one bridge task by id.",
|
|
46
|
+
inputSchema: { task_id: McpShortTextSchema }
|
|
47
|
+
}, async (input) => asText(await handlers.bridge_get_task(input)));
|
|
48
|
+
server.registerTool("bridge_claim_task", {
|
|
49
|
+
description: "Claim a new bridge task for execution.",
|
|
50
|
+
inputSchema: { task_id: McpShortTextSchema, claimed_by: McpShortTextSchema.optional() }
|
|
51
|
+
}, async (input) => asText(await handlers.bridge_claim_task(input)));
|
|
52
|
+
server.registerTool("bridge_complete_task", {
|
|
53
|
+
description: "Complete a bridge task with a durable result record.",
|
|
54
|
+
inputSchema: {
|
|
55
|
+
task_id: McpShortTextSchema,
|
|
56
|
+
summary: McpBridgeTextSchema.min(1),
|
|
57
|
+
artifacts: z.array(BridgeFileInputSchema).max(100).optional(),
|
|
58
|
+
commands: z.array(McpBridgeTextSchema).max(100).optional(),
|
|
59
|
+
warnings: z.array(McpBridgeTextSchema).max(100).optional()
|
|
60
|
+
}
|
|
61
|
+
}, async (input) => asText(await handlers.bridge_complete_task(input)));
|
|
62
|
+
server.registerTool("bridge_block_task", {
|
|
63
|
+
description: "Close a bridge task as blocked with durable blocker metadata.",
|
|
64
|
+
inputSchema: {
|
|
65
|
+
task_id: McpShortTextSchema,
|
|
66
|
+
summary: McpBridgeTextSchema.min(1),
|
|
67
|
+
code: McpShortTextSchema.optional(),
|
|
68
|
+
next_step: McpBridgeTextSchema.optional(),
|
|
69
|
+
retryable: z.boolean().optional(),
|
|
70
|
+
artifacts: z.array(BridgeFileInputSchema).max(100).optional(),
|
|
71
|
+
commands: z.array(McpBridgeTextSchema).max(100).optional(),
|
|
72
|
+
warnings: z.array(McpBridgeTextSchema).max(100).optional()
|
|
73
|
+
}
|
|
74
|
+
}, async (input) => asText(await handlers.bridge_block_task(input)));
|
|
75
|
+
server.registerTool("bridge_list_results", {
|
|
76
|
+
description: "List completed or blocked bridge results.",
|
|
77
|
+
inputSchema: {}
|
|
78
|
+
}, async () => asText(await handlers.bridge_list_results()));
|
|
79
|
+
server.registerTool("bridge_fetch_result", {
|
|
80
|
+
description: "Fetch the result for a bridge task.",
|
|
81
|
+
inputSchema: { task_id: McpShortTextSchema }
|
|
82
|
+
}, async (input) => asText(await handlers.bridge_fetch_result(input)));
|
|
83
|
+
server.registerTool("bridge_fetch_result_artifact", {
|
|
84
|
+
description: "Fetch text content for a result-listed artifact. Arbitrary .bridge artifacts are not exposed.",
|
|
85
|
+
inputSchema: { task_id: McpShortTextSchema, path: McpShortTextSchema.optional() }
|
|
86
|
+
}, async (input) => asText(await handlers.bridge_fetch_result_artifact(input)));
|
|
87
|
+
server.registerTool("bridge_list_receipts", {
|
|
88
|
+
description: "List durable bridge receipts with legacy inline write payloads redacted.",
|
|
89
|
+
inputSchema: { kind: ReceiptKindSchema.optional(), task_id: McpShortTextSchema.optional() }
|
|
90
|
+
}, async (input) => asText(await handlers.bridge_list_receipts(input)));
|
|
91
|
+
server.registerTool("bridge_get_receipt", {
|
|
92
|
+
description: "Fetch one bridge receipt with legacy inline write payloads redacted.",
|
|
93
|
+
inputSchema: { receipt_id: McpShortTextSchema }
|
|
94
|
+
}, async (input) => asText(await handlers.bridge_get_receipt(input)));
|
|
95
|
+
server.registerTool("bridge_list_sessions", {
|
|
96
|
+
description: "List durable consult/session records.",
|
|
97
|
+
inputSchema: { status: z.enum(["preview", "running", "done", "blocked"]).optional() }
|
|
98
|
+
}, async (input) => asText(await handlers.bridge_list_sessions(input)));
|
|
99
|
+
server.registerTool("bridge_get_session", {
|
|
100
|
+
description: "Fetch one consult/session record by id.",
|
|
101
|
+
inputSchema: { session_id: McpShortTextSchema }
|
|
102
|
+
}, async (input) => asText(await handlers.bridge_get_session(input)));
|
|
103
|
+
server.registerTool("repo_read_file", {
|
|
104
|
+
description: "Read a repo-relative text file with line bounds. Absolute paths and traversal are rejected.",
|
|
105
|
+
inputSchema: {
|
|
106
|
+
path: McpShortTextSchema,
|
|
107
|
+
start_line: z.number().int().positive().optional(),
|
|
108
|
+
max_lines: z.number().int().positive().max(500).optional()
|
|
109
|
+
}
|
|
110
|
+
}, async (input) => asText(await handlers.repo_read_file(input)));
|
|
111
|
+
server.registerTool("repo_search", {
|
|
112
|
+
description: "Search the current repo with ripgrep. Read-only.",
|
|
113
|
+
inputSchema: { query: McpBridgeTextSchema.min(1), glob: McpShortTextSchema.optional() }
|
|
114
|
+
}, async (input) => asText(await handlers.repo_search(input)));
|
|
115
|
+
server.registerTool("repo_write_file_dry_run", {
|
|
116
|
+
description: "Create a receipt-gated write preview for an existing repo-relative text file. Does not modify files.",
|
|
117
|
+
inputSchema: {
|
|
118
|
+
path: McpShortTextSchema,
|
|
119
|
+
content: z.string().max(1_000_000),
|
|
120
|
+
expected_head: McpShortTextSchema.min(1)
|
|
121
|
+
}
|
|
122
|
+
}, async (input) => asText(await handlers.repo_write_file_dry_run(input)));
|
|
123
|
+
server.registerTool("repo_write_file_apply", {
|
|
124
|
+
description: "Apply a prior write dry-run only when git HEAD and preimage hash match.",
|
|
125
|
+
inputSchema: {
|
|
126
|
+
receipt_id: McpShortTextSchema.min(1),
|
|
127
|
+
expected_head: McpShortTextSchema.min(1),
|
|
128
|
+
preimage_sha256: McpShortTextSchema.min(1)
|
|
129
|
+
}
|
|
130
|
+
}, async (input) => asText(await handlers.repo_write_file_apply(input)));
|
|
131
|
+
server.registerTool("repo_stage_reviewed_paths", {
|
|
132
|
+
description: "Stage paths only when backed by applied write receipts matching the current git HEAD and file content.",
|
|
133
|
+
inputSchema: {
|
|
134
|
+
receipt_ids: z.array(McpShortTextSchema.min(1)).min(1).max(100),
|
|
135
|
+
expected_head: McpShortTextSchema.min(1)
|
|
136
|
+
}
|
|
137
|
+
}, async (input) => asText(await handlers.repo_stage_reviewed_paths(input)));
|
|
138
|
+
return server;
|
|
139
|
+
}
|
|
140
|
+
export async function runMcpServer(cwd = process.cwd()) {
|
|
141
|
+
const server = createServer(cwd);
|
|
142
|
+
const transport = new LimitedStdioServerTransport();
|
|
143
|
+
await server.connect(transport);
|
|
144
|
+
}
|
|
145
|
+
export class LimitedStdioServerTransport {
|
|
146
|
+
stdin;
|
|
147
|
+
stdout;
|
|
148
|
+
onclose;
|
|
149
|
+
onerror;
|
|
150
|
+
onmessage;
|
|
151
|
+
sessionId;
|
|
152
|
+
setProtocolVersion;
|
|
153
|
+
buffer = Buffer.alloc(0);
|
|
154
|
+
started = false;
|
|
155
|
+
closed = false;
|
|
156
|
+
maxMessageBytes;
|
|
157
|
+
constructor(stdin = process.stdin, stdout = process.stdout, options = {}) {
|
|
158
|
+
this.stdin = stdin;
|
|
159
|
+
this.stdout = stdout;
|
|
160
|
+
this.maxMessageBytes = Math.max(1, options.maxMessageBytes ?? DEFAULT_STDIO_MESSAGE_LIMIT_BYTES);
|
|
161
|
+
}
|
|
162
|
+
async start() {
|
|
163
|
+
if (this.started) {
|
|
164
|
+
throw new Error("LimitedStdioServerTransport already started");
|
|
165
|
+
}
|
|
166
|
+
this.started = true;
|
|
167
|
+
this.stdin.on("data", this.onData);
|
|
168
|
+
this.stdin.on("error", this.onInputError);
|
|
169
|
+
}
|
|
170
|
+
async close() {
|
|
171
|
+
if (this.closed) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
this.closed = true;
|
|
175
|
+
this.stdin.off("data", this.onData);
|
|
176
|
+
this.stdin.off("error", this.onInputError);
|
|
177
|
+
if (this.stdin.listenerCount("data") === 0) {
|
|
178
|
+
this.stdin.pause();
|
|
179
|
+
}
|
|
180
|
+
this.buffer = Buffer.alloc(0);
|
|
181
|
+
this.onclose?.();
|
|
182
|
+
}
|
|
183
|
+
async send(message) {
|
|
184
|
+
const json = serializeMessage(message);
|
|
185
|
+
await new Promise((resolve) => {
|
|
186
|
+
if (this.stdout.write(json)) {
|
|
187
|
+
resolve();
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.stdout.once("drain", resolve);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
onData = (chunk) => {
|
|
195
|
+
try {
|
|
196
|
+
const buffer = Buffer.from(chunk);
|
|
197
|
+
this.buffer = this.buffer.length === 0 ? buffer : Buffer.concat([this.buffer, buffer]);
|
|
198
|
+
this.processBuffer();
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
this.buffer = Buffer.alloc(0);
|
|
202
|
+
this.onerror?.(error instanceof Error ? error : new Error(String(error)));
|
|
203
|
+
void this.close();
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
onInputError = (error) => {
|
|
207
|
+
this.onerror?.(error);
|
|
208
|
+
void this.close();
|
|
209
|
+
};
|
|
210
|
+
processBuffer() {
|
|
211
|
+
while (true) {
|
|
212
|
+
const newlineIndex = this.buffer.indexOf("\n");
|
|
213
|
+
if (newlineIndex === -1) {
|
|
214
|
+
if (this.buffer.length > this.maxMessageBytes) {
|
|
215
|
+
throw new Error(`MCP stdio message is too large (${this.buffer.length} bytes > ${this.maxMessageBytes} bytes)`);
|
|
216
|
+
}
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (newlineIndex > this.maxMessageBytes) {
|
|
220
|
+
throw new Error(`MCP stdio message is too large (${newlineIndex} bytes > ${this.maxMessageBytes} bytes)`);
|
|
221
|
+
}
|
|
222
|
+
const line = this.buffer.toString("utf8", 0, newlineIndex).replace(/\r$/, "");
|
|
223
|
+
this.buffer = this.buffer.subarray(newlineIndex + 1);
|
|
224
|
+
const message = JSONRPCMessageSchema.parse(JSON.parse(line));
|
|
225
|
+
this.onmessage?.(message);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Receipt } from "./schema.js";
|
|
2
|
+
import type { BridgeStore } from "./store.js";
|
|
3
|
+
export type RepoWriteTestHooks = {
|
|
4
|
+
beforeAppliedReceipt?: (path: string) => Promise<void> | void;
|
|
5
|
+
beforeGitAdd?: (paths: string[]) => Promise<void> | void;
|
|
6
|
+
beforeStageReceipt?: (paths: string[]) => Promise<void> | void;
|
|
7
|
+
beforeRestoreGitIndex?: (paths: string[]) => Promise<void> | void;
|
|
8
|
+
};
|
|
9
|
+
export declare function setRepoWriteTestHooks(hooks: RepoWriteTestHooks): void;
|
|
10
|
+
export interface RepoWriteDryRunInput {
|
|
11
|
+
path: string;
|
|
12
|
+
content: string;
|
|
13
|
+
expected_head: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RepoWriteApplyInput {
|
|
16
|
+
receipt_id: string;
|
|
17
|
+
expected_head: string;
|
|
18
|
+
preimage_sha256: string;
|
|
19
|
+
}
|
|
20
|
+
export interface RepoStageReviewedPathsInput {
|
|
21
|
+
receipt_ids: string[];
|
|
22
|
+
expected_head: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RepoWriteDryRunResult {
|
|
25
|
+
receipt: Receipt;
|
|
26
|
+
path: string;
|
|
27
|
+
expected_head: string;
|
|
28
|
+
preimage_sha256: string;
|
|
29
|
+
new_sha256: string;
|
|
30
|
+
diff: string;
|
|
31
|
+
}
|
|
32
|
+
export interface RepoWriteApplyResult {
|
|
33
|
+
receipt: Receipt;
|
|
34
|
+
path: string;
|
|
35
|
+
expected_head: string;
|
|
36
|
+
preimage_sha256: string;
|
|
37
|
+
new_sha256: string;
|
|
38
|
+
}
|
|
39
|
+
export interface RepoStageReviewedPathsResult {
|
|
40
|
+
receipt: Receipt;
|
|
41
|
+
paths: string[];
|
|
42
|
+
receipt_ids: string[];
|
|
43
|
+
expected_head: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function createRepoWriteDryRun(root: string, store: BridgeStore, input: RepoWriteDryRunInput): Promise<RepoWriteDryRunResult>;
|
|
46
|
+
export declare function applyRepoWriteDryRun(root: string, store: BridgeStore, input: RepoWriteApplyInput): Promise<RepoWriteApplyResult>;
|
|
47
|
+
export declare function stageReviewedPaths(root: string, store: BridgeStore, input: RepoStageReviewedPathsInput): Promise<RepoStageReviewedPathsResult>;
|