@schoolai/shipyard-mcp 0.4.1 → 0.4.2
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/apps/hook/dist/index.cjs +110 -63
- package/apps/server/dist/{chunk-6EWQC5VA.js → chunk-6TW62VVK.js} +326 -98
- package/apps/server/dist/{chunk-HFZCBGQ3.js → chunk-DLDKEWOB.js} +43 -11
- package/apps/server/dist/index.js +435 -54
- package/apps/server/dist/{input-request-manager-QT4IVCLS.js → input-request-manager-FK4REBEZ.js} +2 -2
- package/apps/server/dist/{session-registry-CBDXMXY3.js → session-registry-RL3D6JZU.js} +1 -1
- package/package.json +1 -1
package/apps/hook/dist/index.cjs
CHANGED
|
@@ -33,9 +33,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
33
33
|
mod
|
|
34
34
|
));
|
|
35
35
|
|
|
36
|
-
// ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.
|
|
36
|
+
// ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js
|
|
37
37
|
var init_cjs_shims = __esm({
|
|
38
|
-
"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.
|
|
38
|
+
"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js"() {
|
|
39
39
|
"use strict";
|
|
40
40
|
}
|
|
41
41
|
});
|
|
@@ -28491,7 +28491,7 @@ init_cjs_shims();
|
|
|
28491
28491
|
// ../../packages/schema/dist/index.mjs
|
|
28492
28492
|
init_cjs_shims();
|
|
28493
28493
|
|
|
28494
|
-
// ../../packages/schema/dist/yjs-helpers-
|
|
28494
|
+
// ../../packages/schema/dist/yjs-helpers-CdBcMmbj.mjs
|
|
28495
28495
|
init_cjs_shims();
|
|
28496
28496
|
|
|
28497
28497
|
// ../../packages/schema/dist/plan.mjs
|
|
@@ -42366,13 +42366,32 @@ var PlanStatusValues = [
|
|
|
42366
42366
|
"completed"
|
|
42367
42367
|
];
|
|
42368
42368
|
var OriginPlatformValues = [
|
|
42369
|
+
"aider",
|
|
42370
|
+
"browser",
|
|
42369
42371
|
"claude-code",
|
|
42370
|
-
"
|
|
42372
|
+
"cline",
|
|
42373
|
+
"codex",
|
|
42374
|
+
"continue",
|
|
42371
42375
|
"cursor",
|
|
42376
|
+
"devin",
|
|
42377
|
+
"vscode",
|
|
42372
42378
|
"windsurf",
|
|
42373
|
-
"
|
|
42379
|
+
"zed",
|
|
42374
42380
|
"unknown"
|
|
42375
42381
|
];
|
|
42382
|
+
var AGENT_PLATFORMS = [
|
|
42383
|
+
"aider",
|
|
42384
|
+
"claude-code",
|
|
42385
|
+
"cline",
|
|
42386
|
+
"codex",
|
|
42387
|
+
"continue",
|
|
42388
|
+
"cursor",
|
|
42389
|
+
"devin",
|
|
42390
|
+
"vscode",
|
|
42391
|
+
"windsurf",
|
|
42392
|
+
"zed"
|
|
42393
|
+
];
|
|
42394
|
+
var AGENT_PLATFORMS_SET = new Set(AGENT_PLATFORMS);
|
|
42376
42395
|
var ClaudeCodeOriginMetadataSchema = external_exports.object({
|
|
42377
42396
|
platform: external_exports.literal("claude-code"),
|
|
42378
42397
|
sessionId: external_exports.string(),
|
|
@@ -42664,7 +42683,8 @@ var PRReviewCommentSchema = external_exports.object({
|
|
|
42664
42683
|
body: external_exports.string(),
|
|
42665
42684
|
author: external_exports.string(),
|
|
42666
42685
|
createdAt: external_exports.number(),
|
|
42667
|
-
resolved: external_exports.boolean().optional()
|
|
42686
|
+
resolved: external_exports.boolean().optional(),
|
|
42687
|
+
inReplyTo: external_exports.string().optional()
|
|
42668
42688
|
});
|
|
42669
42689
|
var LocalDiffCommentSchema = external_exports.object({
|
|
42670
42690
|
id: external_exports.string(),
|
|
@@ -42677,7 +42697,8 @@ var LocalDiffCommentSchema = external_exports.object({
|
|
|
42677
42697
|
baseRef: external_exports.string(),
|
|
42678
42698
|
resolved: external_exports.boolean().optional(),
|
|
42679
42699
|
lineContentHash: external_exports.string().optional(),
|
|
42680
|
-
machineId: external_exports.string().optional()
|
|
42700
|
+
machineId: external_exports.string().optional(),
|
|
42701
|
+
inReplyTo: external_exports.string().optional()
|
|
42681
42702
|
});
|
|
42682
42703
|
var GitHubArtifactParseSchema = external_exports.object({
|
|
42683
42704
|
id: external_exports.string(),
|
|
@@ -42706,7 +42727,7 @@ var LocalArtifactParseSchema = external_exports.object({
|
|
|
42706
42727
|
localArtifactId: external_exports.string()
|
|
42707
42728
|
});
|
|
42708
42729
|
|
|
42709
|
-
// ../../packages/schema/dist/yjs-helpers-
|
|
42730
|
+
// ../../packages/schema/dist/yjs-helpers-CdBcMmbj.mjs
|
|
42710
42731
|
function assertNever2(value) {
|
|
42711
42732
|
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(value)}`);
|
|
42712
42733
|
}
|
|
@@ -43125,6 +43146,12 @@ var UrlKeyVersionSchema = external_exports.object({
|
|
|
43125
43146
|
id: external_exports.string(),
|
|
43126
43147
|
content: external_exports.array(external_exports.unknown())
|
|
43127
43148
|
});
|
|
43149
|
+
var UrlDeliverableSchema = external_exports.object({
|
|
43150
|
+
id: external_exports.string().optional(),
|
|
43151
|
+
text: external_exports.string(),
|
|
43152
|
+
linkedArtifactId: external_exports.string().nullable().optional(),
|
|
43153
|
+
linkedAt: external_exports.number().optional()
|
|
43154
|
+
});
|
|
43128
43155
|
var UrlEncodedPlanV1Schema = external_exports.object({
|
|
43129
43156
|
v: external_exports.literal(1),
|
|
43130
43157
|
id: external_exports.string(),
|
|
@@ -43132,9 +43159,9 @@ var UrlEncodedPlanV1Schema = external_exports.object({
|
|
|
43132
43159
|
status: external_exports.enum(PlanStatusValues),
|
|
43133
43160
|
repo: external_exports.string().optional(),
|
|
43134
43161
|
pr: external_exports.number().optional(),
|
|
43135
|
-
content: external_exports.array(external_exports.unknown()),
|
|
43162
|
+
content: external_exports.array(external_exports.unknown()).optional(),
|
|
43136
43163
|
artifacts: external_exports.array(ArtifactSchema).optional(),
|
|
43137
|
-
deliverables: external_exports.array(
|
|
43164
|
+
deliverables: external_exports.array(UrlDeliverableSchema).optional(),
|
|
43138
43165
|
comments: external_exports.array(external_exports.unknown()).optional()
|
|
43139
43166
|
});
|
|
43140
43167
|
var UrlEncodedPlanV2Schema = external_exports.object({
|
|
@@ -43144,9 +43171,9 @@ var UrlEncodedPlanV2Schema = external_exports.object({
|
|
|
43144
43171
|
status: external_exports.enum(PlanStatusValues),
|
|
43145
43172
|
repo: external_exports.string().optional(),
|
|
43146
43173
|
pr: external_exports.number().optional(),
|
|
43147
|
-
content: external_exports.array(external_exports.unknown()),
|
|
43174
|
+
content: external_exports.array(external_exports.unknown()).optional(),
|
|
43148
43175
|
artifacts: external_exports.array(ArtifactSchema).optional(),
|
|
43149
|
-
deliverables: external_exports.array(
|
|
43176
|
+
deliverables: external_exports.array(UrlDeliverableSchema).optional(),
|
|
43150
43177
|
comments: external_exports.array(external_exports.unknown()).optional(),
|
|
43151
43178
|
versionRefs: external_exports.array(UrlSnapshotRefSchema).optional(),
|
|
43152
43179
|
keyVersions: external_exports.array(UrlKeyVersionSchema).optional()
|
|
@@ -44144,6 +44171,11 @@ var EnvironmentContextSchema = external_exports.object({
|
|
|
44144
44171
|
hostname: external_exports.string().optional(),
|
|
44145
44172
|
repo: external_exports.string().optional()
|
|
44146
44173
|
});
|
|
44174
|
+
var BrowserContextSchema = external_exports.object({
|
|
44175
|
+
browser: external_exports.string().optional(),
|
|
44176
|
+
os: external_exports.string().optional(),
|
|
44177
|
+
lastActive: external_exports.number().optional()
|
|
44178
|
+
});
|
|
44147
44179
|
var GitHubPRResponseSchema = external_exports.object({
|
|
44148
44180
|
number: external_exports.number(),
|
|
44149
44181
|
html_url: external_exports.string().url(),
|
|
@@ -44286,8 +44318,8 @@ function formatThreadsForLLM(threads, options = {}) {
|
|
|
44286
44318
|
const comments = thread.comments.map((c, idx) => {
|
|
44287
44319
|
const text = extractTextFromCommentBody(c.body);
|
|
44288
44320
|
const author = resolveUser ? resolveUser(c.userId) : c.userId.slice(0, 8);
|
|
44289
|
-
if (idx === 0) return
|
|
44290
|
-
return
|
|
44321
|
+
if (idx === 0) return `[thread:${thread.id}] ${author}: ${text}`;
|
|
44322
|
+
return `[comment:${c.id}] ${author} (reply): ${text}`;
|
|
44291
44323
|
}).join("\n");
|
|
44292
44324
|
return `${location}${thread.resolved ? " [Resolved]" : ""}
|
|
44293
44325
|
${comments}`;
|
|
@@ -44313,6 +44345,8 @@ var TOOL_NAMES = {
|
|
|
44313
44345
|
READ_DIFF_COMMENTS: "read_diff_comments",
|
|
44314
44346
|
READ_TASK: "read_task",
|
|
44315
44347
|
REGENERATE_SESSION_TOKEN: "regenerate_session_token",
|
|
44348
|
+
REPLY_TO_DIFF_COMMENT: "reply_to_diff_comment",
|
|
44349
|
+
REPLY_TO_THREAD_COMMENT: "reply_to_thread_comment",
|
|
44316
44350
|
REQUEST_USER_INPUT: "request_user_input",
|
|
44317
44351
|
SETUP_REVIEW_NOTIFICATION: "setup_review_notification",
|
|
44318
44352
|
UPDATE_BLOCK_CONTENT: "update_block_content",
|
|
@@ -45077,12 +45111,44 @@ var DEFAULT_AGENT_TYPE = "claude-code";
|
|
|
45077
45111
|
// src/logger.ts
|
|
45078
45112
|
init_cjs_shims();
|
|
45079
45113
|
var import_node_fs = require("fs");
|
|
45114
|
+
var import_node_path2 = require("path");
|
|
45115
|
+
var import_pino = __toESM(require_pino());
|
|
45116
|
+
|
|
45117
|
+
// src/config/env/registry.ts
|
|
45118
|
+
init_cjs_shims();
|
|
45080
45119
|
var import_node_os = require("os");
|
|
45081
45120
|
var import_node_path = require("path");
|
|
45082
|
-
var import_pino = __toESM(require_pino());
|
|
45083
45121
|
|
|
45084
|
-
//
|
|
45122
|
+
// ../../packages/shared/dist/index.mjs
|
|
45123
|
+
init_cjs_shims();
|
|
45124
|
+
|
|
45125
|
+
// ../../packages/shared/dist/registry-config.mjs
|
|
45085
45126
|
init_cjs_shims();
|
|
45127
|
+
var DEFAULT_REGISTRY_PORTS = [
|
|
45128
|
+
32191,
|
|
45129
|
+
32192,
|
|
45130
|
+
32193,
|
|
45131
|
+
32194,
|
|
45132
|
+
32195,
|
|
45133
|
+
32196,
|
|
45134
|
+
32197,
|
|
45135
|
+
32198,
|
|
45136
|
+
32199
|
|
45137
|
+
];
|
|
45138
|
+
|
|
45139
|
+
// ../../packages/shared/dist/index.mjs
|
|
45140
|
+
var import_node_crypto = require("crypto");
|
|
45141
|
+
function computeHash(content) {
|
|
45142
|
+
return (0, import_node_crypto.createHash)("sha256").update(content).digest("hex").slice(0, 16);
|
|
45143
|
+
}
|
|
45144
|
+
function generateSessionToken() {
|
|
45145
|
+
return (0, import_node_crypto.randomBytes)(32).toString("base64url");
|
|
45146
|
+
}
|
|
45147
|
+
function hashSessionToken(token) {
|
|
45148
|
+
return (0, import_node_crypto.createHash)("sha256").update(token).digest("hex");
|
|
45149
|
+
}
|
|
45150
|
+
var APPROVAL_LONG_POLL_TIMEOUT_MS = 1800 * 1e3;
|
|
45151
|
+
var DEFAULT_TRPC_TIMEOUT_MS = 10 * 1e3;
|
|
45086
45152
|
|
|
45087
45153
|
// src/config/config.ts
|
|
45088
45154
|
init_cjs_shims();
|
|
@@ -45106,15 +45172,31 @@ ${errorMessages}`);
|
|
|
45106
45172
|
}
|
|
45107
45173
|
}
|
|
45108
45174
|
|
|
45109
|
-
// src/config/env/
|
|
45175
|
+
// src/config/env/registry.ts
|
|
45110
45176
|
var schema = external_exports.object({
|
|
45177
|
+
REGISTRY_PORT: external_exports.string().optional().transform((val) => {
|
|
45178
|
+
if (!val) return DEFAULT_REGISTRY_PORTS;
|
|
45179
|
+
const port = Number.parseInt(val, 10);
|
|
45180
|
+
if (Number.isNaN(port)) {
|
|
45181
|
+
throw new Error(`REGISTRY_PORT must be a valid number, got: ${val}`);
|
|
45182
|
+
}
|
|
45183
|
+
return [port];
|
|
45184
|
+
}),
|
|
45185
|
+
SHIPYARD_STATE_DIR: external_exports.string().optional().transform((val) => val || void 0).default(() => (0, import_node_path.join)((0, import_node_os.homedir)(), ".shipyard"))
|
|
45186
|
+
});
|
|
45187
|
+
var registryConfig = loadEnv(schema);
|
|
45188
|
+
|
|
45189
|
+
// src/config/env/server.ts
|
|
45190
|
+
init_cjs_shims();
|
|
45191
|
+
var schema2 = external_exports.object({
|
|
45111
45192
|
LOG_LEVEL: external_exports.enum(["debug", "info", "warn", "error"]).default("info")
|
|
45112
45193
|
});
|
|
45113
|
-
var serverConfig = loadEnv(
|
|
45194
|
+
var serverConfig = loadEnv(schema2);
|
|
45114
45195
|
|
|
45115
45196
|
// src/logger.ts
|
|
45116
|
-
var LOG_DIR =
|
|
45117
|
-
var LOG_FILE = (0,
|
|
45197
|
+
var LOG_DIR = registryConfig.SHIPYARD_STATE_DIR;
|
|
45198
|
+
var LOG_FILE = (0, import_node_path2.join)(LOG_DIR, "hook-debug.log");
|
|
45199
|
+
var HOOK_LOG_FILE = LOG_FILE;
|
|
45118
45200
|
var isTest = process.env.NODE_ENV === "test" || process.env.VITEST;
|
|
45119
45201
|
if (!isTest && !(0, import_node_fs.existsSync)(LOG_DIR)) {
|
|
45120
45202
|
try {
|
|
@@ -45299,47 +45381,9 @@ ${feedbackText}`;
|
|
|
45299
45381
|
// src/core/plan-manager.ts
|
|
45300
45382
|
init_cjs_shims();
|
|
45301
45383
|
|
|
45302
|
-
// ../../packages/shared/dist/index.mjs
|
|
45303
|
-
init_cjs_shims();
|
|
45304
|
-
|
|
45305
|
-
// ../../packages/shared/dist/registry-config.mjs
|
|
45306
|
-
init_cjs_shims();
|
|
45307
|
-
var DEFAULT_REGISTRY_PORTS = [32191, 32192];
|
|
45308
|
-
|
|
45309
|
-
// ../../packages/shared/dist/index.mjs
|
|
45310
|
-
var import_node_crypto = require("crypto");
|
|
45311
|
-
function computeHash(content) {
|
|
45312
|
-
return (0, import_node_crypto.createHash)("sha256").update(content).digest("hex").slice(0, 16);
|
|
45313
|
-
}
|
|
45314
|
-
function generateSessionToken() {
|
|
45315
|
-
return (0, import_node_crypto.randomBytes)(32).toString("base64url");
|
|
45316
|
-
}
|
|
45317
|
-
function hashSessionToken(token) {
|
|
45318
|
-
return (0, import_node_crypto.createHash)("sha256").update(token).digest("hex");
|
|
45319
|
-
}
|
|
45320
|
-
var APPROVAL_LONG_POLL_TIMEOUT_MS = 1800 * 1e3;
|
|
45321
|
-
var DEFAULT_TRPC_TIMEOUT_MS = 10 * 1e3;
|
|
45322
|
-
|
|
45323
45384
|
// src/http-client.ts
|
|
45324
45385
|
init_cjs_shims();
|
|
45325
45386
|
|
|
45326
|
-
// src/config/env/registry.ts
|
|
45327
|
-
init_cjs_shims();
|
|
45328
|
-
var import_node_os2 = require("os");
|
|
45329
|
-
var import_node_path2 = require("path");
|
|
45330
|
-
var schema2 = external_exports.object({
|
|
45331
|
-
REGISTRY_PORT: external_exports.string().optional().transform((val) => {
|
|
45332
|
-
if (!val) return DEFAULT_REGISTRY_PORTS;
|
|
45333
|
-
const port = Number.parseInt(val, 10);
|
|
45334
|
-
if (Number.isNaN(port)) {
|
|
45335
|
-
throw new Error(`REGISTRY_PORT must be a valid number, got: ${val}`);
|
|
45336
|
-
}
|
|
45337
|
-
return [port];
|
|
45338
|
-
}),
|
|
45339
|
-
SHIPYARD_STATE_DIR: external_exports.string().optional().default(() => (0, import_node_path2.join)((0, import_node_os2.homedir)(), ".shipyard"))
|
|
45340
|
-
});
|
|
45341
|
-
var registryConfig = loadEnv(schema2);
|
|
45342
|
-
|
|
45343
45387
|
// src/trpc-client.ts
|
|
45344
45388
|
init_cjs_shims();
|
|
45345
45389
|
|
|
@@ -46716,7 +46760,10 @@ init_cjs_shims();
|
|
|
46716
46760
|
// src/config/env/web.ts
|
|
46717
46761
|
init_cjs_shims();
|
|
46718
46762
|
var schema3 = external_exports.object({
|
|
46719
|
-
SHIPYARD_WEB_URL: external_exports.string().url().default(
|
|
46763
|
+
SHIPYARD_WEB_URL: external_exports.string().url().default(() => {
|
|
46764
|
+
const nodeEnv = process.env.NODE_ENV || "development";
|
|
46765
|
+
return nodeEnv === "production" ? "https://schoolai.github.io/shipyard" : "http://localhost:5173";
|
|
46766
|
+
})
|
|
46720
46767
|
});
|
|
46721
46768
|
var webConfig = loadEnv(schema3);
|
|
46722
46769
|
|
|
@@ -46896,7 +46943,7 @@ async function checkReviewStatus(sessionId, planContent, originMetadata) {
|
|
|
46896
46943
|
);
|
|
46897
46944
|
return {
|
|
46898
46945
|
allow: false,
|
|
46899
|
-
message:
|
|
46946
|
+
message: `Internal error: Plan content found but session state missing. Check ${HOOK_LOG_FILE} and report this issue.`
|
|
46900
46947
|
};
|
|
46901
46948
|
}
|
|
46902
46949
|
if (!state.planId) {
|
|
@@ -46915,7 +46962,7 @@ async function checkReviewStatus(sessionId, planContent, originMetadata) {
|
|
|
46915
46962
|
logger.warn({ err, planId }, "Failed to get review status, blocking exit");
|
|
46916
46963
|
return {
|
|
46917
46964
|
allow: false,
|
|
46918
|
-
message: "Cannot verify plan approval status. Ensure the Shipyard MCP server is running. Check
|
|
46965
|
+
message: "Cannot verify plan approval status. Ensure the Shipyard MCP server is running. Check server-debug.log in your Shipyard state directory for details.",
|
|
46919
46966
|
planId
|
|
46920
46967
|
};
|
|
46921
46968
|
}
|
|
@@ -46982,7 +47029,7 @@ async function handlePlanExit(event) {
|
|
|
46982
47029
|
const errorCode = err instanceof Error && "code" in err && typeof err.code === "string" ? err.code : void 0;
|
|
46983
47030
|
logger.error({ err, message: errorMessage, code: errorCode }, "Failed to check review status");
|
|
46984
47031
|
const isConnectionError = errorCode === "ECONNREFUSED" || errorCode === "ECONNRESET" || errorCode === "ETIMEDOUT" || errorCode === "ENOTFOUND" || errorMessage?.includes("connect") || errorMessage?.includes("timeout") || errorMessage?.includes("WebSocket") || errorMessage?.includes("not available");
|
|
46985
|
-
const message = isConnectionError ?
|
|
47032
|
+
const message = isConnectionError ? `Cannot connect to Shipyard server. Ensure the Shipyard MCP server is running. Check ${HOOK_LOG_FILE} for details.` : `Review system error: ${errorMessage}. Check ${HOOK_LOG_FILE} for details.`;
|
|
46986
47033
|
return {
|
|
46987
47034
|
allow: false,
|
|
46988
47035
|
message
|
|
@@ -47097,7 +47144,7 @@ async function main() {
|
|
|
47097
47144
|
hookEventName: "PermissionRequest",
|
|
47098
47145
|
decision: {
|
|
47099
47146
|
behavior: "deny",
|
|
47100
|
-
message: `Hook error: ${errorMessage}. Check
|
|
47147
|
+
message: `Hook error: ${errorMessage}. Check ${HOOK_LOG_FILE} for details.`
|
|
47101
47148
|
}
|
|
47102
47149
|
}
|
|
47103
47150
|
})
|