@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.
@@ -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.3/node_modules/tsup/assets/cjs_shims.js
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.3/node_modules/tsup/assets/cjs_shims.js"() {
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-CmikQBE7.mjs
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
- "devin",
42372
+ "cline",
42373
+ "codex",
42374
+ "continue",
42371
42375
  "cursor",
42376
+ "devin",
42377
+ "vscode",
42372
42378
  "windsurf",
42373
- "aider",
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-CmikQBE7.mjs
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(DeliverableSchema).optional(),
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(DeliverableSchema).optional(),
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 `${author}: ${text}`;
44290
- return `${author} (reply): ${text}`;
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
- // src/config/env/server.ts
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/server.ts
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(schema);
45194
+ var serverConfig = loadEnv(schema2);
45114
45195
 
45115
45196
  // src/logger.ts
45116
- var LOG_DIR = (0, import_node_path.join)((0, import_node_os.homedir)(), ".shipyard");
45117
- var LOG_FILE = (0, import_node_path.join)(LOG_DIR, "hook-debug.log");
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("https://schoolai.github.io/shipyard")
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: "Internal error: Plan content found but session state missing. Check ~/.shipyard/hook-debug.log and report this issue."
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 ~/.shipyard/server-debug.log for details.",
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 ? "Cannot connect to Shipyard server. Ensure the Shipyard MCP server is running. Check ~/.shipyard/hook-debug.log for details." : `Review system error: ${errorMessage}. Check ~/.shipyard/hook-debug.log for details.`;
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 ~/.shipyard/hook-debug.log for details.`
47147
+ message: `Hook error: ${errorMessage}. Check ${HOOK_LOG_FILE} for details.`
47101
47148
  }
47102
47149
  }
47103
47150
  })