@schoolai/shipyard-mcp 0.3.2-next.545 → 0.3.2-rc.20260126

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.
@@ -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-Dr9oWyS2.mjs
28494
+ // ../../packages/schema/dist/yjs-helpers-CmikQBE7.mjs
28495
28495
  init_cjs_shims();
28496
28496
 
28497
28497
  // ../../packages/schema/dist/plan.mjs
@@ -42418,28 +42418,10 @@ var PlanEventBaseSchema = external_exports.object({
42418
42418
  inboxWorthy: external_exports.boolean().optional(),
42419
42419
  inboxFor: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional()
42420
42420
  });
42421
- var AgentActivityDataSchema = external_exports.discriminatedUnion("activityType", [
42422
- external_exports.object({
42423
- activityType: external_exports.literal("help_request"),
42424
- requestId: external_exports.string(),
42425
- message: external_exports.string()
42426
- }),
42427
- external_exports.object({
42428
- activityType: external_exports.literal("help_request_resolved"),
42429
- requestId: external_exports.string(),
42430
- resolution: external_exports.string().optional()
42431
- }),
42432
- external_exports.object({
42433
- activityType: external_exports.literal("blocker"),
42434
- message: external_exports.string(),
42435
- requestId: external_exports.string()
42436
- }),
42437
- external_exports.object({
42438
- activityType: external_exports.literal("blocker_resolved"),
42439
- requestId: external_exports.string(),
42440
- resolution: external_exports.string().optional()
42441
- })
42442
- ]);
42421
+ var AgentActivityDataSchema = external_exports.object({
42422
+ activityType: external_exports.literal("update"),
42423
+ message: external_exports.string()
42424
+ });
42443
42425
  var PlanEventSchema = external_exports.discriminatedUnion("type", [
42444
42426
  PlanEventBaseSchema.extend({ type: external_exports.enum([
42445
42427
  "plan_created",
@@ -42724,7 +42706,7 @@ var LocalArtifactParseSchema = external_exports.object({
42724
42706
  localArtifactId: external_exports.string()
42725
42707
  });
42726
42708
 
42727
- // ../../packages/schema/dist/yjs-helpers-Dr9oWyS2.mjs
42709
+ // ../../packages/schema/dist/yjs-helpers-CmikQBE7.mjs
42728
42710
  function assertNever2(value) {
42729
42711
  throw new Error(`Unhandled discriminated union member: ${JSON.stringify(value)}`);
42730
42712
  }
@@ -42745,6 +42727,7 @@ var ChangeSnapshotSchema = external_exports.object({
42745
42727
  ownerId: external_exports.string(),
42746
42728
  headSha: external_exports.string(),
42747
42729
  branch: external_exports.string(),
42730
+ cwd: external_exports.string(),
42748
42731
  isLive: external_exports.boolean(),
42749
42732
  updatedAt: external_exports.number(),
42750
42733
  files: external_exports.array(SyncedFileChangeSchema),
@@ -44326,6 +44309,7 @@ var TOOL_NAMES = {
44326
44309
  CREATE_TASK: "create_task",
44327
44310
  EXECUTE_CODE: "execute_code",
44328
44311
  LINK_PR: "link_pr",
44312
+ POST_UPDATE: "post_update",
44329
44313
  READ_DIFF_COMMENTS: "read_diff_comments",
44330
44314
  READ_TASK: "read_task",
44331
44315
  REGENERATE_SESSION_TOKEN: "regenerate_session_token",
@@ -44381,7 +44365,8 @@ var ImportConversationResponseSchema = external_exports.discriminatedUnion("succ
44381
44365
  var MachineInfoResponseSchema = external_exports.object({
44382
44366
  machineId: external_exports.string(),
44383
44367
  machineName: external_exports.string(),
44384
- ownerId: external_exports.string()
44368
+ ownerId: external_exports.string(),
44369
+ cwd: external_exports.string()
44385
44370
  });
44386
44371
  var t = initTRPC.context().create({ allowOutsideOfServer: true });
44387
44372
  var router = t.router;
@@ -44537,6 +44522,7 @@ var TOOL_NAMES2 = {
44537
44522
  CREATE_TASK: "create_task",
44538
44523
  EXECUTE_CODE: "execute_code",
44539
44524
  LINK_PR: "link_pr",
44525
+ POST_UPDATE: "post_update",
44540
44526
  READ_DIFF_COMMENTS: "read_diff_comments",
44541
44527
  READ_TASK: "read_task",
44542
44528
  REGENERATE_SESSION_TOKEN: "regenerate_session_token",
@@ -44774,6 +44760,25 @@ await addArtifact({
44774
44760
  \`\`\`
44775
44761
 
44776
44762
  When the last deliverable gets an artifact, the task auto-completes and returns a snapshot URL.`;
44763
+ var POSTING_UPDATES_SECTION = `## Posting Progress Updates
44764
+
44765
+ For long-running tasks, keep reviewers informed with periodic updates:
44766
+
44767
+ \`\`\`typescript
44768
+ await postUpdate({
44769
+ taskId,
44770
+ sessionToken,
44771
+ message: "Starting work on authentication module"
44772
+ });
44773
+ \`\`\`
44774
+
44775
+ **When to post updates:**
44776
+ - After completing a significant milestone
44777
+ - When switching focus to a different part of the task
44778
+ - If you've been working for a while without visible output
44779
+ - When you encounter something interesting or unexpected
44780
+
44781
+ Think about what a human watching your work would want to know.`;
44777
44782
  var IMPORTANT_NOTES = `## Important Notes for Claude Code
44778
44783
 
44779
44784
  - **DO NOT call \`createTask()\` directly** - The hook handles task creation when you enter task mode
@@ -44790,6 +44795,8 @@ var CLAUDE_CODE_INSTRUCTIONS = [
44790
44795
  "",
44791
44796
  TASK_MODE_WORKFLOW,
44792
44797
  "",
44798
+ POSTING_UPDATES_SECTION,
44799
+ "",
44793
44800
  DELIVERABLES_SECTION,
44794
44801
  "",
44795
44802
  ARTIFACT_TYPES_SECTION,
@@ -545,28 +545,10 @@ var PlanEventBaseSchema = z.object({
545
545
  inboxWorthy: z.boolean().optional(),
546
546
  inboxFor: z.union([z.string(), z.array(z.string())]).optional()
547
547
  });
548
- var AgentActivityDataSchema = z.discriminatedUnion("activityType", [
549
- z.object({
550
- activityType: z.literal("help_request"),
551
- requestId: z.string(),
552
- message: z.string()
553
- }),
554
- z.object({
555
- activityType: z.literal("help_request_resolved"),
556
- requestId: z.string(),
557
- resolution: z.string().optional()
558
- }),
559
- z.object({
560
- activityType: z.literal("blocker"),
561
- message: z.string(),
562
- requestId: z.string()
563
- }),
564
- z.object({
565
- activityType: z.literal("blocker_resolved"),
566
- requestId: z.string(),
567
- resolution: z.string().optional()
568
- })
569
- ]);
548
+ var AgentActivityDataSchema = z.object({
549
+ activityType: z.literal("update"),
550
+ message: z.string()
551
+ });
570
552
  var PlanEventSchema = z.discriminatedUnion("type", [
571
553
  PlanEventBaseSchema.extend({ type: z.enum([
572
554
  "plan_created",
@@ -865,7 +847,7 @@ function createInitialConversationVersion(params) {
865
847
  return ConversationVersionSchema.parse(version);
866
848
  }
867
849
 
868
- // ../../packages/schema/dist/yjs-helpers-Dr9oWyS2.mjs
850
+ // ../../packages/schema/dist/yjs-helpers-CmikQBE7.mjs
869
851
  import { z as z2 } from "zod";
870
852
  import { nanoid as nanoid2 } from "nanoid";
871
853
  import * as Y from "yjs";
@@ -889,6 +871,7 @@ var ChangeSnapshotSchema = z2.object({
889
871
  ownerId: z2.string(),
890
872
  headSha: z2.string(),
891
873
  branch: z2.string(),
874
+ cwd: z2.string(),
892
875
  isLive: z2.boolean(),
893
876
  updatedAt: z2.number(),
894
877
  files: z2.array(SyncedFileChangeSchema),
@@ -2474,6 +2457,7 @@ var TOOL_NAMES = {
2474
2457
  CREATE_TASK: "create_task",
2475
2458
  EXECUTE_CODE: "execute_code",
2476
2459
  LINK_PR: "link_pr",
2460
+ POST_UPDATE: "post_update",
2477
2461
  READ_DIFF_COMMENTS: "read_diff_comments",
2478
2462
  READ_TASK: "read_task",
2479
2463
  REGENERATE_SESSION_TOKEN: "regenerate_session_token",
@@ -2529,7 +2513,8 @@ var ImportConversationResponseSchema = z4.discriminatedUnion("success", [z4.obje
2529
2513
  var MachineInfoResponseSchema = z4.object({
2530
2514
  machineId: z4.string(),
2531
2515
  machineName: z4.string(),
2532
- ownerId: z4.string()
2516
+ ownerId: z4.string(),
2517
+ cwd: z4.string()
2533
2518
  });
2534
2519
  var t = initTRPC.context().create({ allowOutsideOfServer: true });
2535
2520
  var router = t.router;
@@ -5498,7 +5483,8 @@ function createContext() {
5498
5483
  getMachineInfo: async () => ({
5499
5484
  machineId: getMachineId(),
5500
5485
  machineName: getMachineName(),
5501
- ownerId: await getGitHubUsername()
5486
+ ownerId: await getGitHubUsername(),
5487
+ cwd: process.cwd()
5502
5488
  })
5503
5489
  };
5504
5490
  }
@@ -59,7 +59,7 @@ import {
59
59
  tryAcquireHubLock,
60
60
  uploadArtifact,
61
61
  webConfig
62
- } from "./chunk-UN2EIC2Y.js";
62
+ } from "./chunk-6EWQC5VA.js";
63
63
  import {
64
64
  logger
65
65
  } from "./chunk-HFZCBGQ3.js";
@@ -972,7 +972,9 @@ var CreateTaskInput = z4.object({
972
972
  tags: z4.array(z4.string()).optional().describe('Tags for categorization (e.g., ["ui", "bug", "project:mobile-app"])')
973
973
  });
974
974
  function buildOriginMetadata(platform, sessionId, metadata) {
975
- if (!platform || !sessionId) return void 0;
975
+ if (!platform || !sessionId) {
976
+ return { platform: "unknown", cwd: process.cwd() };
977
+ }
976
978
  switch (platform) {
977
979
  case "devin":
978
980
  return { platform: "devin", sessionId };
@@ -3269,7 +3271,7 @@ async function setupReviewNotification(taskId, pollIntervalSeconds) {
3269
3271
  return { script, fullResponse: text };
3270
3272
  }
3271
3273
  async function requestUserInput(opts) {
3272
- const { InputRequestManager } = await import("./input-request-manager-SGOTLMNW.js");
3274
+ const { InputRequestManager } = await import("./input-request-manager-QT4IVCLS.js");
3273
3275
  const ydoc = await getOrCreateDoc(PLAN_INDEX_DOC_NAME);
3274
3276
  const manager = new InputRequestManager();
3275
3277
  if ("questions" in opts && opts.questions) {
@@ -3536,6 +3538,61 @@ The script will exit when the human approves or requests changes.`
3536
3538
  }
3537
3539
  };
3538
3540
 
3541
+ // src/tools/post-update.ts
3542
+ import { z as z13 } from "zod";
3543
+ var PostUpdateInput = z13.object({
3544
+ taskId: z13.string().describe("The task ID"),
3545
+ sessionToken: z13.string().describe("Session token from plan approval"),
3546
+ message: z13.string().describe("Update content (markdown)")
3547
+ });
3548
+ function errorResponse2(message) {
3549
+ return { content: [{ type: "text", text: message }], isError: true };
3550
+ }
3551
+ function successResponse2(message) {
3552
+ return { content: [{ type: "text", text: message }] };
3553
+ }
3554
+ var postUpdateTool = {
3555
+ definition: {
3556
+ name: TOOL_NAMES.POST_UPDATE,
3557
+ description: `Post a progress update to the task timeline.
3558
+
3559
+ Use this to communicate status updates to humans watching your work:
3560
+ - "Starting work on authentication module"
3561
+ - "Milestone: API integration complete"
3562
+ - "Found edge case with rate limiting, investigating"
3563
+
3564
+ Updates appear in the Activity tab and keep reviewers informed.`,
3565
+ inputSchema: {
3566
+ type: "object",
3567
+ properties: {
3568
+ taskId: { type: "string", description: "The task ID" },
3569
+ sessionToken: { type: "string", description: "Session token from plan approval" },
3570
+ message: { type: "string", description: "Update content (markdown supported)" }
3571
+ },
3572
+ required: ["taskId", "sessionToken", "message"]
3573
+ }
3574
+ },
3575
+ handler: async (args) => {
3576
+ const input = PostUpdateInput.parse(args);
3577
+ const { taskId, sessionToken, message } = input;
3578
+ const doc = await getOrCreateDoc(taskId);
3579
+ const metadata = getPlanMetadata(doc);
3580
+ if (!metadata) {
3581
+ return errorResponse2(`Task "${taskId}" not found.`);
3582
+ }
3583
+ if (!metadata.sessionTokenHash || !verifySessionToken(sessionToken, metadata.sessionTokenHash)) {
3584
+ return errorResponse2(`Invalid session token for task "${taskId}".`);
3585
+ }
3586
+ const actorName = await getGitHubUsername();
3587
+ const eventId = logPlanEvent(doc, "agent_activity", actorName, {
3588
+ activityType: "update",
3589
+ message
3590
+ });
3591
+ logger.info({ taskId, eventId, messageLength: message.length }, "Agent update posted");
3592
+ return successResponse2(`Update posted to task "${taskId}".`);
3593
+ }
3594
+ };
3595
+
3539
3596
  // src/index.ts
3540
3597
  var registryPort = await isRegistryRunning();
3541
3598
  if (!registryPort) {
@@ -3580,13 +3637,16 @@ var server = new Server(
3580
3637
  }
3581
3638
  );
3582
3639
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
3583
- tools: [executeCodeTool.definition, readDiffCommentsTool.definition]
3640
+ tools: [executeCodeTool.definition, postUpdateTool.definition, readDiffCommentsTool.definition]
3584
3641
  }));
3585
3642
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
3586
3643
  const { name, arguments: args } = request.params;
3587
3644
  if (name === TOOL_NAMES.EXECUTE_CODE) {
3588
3645
  return await executeCodeTool.handler(args ?? {});
3589
3646
  }
3647
+ if (name === TOOL_NAMES.POST_UPDATE) {
3648
+ return await postUpdateTool.handler(args ?? {});
3649
+ }
3590
3650
  if (name === TOOL_NAMES.READ_DIFF_COMMENTS) {
3591
3651
  return await readDiffCommentsTool.handler(args ?? {});
3592
3652
  }
@@ -5,7 +5,7 @@ import {
5
5
  createMultiQuestionInputRequest,
6
6
  getOrCreateDoc,
7
7
  logPlanEvent
8
- } from "./chunk-UN2EIC2Y.js";
8
+ } from "./chunk-6EWQC5VA.js";
9
9
  import {
10
10
  logger
11
11
  } from "./chunk-HFZCBGQ3.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schoolai/shipyard-mcp",
3
- "version": "0.3.2-next.545",
3
+ "version": "0.3.2-rc.20260126",
4
4
  "description": "Shipyard MCP server and CLI tools for distributed planning with CRDTs",
5
5
  "type": "module",
6
6
  "bin": {