@schoolai/shipyard 3.1.0 → 3.1.1-rc.20260415.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/index.js CHANGED
@@ -106,7 +106,7 @@ async function handleSubcommand() {
106
106
  return true;
107
107
  }
108
108
  if (subcommand === "start") {
109
- const { startCommand } = await import("./start-IG5ZGAVH.js");
109
+ const { startCommand } = await import("./start-63XQAT6J.js");
110
110
  await startCommand();
111
111
  return true;
112
112
  }
@@ -118,7 +118,7 @@ async function main() {
118
118
  const args = parseCliArgs();
119
119
  if (args.serve) {
120
120
  await loadAuthFromConfig(env);
121
- const { serve } = await import("./serve-5Z6GSYVH.js");
121
+ const { serve } = await import("./serve-HDRZ2CU6.js");
122
122
  return serve({ isDev: env.SHIPYARD_DEV });
123
123
  }
124
124
  logger.error("Use `shipyard start` to run the daemon. Use --help for usage.");
@@ -24998,6 +24998,10 @@ var PRDataSchema = external_exports.object({
24998
24998
  autoMergeEnabled: external_exports.boolean(),
24999
24999
  headRefSha: external_exports.string().nullable(),
25000
25000
  headCommitInBase: external_exports.boolean().default(false),
25001
+ labels: external_exports.array(external_exports.object({ name: external_exports.string(), color: external_exports.string().default("") })).default([]),
25002
+ assignees: external_exports.array(external_exports.object({ login: external_exports.string(), avatarUrl: external_exports.string().nullable() })).default([]),
25003
+ reviewDecision: external_exports.string().nullable().default(null),
25004
+ mergeable: external_exports.string().nullable().default(null),
25001
25005
  checks: external_exports.array(CICheckSchema),
25002
25006
  reviewers: external_exports.array(PRReviewerSchema),
25003
25007
  comments: external_exports.array(PRCommentSchema)
@@ -25027,6 +25031,26 @@ var PRActionSchema = external_exports.discriminatedUnion("action", [
25027
25031
  action: external_exports.literal("add_reviewers"),
25028
25032
  prNumber: external_exports.number(),
25029
25033
  reviewers: external_exports.array(external_exports.string())
25034
+ }),
25035
+ external_exports.object({
25036
+ action: external_exports.literal("add_labels"),
25037
+ prNumber: external_exports.number(),
25038
+ labels: external_exports.array(external_exports.string())
25039
+ }),
25040
+ external_exports.object({
25041
+ action: external_exports.literal("remove_labels"),
25042
+ prNumber: external_exports.number(),
25043
+ labels: external_exports.array(external_exports.string())
25044
+ }),
25045
+ external_exports.object({
25046
+ action: external_exports.literal("add_assignees"),
25047
+ prNumber: external_exports.number(),
25048
+ assignees: external_exports.array(external_exports.string())
25049
+ }),
25050
+ external_exports.object({
25051
+ action: external_exports.literal("remove_assignees"),
25052
+ prNumber: external_exports.number(),
25053
+ assignees: external_exports.array(external_exports.string())
25030
25054
  })
25031
25055
  ]);
25032
25056
  var WORKFLOW_RUN_STATUSES = [
@@ -28184,7 +28208,7 @@ async function detectModels() {
28184
28208
  }
28185
28209
 
28186
28210
  // src/shared/capabilities/git-pr.ts
28187
- var GH_PR_JSON_FIELDS = "number,title,state,author,url,baseRefName,headRefName,headRefOid,body,isDraft,additions,deletions,changedFiles,createdAt,updatedAt,mergedAt,mergeCommit,mergeStateStatus,autoMergeRequest,statusCheckRollup,reviews,reviewRequests,comments";
28211
+ var GH_PR_JSON_FIELDS = "number,title,state,author,url,baseRefName,headRefName,headRefOid,body,isDraft,additions,deletions,changedFiles,createdAt,updatedAt,mergedAt,mergeCommit,mergeStateStatus,autoMergeRequest,statusCheckRollup,reviews,reviewRequests,comments,labels,assignees,reviewDecision,mergeable";
28188
28212
  var GH_STATE_MAP = {
28189
28213
  OPEN: "open",
28190
28214
  CLOSED: "closed",
@@ -28367,7 +28391,34 @@ function mapGhPRToPRData(raw) {
28367
28391
  const comments = extractArrayOrNodes(raw.comments).map(
28368
28392
  (c) => mapGhComment(toRecord2(c))
28369
28393
  );
28370
- return { ...extractScalarFields(raw), state, isDraft: isDraft2, checks, reviewers, comments };
28394
+ const labels = extractArrayOrNodes(raw.labels).map((l) => {
28395
+ const rec = toRecord2(l);
28396
+ return {
28397
+ name: typeof rec.name === "string" ? rec.name : "",
28398
+ color: typeof rec.color === "string" && rec.color !== "" ? `#${rec.color}` : ""
28399
+ };
28400
+ });
28401
+ const assignees = extractArrayOrNodes(raw.assignees).map((a) => {
28402
+ const rec = toRecord2(a);
28403
+ return {
28404
+ login: extractLogin(rec),
28405
+ avatarUrl: extractStringField(rec, "avatarUrl")
28406
+ };
28407
+ });
28408
+ const reviewDecision = typeof raw.reviewDecision === "string" ? raw.reviewDecision : null;
28409
+ const mergeable = typeof raw.mergeable === "string" ? raw.mergeable : null;
28410
+ return {
28411
+ ...extractScalarFields(raw),
28412
+ state,
28413
+ isDraft: isDraft2,
28414
+ checks,
28415
+ reviewers,
28416
+ comments,
28417
+ labels,
28418
+ assignees,
28419
+ reviewDecision,
28420
+ mergeable
28421
+ };
28371
28422
  }
28372
28423
  async function getPRForCurrentBranch(cwd) {
28373
28424
  try {
@@ -28497,6 +28548,38 @@ async function addReviewers(cwd, prNumber, reviewers) {
28497
28548
  15e3
28498
28549
  );
28499
28550
  }
28551
+ async function addLabels(cwd, prNumber, labels) {
28552
+ await runWithTimeout(
28553
+ "gh",
28554
+ ["pr", "edit", String(prNumber), "--add-label", labels.join(",")],
28555
+ cwd,
28556
+ 15e3
28557
+ );
28558
+ }
28559
+ async function removeLabels(cwd, prNumber, labels) {
28560
+ await runWithTimeout(
28561
+ "gh",
28562
+ ["pr", "edit", String(prNumber), "--remove-label", labels.join(",")],
28563
+ cwd,
28564
+ 15e3
28565
+ );
28566
+ }
28567
+ async function addAssignees(cwd, prNumber, assignees) {
28568
+ await runWithTimeout(
28569
+ "gh",
28570
+ ["pr", "edit", String(prNumber), "--add-assignee", assignees.join(",")],
28571
+ cwd,
28572
+ 15e3
28573
+ );
28574
+ }
28575
+ async function removeAssignees(cwd, prNumber, assignees) {
28576
+ await runWithTimeout(
28577
+ "gh",
28578
+ ["pr", "edit", String(prNumber), "--remove-assignee", assignees.join(",")],
28579
+ cwd,
28580
+ 15e3
28581
+ );
28582
+ }
28500
28583
  async function markPRReady(cwd, prNumber) {
28501
28584
  await runWithTimeout("gh", ["pr", "ready", String(prNumber)], cwd, 15e3);
28502
28585
  }
@@ -29505,7 +29588,7 @@ function nanoid(size2 = 21) {
29505
29588
  }
29506
29589
 
29507
29590
  // src/services/bootstrap/signaling.ts
29508
- var DAEMON_NPM_VERSION = true ? "3.1.0" : "unknown";
29591
+ var DAEMON_NPM_VERSION = true ? "3.1.1" : "unknown";
29509
29592
  function createDaemonSignaling(config2) {
29510
29593
  const agentId = config2.agentId ?? nanoid();
29511
29594
  function send(msg) {
@@ -29752,11 +29835,17 @@ function handleBrowserPreviewChannel(port, send, sendBinary, log, options) {
29752
29835
  mergeCookies(cookieJar, setCookieRaw);
29753
29836
  }
29754
29837
  const responseHeaders = collectResponseHeaders2(res.headers);
29755
- const isHtml = (res.headers["content-type"] ?? "").includes("text/html");
29838
+ const contentType = res.headers["content-type"] ?? "";
29839
+ const isHtml = contentType.includes("text/html");
29840
+ const isRewritableScript = contentType.includes("javascript") || contentType.includes("text/jsx") || contentType.includes("text/tsx") || contentType.includes("text/typescript");
29756
29841
  if (isHtml) {
29757
29842
  bufferAndInjectHtml(requestId, res, responseHeaders);
29758
29843
  return;
29759
29844
  }
29845
+ if (isRewritableScript) {
29846
+ bufferAndRewriteJs(requestId, res, responseHeaders);
29847
+ return;
29848
+ }
29760
29849
  const contentLength = res.headers["content-length"];
29761
29850
  const bodyLength = contentLength !== void 0 ? Number(contentLength) : -1;
29762
29851
  respond({
@@ -29802,6 +29891,29 @@ function handleBrowserPreviewChannel(port, send, sendBinary, log, options) {
29802
29891
  activeRequests.delete(requestId);
29803
29892
  });
29804
29893
  }
29894
+ function bufferAndRewriteJs(requestId, res, headers) {
29895
+ const chunks = [];
29896
+ res.on("data", (chunk) => chunks.push(chunk));
29897
+ res.on("end", () => {
29898
+ const rawJs = Buffer.concat(chunks).toString("utf-8");
29899
+ const rewritten = rewriteJsImportPaths(rawJs);
29900
+ const body = new TextEncoder().encode(rewritten);
29901
+ headers["content-length"] = String(body.byteLength);
29902
+ respond({
29903
+ type: "response-head",
29904
+ id: requestId,
29905
+ status: res.statusCode ?? 500,
29906
+ headers,
29907
+ bodyLength: body.byteLength
29908
+ });
29909
+ sendChunkedBody(requestId, body);
29910
+ activeRequests.delete(requestId);
29911
+ });
29912
+ res.on("error", (err) => {
29913
+ respondError(requestId, err.message);
29914
+ activeRequests.delete(requestId);
29915
+ });
29916
+ }
29805
29917
  function buildRequestHeaders(msgHeaders) {
29806
29918
  const headers = { host: `localhost:${port}` };
29807
29919
  for (const [k2, v2] of Object.entries(msgHeaders)) {
@@ -29907,6 +30019,9 @@ function injectBaseHref(html, origin) {
29907
30019
  function rewriteRootRelativePaths(html) {
29908
30020
  return html.replace(/((?:src|href|action)\s*=\s*["'])\/(?!\/)/gi, "$1./");
29909
30021
  }
30022
+ function rewriteJsImportPaths(js) {
30023
+ return js.replace(/((?:from|import)\s*\(\s*["'])\/(?!\/)/g, "$1./").replace(/(from\s+["'])\/(?!\/)/g, "$1./");
30024
+ }
29910
30025
  function handleBrowserPreviewUrlChannel(send, sendBinary, log, options) {
29911
30026
  const requestTimeoutMs = options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
29912
30027
  const activeControllers = /* @__PURE__ */ new Map();
@@ -29989,10 +30104,19 @@ function handleBrowserPreviewUrlChannel(send, sendBinary, log, options) {
29989
30104
  });
29990
30105
  const responseHeaders = collectSafeResponseHeaders(res);
29991
30106
  const rawBody = new Uint8Array(await res.arrayBuffer());
29992
- const isHtml = (res.headers.get("content-type") ?? "").includes("text/html");
29993
- const body = isHtml ? new TextEncoder().encode(
29994
- injectBaseHref(new TextDecoder().decode(rawBody), targetUrl.origin)
29995
- ) : rawBody;
30107
+ const contentType = res.headers.get("content-type") ?? "";
30108
+ const isHtml = contentType.includes("text/html");
30109
+ const isJs = contentType.includes("javascript") || contentType.includes("text/jsx") || contentType.includes("text/tsx") || contentType.includes("text/typescript");
30110
+ let body;
30111
+ if (isHtml) {
30112
+ body = new TextEncoder().encode(
30113
+ injectBaseHref(new TextDecoder().decode(rawBody), targetUrl.origin)
30114
+ );
30115
+ } else if (isJs) {
30116
+ body = new TextEncoder().encode(rewriteJsImportPaths(new TextDecoder().decode(rawBody)));
30117
+ } else {
30118
+ body = rawBody;
30119
+ }
29996
30120
  sendResponseWithBody(msg.id, res.status, responseHeaders, body);
29997
30121
  }
29998
30122
  async function handleUrlRequest(msg) {
@@ -86843,6 +86967,18 @@ function wireControlChannel(rawChannel, daemon, logAdapter, deps) {
86843
86967
  case "add_reviewers":
86844
86968
  await addReviewers(cwd, action.prNumber, action.reviewers);
86845
86969
  break;
86970
+ case "add_labels":
86971
+ await addLabels(cwd, action.prNumber, action.labels);
86972
+ break;
86973
+ case "remove_labels":
86974
+ await removeLabels(cwd, action.prNumber, action.labels);
86975
+ break;
86976
+ case "add_assignees":
86977
+ await addAssignees(cwd, action.prNumber, action.assignees);
86978
+ break;
86979
+ case "remove_assignees":
86980
+ await removeAssignees(cwd, action.prNumber, action.assignees);
86981
+ break;
86846
86982
  case "reply_to_comment":
86847
86983
  case "resolve_thread":
86848
86984
  throw new Error(`${action.action} not yet implemented`);
@@ -91560,4 +91696,4 @@ export {
91560
91696
  classifyLogLevel,
91561
91697
  serve
91562
91698
  };
91563
- //# sourceMappingURL=serve-5Z6GSYVH.js.map
91699
+ //# sourceMappingURL=serve-HDRZ2CU6.js.map