@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.
package/apps/hook/dist/index.cjs
CHANGED
|
@@ -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-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.
|
|
42422
|
-
external_exports.
|
|
42423
|
-
|
|
42424
|
-
|
|
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-
|
|
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.
|
|
549
|
-
z.
|
|
550
|
-
|
|
551
|
-
|
|
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-
|
|
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-
|
|
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)
|
|
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-
|
|
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
|
}
|