@schoolai/shipyard-mcp 0.1.3-next.466 → 0.1.3-next.467
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.js +2 -2
- package/apps/server/dist/{chunk-75NZRAN5.js → chunk-76JWRTPI.js} +26 -1
- package/apps/server/dist/{chunk-MZTJGBLT.js → chunk-BWP37ADP.js} +1 -1
- package/apps/server/dist/{dist-HIDISXZO.js → dist-ORKL4P3L.js} +3 -1
- package/apps/server/dist/index.js +87 -14
- package/apps/server/dist/{input-request-manager-43QSOJS3.js → input-request-manager-73GSTOIB.js} +2 -2
- package/package.json +1 -1
package/apps/hook/dist/index.js
CHANGED
|
@@ -28494,7 +28494,7 @@ init_cjs_shims();
|
|
|
28494
28494
|
// ../../packages/schema/dist/index.mjs
|
|
28495
28495
|
init_cjs_shims();
|
|
28496
28496
|
|
|
28497
|
-
// ../../packages/schema/dist/yjs-helpers-
|
|
28497
|
+
// ../../packages/schema/dist/yjs-helpers-BBG4tC2R.mjs
|
|
28498
28498
|
init_cjs_shims();
|
|
28499
28499
|
|
|
28500
28500
|
// ../../packages/schema/dist/plan.mjs
|
|
@@ -42665,7 +42665,7 @@ var PRReviewCommentSchema = external_exports.object({
|
|
|
42665
42665
|
resolved: external_exports.boolean().optional()
|
|
42666
42666
|
});
|
|
42667
42667
|
|
|
42668
|
-
// ../../packages/schema/dist/yjs-helpers-
|
|
42668
|
+
// ../../packages/schema/dist/yjs-helpers-BBG4tC2R.mjs
|
|
42669
42669
|
function assertNever2(value) {
|
|
42670
42670
|
throw new Error(`Unhandled discriminated union member: ${JSON.stringify(value)}`);
|
|
42671
42671
|
}
|
|
@@ -863,7 +863,7 @@ function createHandedOffConversationVersion(params) {
|
|
|
863
863
|
return ConversationVersionSchema.parse(version);
|
|
864
864
|
}
|
|
865
865
|
|
|
866
|
-
// ../../packages/schema/dist/yjs-helpers-
|
|
866
|
+
// ../../packages/schema/dist/yjs-helpers-BBG4tC2R.mjs
|
|
867
867
|
import { z as z2 } from "zod";
|
|
868
868
|
import { nanoid as nanoid2 } from "nanoid";
|
|
869
869
|
import * as Y from "yjs";
|
|
@@ -1176,6 +1176,30 @@ function applyStatusTransitionFields(map, transition) {
|
|
|
1176
1176
|
assertNever(transition);
|
|
1177
1177
|
}
|
|
1178
1178
|
}
|
|
1179
|
+
function resetPlanToDraft(ydoc, actor) {
|
|
1180
|
+
const metadataResult = getPlanMetadataWithValidation(ydoc);
|
|
1181
|
+
if (!metadataResult.success) return {
|
|
1182
|
+
success: false,
|
|
1183
|
+
error: metadataResult.error
|
|
1184
|
+
};
|
|
1185
|
+
if (metadataResult.data.status === "draft") return {
|
|
1186
|
+
success: false,
|
|
1187
|
+
error: "Plan is already in draft status"
|
|
1188
|
+
};
|
|
1189
|
+
ydoc.transact(() => {
|
|
1190
|
+
const map = ydoc.getMap(YDOC_KEYS.METADATA);
|
|
1191
|
+
map.set("status", "draft");
|
|
1192
|
+
map.delete("reviewRequestId");
|
|
1193
|
+
map.delete("reviewedAt");
|
|
1194
|
+
map.delete("reviewedBy");
|
|
1195
|
+
map.delete("reviewComment");
|
|
1196
|
+
map.delete("completedAt");
|
|
1197
|
+
map.delete("completedBy");
|
|
1198
|
+
map.delete("snapshotUrl");
|
|
1199
|
+
map.set("updatedAt", Date.now());
|
|
1200
|
+
}, actor ? { actor } : void 0);
|
|
1201
|
+
return { success: true };
|
|
1202
|
+
}
|
|
1179
1203
|
function transitionPlanStatus(ydoc, transition, actor) {
|
|
1180
1204
|
const metadataResult = getPlanMetadataWithValidation(ydoc);
|
|
1181
1205
|
if (!metadataResult.success) return {
|
|
@@ -2816,6 +2840,7 @@ export {
|
|
|
2816
2840
|
getPlanMetadata,
|
|
2817
2841
|
getPlanMetadataWithValidation,
|
|
2818
2842
|
setPlanMetadata,
|
|
2843
|
+
resetPlanToDraft,
|
|
2819
2844
|
transitionPlanStatus,
|
|
2820
2845
|
initPlanMetadata,
|
|
2821
2846
|
getStepCompletions,
|
|
@@ -187,6 +187,7 @@ import {
|
|
|
187
187
|
removePlanIndexEntry,
|
|
188
188
|
removePlanTag,
|
|
189
189
|
removeViewedByFromIndex,
|
|
190
|
+
resetPlanToDraft,
|
|
190
191
|
resolvePRReviewComment,
|
|
191
192
|
revokeUser,
|
|
192
193
|
setAgentPresence,
|
|
@@ -203,7 +204,7 @@ import {
|
|
|
203
204
|
updateLinkedPRStatus,
|
|
204
205
|
updatePlanIndexViewedBy,
|
|
205
206
|
validateA2AMessages
|
|
206
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-76JWRTPI.js";
|
|
207
208
|
import "./chunk-JSBRDJBE.js";
|
|
208
209
|
export {
|
|
209
210
|
A2ADataPartSchema,
|
|
@@ -394,6 +395,7 @@ export {
|
|
|
394
395
|
removePlanIndexEntry,
|
|
395
396
|
removePlanTag,
|
|
396
397
|
removeViewedByFromIndex,
|
|
398
|
+
resetPlanToDraft,
|
|
397
399
|
resolvePRReviewComment,
|
|
398
400
|
revokeUser,
|
|
399
401
|
setAgentPresence,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-EBNL5ZX7.js";
|
|
20
20
|
import {
|
|
21
21
|
InputRequestManager
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-BWP37ADP.js";
|
|
23
23
|
import {
|
|
24
24
|
ArtifactSchema,
|
|
25
25
|
DeliverableSchema,
|
|
@@ -63,12 +63,13 @@ import {
|
|
|
63
63
|
logPlanEvent,
|
|
64
64
|
parseClaudeCodeOrigin,
|
|
65
65
|
parseThreads,
|
|
66
|
+
resetPlanToDraft,
|
|
66
67
|
setAgentPresence,
|
|
67
68
|
setPlanIndexEntry,
|
|
68
69
|
setPlanMetadata,
|
|
69
70
|
touchPlanIndexEntry,
|
|
70
71
|
transitionPlanStatus
|
|
71
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-76JWRTPI.js";
|
|
72
73
|
import {
|
|
73
74
|
loadEnv,
|
|
74
75
|
logger
|
|
@@ -4539,7 +4540,40 @@ async function applyOperation(blocks, operation, editor) {
|
|
|
4539
4540
|
|
|
4540
4541
|
// src/tools/update-plan.ts
|
|
4541
4542
|
import { ServerBlockNoteEditor as ServerBlockNoteEditor7 } from "@blocknote/server-util";
|
|
4543
|
+
import { nanoid as nanoid7 } from "nanoid";
|
|
4542
4544
|
import { z as z11 } from "zod";
|
|
4545
|
+
function buildStatusTransition(targetStatus, actorName) {
|
|
4546
|
+
const now = Date.now();
|
|
4547
|
+
switch (targetStatus) {
|
|
4548
|
+
case "pending_review":
|
|
4549
|
+
return {
|
|
4550
|
+
status: "pending_review",
|
|
4551
|
+
reviewRequestId: nanoid7()
|
|
4552
|
+
};
|
|
4553
|
+
case "changes_requested":
|
|
4554
|
+
return {
|
|
4555
|
+
status: "changes_requested",
|
|
4556
|
+
reviewedAt: now,
|
|
4557
|
+
reviewedBy: actorName
|
|
4558
|
+
};
|
|
4559
|
+
case "in_progress":
|
|
4560
|
+
return {
|
|
4561
|
+
status: "in_progress",
|
|
4562
|
+
reviewedAt: now,
|
|
4563
|
+
reviewedBy: actorName
|
|
4564
|
+
};
|
|
4565
|
+
case "completed":
|
|
4566
|
+
return {
|
|
4567
|
+
status: "completed",
|
|
4568
|
+
completedAt: now,
|
|
4569
|
+
completedBy: actorName
|
|
4570
|
+
};
|
|
4571
|
+
case "draft":
|
|
4572
|
+
return null;
|
|
4573
|
+
default:
|
|
4574
|
+
return null;
|
|
4575
|
+
}
|
|
4576
|
+
}
|
|
4543
4577
|
var UpdatePlanInput = z11.object({
|
|
4544
4578
|
planId: z11.string().describe("The plan ID to update"),
|
|
4545
4579
|
sessionToken: z11.string().describe("Session token from create_plan"),
|
|
@@ -4589,6 +4623,7 @@ STATUSES:
|
|
|
4589
4623
|
required: ["planId", "sessionToken"]
|
|
4590
4624
|
}
|
|
4591
4625
|
},
|
|
4626
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: tool handler orchestrates validation, snapshots, and state transitions
|
|
4592
4627
|
handler: async (args) => {
|
|
4593
4628
|
const input = UpdatePlanInput.parse(args);
|
|
4594
4629
|
const doc = await getOrCreateDoc3(input.planId);
|
|
@@ -4616,12 +4651,6 @@ STATUSES:
|
|
|
4616
4651
|
isError: true
|
|
4617
4652
|
};
|
|
4618
4653
|
}
|
|
4619
|
-
const updates = {
|
|
4620
|
-
updatedAt: Date.now()
|
|
4621
|
-
};
|
|
4622
|
-
if (input.title) updates.title = input.title;
|
|
4623
|
-
if (input.status) updates.status = input.status;
|
|
4624
|
-
if (input.tags !== void 0) updates.tags = input.tags;
|
|
4625
4654
|
const statusChanged = input.status && input.status !== existingMetadata.status;
|
|
4626
4655
|
if (statusChanged && input.status) {
|
|
4627
4656
|
const editor = ServerBlockNoteEditor7.create();
|
|
@@ -4630,8 +4659,52 @@ STATUSES:
|
|
|
4630
4659
|
const reason = `Status changed to ${input.status}`;
|
|
4631
4660
|
const snapshot = createPlanSnapshot(doc, reason, actorName, input.status, blocks);
|
|
4632
4661
|
addSnapshot(doc, snapshot);
|
|
4662
|
+
if (input.status === "draft") {
|
|
4663
|
+
const resetResult = resetPlanToDraft(doc, actorName);
|
|
4664
|
+
if (!resetResult.success) {
|
|
4665
|
+
return {
|
|
4666
|
+
content: [
|
|
4667
|
+
{
|
|
4668
|
+
type: "text",
|
|
4669
|
+
text: `Failed to reset plan to draft: ${resetResult.error}`
|
|
4670
|
+
}
|
|
4671
|
+
],
|
|
4672
|
+
isError: true
|
|
4673
|
+
};
|
|
4674
|
+
}
|
|
4675
|
+
} else {
|
|
4676
|
+
const transition = buildStatusTransition(input.status, actorName);
|
|
4677
|
+
if (!transition) {
|
|
4678
|
+
return {
|
|
4679
|
+
content: [
|
|
4680
|
+
{
|
|
4681
|
+
type: "text",
|
|
4682
|
+
text: `Invalid status: ${input.status}`
|
|
4683
|
+
}
|
|
4684
|
+
],
|
|
4685
|
+
isError: true
|
|
4686
|
+
};
|
|
4687
|
+
}
|
|
4688
|
+
const transitionResult = transitionPlanStatus(doc, transition, actorName);
|
|
4689
|
+
if (!transitionResult.success) {
|
|
4690
|
+
return {
|
|
4691
|
+
content: [
|
|
4692
|
+
{
|
|
4693
|
+
type: "text",
|
|
4694
|
+
text: `Failed to transition status: ${transitionResult.error}`
|
|
4695
|
+
}
|
|
4696
|
+
],
|
|
4697
|
+
isError: true
|
|
4698
|
+
};
|
|
4699
|
+
}
|
|
4700
|
+
}
|
|
4701
|
+
}
|
|
4702
|
+
const updates = {};
|
|
4703
|
+
if (input.title) updates.title = input.title;
|
|
4704
|
+
if (input.tags !== void 0) updates.tags = input.tags;
|
|
4705
|
+
if (Object.keys(updates).length > 0) {
|
|
4706
|
+
setPlanMetadata(doc, updates, actorName);
|
|
4633
4707
|
}
|
|
4634
|
-
setPlanMetadata(doc, updates, actorName);
|
|
4635
4708
|
const indexDoc = await getOrCreateDoc3(PLAN_INDEX_DOC_NAME);
|
|
4636
4709
|
if (existingMetadata.ownerId) {
|
|
4637
4710
|
setPlanIndexEntry(indexDoc, {
|
|
@@ -5148,7 +5221,7 @@ async function setupReviewNotification(planId, pollIntervalSeconds) {
|
|
|
5148
5221
|
return { script, fullResponse: text };
|
|
5149
5222
|
}
|
|
5150
5223
|
async function requestUserInput(opts) {
|
|
5151
|
-
const { InputRequestManager: InputRequestManager2 } = await import("./input-request-manager-
|
|
5224
|
+
const { InputRequestManager: InputRequestManager2 } = await import("./input-request-manager-73GSTOIB.js");
|
|
5152
5225
|
const ydoc = await getOrCreateDoc3(PLAN_INDEX_DOC_NAME);
|
|
5153
5226
|
const manager = new InputRequestManager2();
|
|
5154
5227
|
const params = opts.type === "choice" ? {
|
|
@@ -5192,12 +5265,12 @@ async function requestUserInput(opts) {
|
|
|
5192
5265
|
};
|
|
5193
5266
|
}
|
|
5194
5267
|
async function postActivityUpdate(opts) {
|
|
5195
|
-
const { logPlanEvent: logPlanEvent2 } = await import("./dist-
|
|
5268
|
+
const { logPlanEvent: logPlanEvent2 } = await import("./dist-ORKL4P3L.js");
|
|
5196
5269
|
const { getGitHubUsername: getGitHubUsername2 } = await import("./server-identity-6PHKR2FY.js");
|
|
5197
|
-
const { nanoid:
|
|
5270
|
+
const { nanoid: nanoid8 } = await import("nanoid");
|
|
5198
5271
|
const doc = await getOrCreateDoc3(opts.planId);
|
|
5199
5272
|
const actorName = await getGitHubUsername2();
|
|
5200
|
-
const requestId =
|
|
5273
|
+
const requestId = nanoid8();
|
|
5201
5274
|
const eventId = logPlanEvent2(
|
|
5202
5275
|
doc,
|
|
5203
5276
|
"agent_activity",
|
|
@@ -5215,7 +5288,7 @@ async function postActivityUpdate(opts) {
|
|
|
5215
5288
|
return { success: true, eventId, requestId };
|
|
5216
5289
|
}
|
|
5217
5290
|
async function resolveActivityRequest(opts) {
|
|
5218
|
-
const { logPlanEvent: logPlanEvent2, getPlanEvents } = await import("./dist-
|
|
5291
|
+
const { logPlanEvent: logPlanEvent2, getPlanEvents } = await import("./dist-ORKL4P3L.js");
|
|
5219
5292
|
const { getGitHubUsername: getGitHubUsername2 } = await import("./server-identity-6PHKR2FY.js");
|
|
5220
5293
|
const doc = await getOrCreateDoc3(opts.planId);
|
|
5221
5294
|
const actorName = await getGitHubUsername2();
|