@schoolai/shipyard 3.29.0 → 3.30.0-rc.20260912.1

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.
Files changed (39) hide show
  1. package/dist/capability-detector-worker.js +5 -5
  2. package/dist/{chunk-HIGCNT53.js → chunk-FARMJBC7.js} +3 -3
  3. package/dist/chunk-FARMJBC7.js.map +1 -0
  4. package/dist/{chunk-AIN32UWK.js → chunk-FWL2ZIEL.js} +31 -2
  5. package/dist/chunk-FWL2ZIEL.js.map +1 -0
  6. package/dist/{chunk-IJGA4YA3.js → chunk-JQFAXWT5.js} +3 -3
  7. package/dist/chunk-JQFAXWT5.js.map +1 -0
  8. package/dist/{chunk-ASK7AIJM.js → chunk-KFCIZHQW.js} +15 -3
  9. package/dist/{chunk-ASK7AIJM.js.map → chunk-KFCIZHQW.js.map} +1 -1
  10. package/dist/{chunk-3NS2YSRP.js → chunk-NNNYGFSQ.js} +35 -8
  11. package/dist/{chunk-3NS2YSRP.js.map → chunk-NNNYGFSQ.js.map} +1 -1
  12. package/dist/{chunk-SR3T3EYE.js → chunk-RGVTFZDF.js} +3 -3
  13. package/dist/{chunk-SMGVXANE.js → chunk-SGFCXJJJ.js} +2 -2
  14. package/dist/{chunk-CDOIPKD6.js → chunk-VE2ZAUIM.js} +2 -2
  15. package/dist/{chunk-J5MLXWO5.js → chunk-WO5EM3BP.js} +2 -2
  16. package/dist/{chunk-CB35TLO4.js → chunk-ZDJEJI62.js} +2 -2
  17. package/dist/cursor-runner.js +81 -47
  18. package/dist/cursor-runner.js.map +1 -1
  19. package/dist/electron-utility.js +2 -2
  20. package/dist/index.js +4 -4
  21. package/dist/{login-D23INMXJ.js → login-6YTDDUP4.js} +3 -3
  22. package/dist/{plan-backfill-7OALHIQK.js → plan-backfill-5UGECNV6.js} +4 -4
  23. package/dist/{serve-VBMV5LEN.js → serve-ZMQ2HHQQ.js} +2433 -1210
  24. package/dist/{serve-VBMV5LEN.js.map → serve-ZMQ2HHQQ.js.map} +1 -1
  25. package/dist/{skills-FSYFQ6FY.js → skills-BX2NZKPN.js} +3 -3
  26. package/dist/{start-NNW7R4M2.js → start-E24NNOMX.js} +6 -6
  27. package/package.json +1 -1
  28. package/dist/chunk-AIN32UWK.js.map +0 -1
  29. package/dist/chunk-HIGCNT53.js.map +0 -1
  30. package/dist/chunk-IJGA4YA3.js.map +0 -1
  31. /package/dist/{chunk-SR3T3EYE.js.map → chunk-RGVTFZDF.js.map} +0 -0
  32. /package/dist/{chunk-SMGVXANE.js.map → chunk-SGFCXJJJ.js.map} +0 -0
  33. /package/dist/{chunk-CDOIPKD6.js.map → chunk-VE2ZAUIM.js.map} +0 -0
  34. /package/dist/{chunk-J5MLXWO5.js.map → chunk-WO5EM3BP.js.map} +0 -0
  35. /package/dist/{chunk-CB35TLO4.js.map → chunk-ZDJEJI62.js.map} +0 -0
  36. /package/dist/{login-D23INMXJ.js.map → login-6YTDDUP4.js.map} +0 -0
  37. /package/dist/{plan-backfill-7OALHIQK.js.map → plan-backfill-5UGECNV6.js.map} +0 -0
  38. /package/dist/{skills-FSYFQ6FY.js.map → skills-BX2NZKPN.js.map} +0 -0
  39. /package/dist/{start-NNW7R4M2.js.map → start-E24NNOMX.js.map} +0 -0
@@ -18,8 +18,8 @@ function getDaemonVersion() {
18
18
  return cached;
19
19
  }
20
20
  function readDaemonVersion() {
21
- if ("3.29.0".length > 0) {
22
- return "3.29.0";
21
+ if ("3.30.0".length > 0) {
22
+ return "3.30.0";
23
23
  }
24
24
  try {
25
25
  const here = dirname(fileURLToPath(import.meta.url));
@@ -48,4 +48,4 @@ function readDaemonVersion() {
48
48
  export {
49
49
  getDaemonVersion
50
50
  };
51
- //# sourceMappingURL=chunk-SR3T3EYE.js.map
51
+ //# sourceMappingURL=chunk-RGVTFZDF.js.map
@@ -15,7 +15,7 @@ import {
15
15
  DevicePollResponseSchema,
16
16
  DeviceStartResponseSchema,
17
17
  ROUTES
18
- } from "./chunk-HIGCNT53.js";
18
+ } from "./chunk-FARMJBC7.js";
19
19
  import {
20
20
  isDevMode,
21
21
  validateEnv
@@ -223,4 +223,4 @@ export {
223
223
  ensureAuthenticated,
224
224
  loginCommand
225
225
  };
226
- //# sourceMappingURL=chunk-SMGVXANE.js.map
226
+ //# sourceMappingURL=chunk-SGFCXJJJ.js.map
@@ -31,7 +31,7 @@ import {
31
31
  parseShipyardDeliverableUrl,
32
32
  planEditorSerializer,
33
33
  toTaskIndexEntry
34
- } from "./chunk-ASK7AIJM.js";
34
+ } from "./chunk-KFCIZHQW.js";
35
35
  import {
36
36
  logger
37
37
  } from "./chunk-FIE2FRIW.js";
@@ -34988,4 +34988,4 @@ export {
34988
34988
  runPlanBackfill,
34989
34989
  buildTaskStateStore
34990
34990
  };
34991
- //# sourceMappingURL=chunk-CDOIPKD6.js.map
34991
+ //# sourceMappingURL=chunk-VE2ZAUIM.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDaemonVersion
4
- } from "./chunk-SR3T3EYE.js";
4
+ } from "./chunk-RGVTFZDF.js";
5
5
  import {
6
6
  WorkerCommandCodec,
7
7
  WorkerReplyCodec
@@ -1116,4 +1116,4 @@ export {
1116
1116
  shutdownFileWatcherGuard,
1117
1117
  guardedSubscribe
1118
1118
  };
1119
- //# sourceMappingURL=chunk-J5MLXWO5.js.map
1119
+ //# sourceMappingURL=chunk-WO5EM3BP.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SkillCompatibleAgentSchema
4
- } from "./chunk-HIGCNT53.js";
4
+ } from "./chunk-FARMJBC7.js";
5
5
 
6
6
  // src/shared/capabilities/skills.ts
7
7
  import { createHash } from "crypto";
@@ -468,4 +468,4 @@ export {
468
468
  scopeEnvironmentsToActiveRepo,
469
469
  _resolveBucketForTesting
470
470
  };
471
- //# sourceMappingURL=chunk-CB35TLO4.js.map
471
+ //# sourceMappingURL=chunk-ZDJEJI62.js.map
@@ -2,16 +2,17 @@
2
2
  import {
3
3
  buildCursorFastModeModelOption,
4
4
  countLoopbackHttpEntries,
5
- parseDaemonToRunner
6
- } from "./chunk-AIN32UWK.js";
5
+ parseDaemonToRunner,
6
+ prependCursorSystemContext
7
+ } from "./chunk-FWL2ZIEL.js";
7
8
  import {
8
9
  buildCursorUserPrompt
9
- } from "./chunk-IJGA4YA3.js";
10
+ } from "./chunk-JQFAXWT5.js";
10
11
  import {
11
12
  ContentBlockSchema,
12
13
  HARNESS_SERVER_NAME
13
- } from "./chunk-ASK7AIJM.js";
14
- import "./chunk-HIGCNT53.js";
14
+ } from "./chunk-KFCIZHQW.js";
15
+ import "./chunk-FARMJBC7.js";
15
16
  import "./chunk-EHQITHQX.js";
16
17
  import "./chunk-FIE2FRIW.js";
17
18
  import "./chunk-FKOUB6H6.js";
@@ -19,11 +20,6 @@ import "./chunk-X3MULCV5.js";
19
20
  import "./chunk-XVW6VCKW.js";
20
21
  import "./chunk-2H7UOFLK.js";
21
22
 
22
- // src/services/session/cursor-runner.ts
23
- import {
24
- Agent
25
- } from "@cursor/sdk";
26
-
27
23
  // src/shared/capabilities/runtime/cursor-ripgrep.ts
28
24
  import { existsSync } from "fs";
29
25
  import { createRequire } from "module";
@@ -58,6 +54,40 @@ function resolveCursorBundledRipgrepPath(deps = {}) {
58
54
  return exists(rg) ? rg : null;
59
55
  }
60
56
 
57
+ // src/services/session/cursor-agent-acquisition.ts
58
+ import { Agent } from "@cursor/sdk";
59
+ async function acquireCursorAgent(options) {
60
+ if (options.injectedAgentId !== void 0) {
61
+ return {
62
+ agent: await Agent.resume(options.injectedAgentId, options.baseOptions),
63
+ resumeFallbackUsed: false
64
+ };
65
+ }
66
+ if (options.resumeAgentId !== void 0) {
67
+ try {
68
+ const agent = await Agent.resume(options.resumeAgentId, options.baseOptions);
69
+ options.log("info", "runner_resume_agent_succeeded", { agentId: options.resumeAgentId });
70
+ return { agent, resumeFallbackUsed: false };
71
+ } catch (error) {
72
+ options.log("warn", "runner_resume_agent_failed_falling_back_to_create", {
73
+ agentId: options.resumeAgentId,
74
+ error: error instanceof Error ? error.message : String(error)
75
+ });
76
+ return {
77
+ agent: await Agent.create({
78
+ ...options.baseOptions,
79
+ name: `shipyard-task-${options.taskId}`
80
+ }),
81
+ resumeFallbackUsed: true
82
+ };
83
+ }
84
+ }
85
+ return {
86
+ agent: await Agent.create({ ...options.baseOptions, name: `shipyard-task-${options.taskId}` }),
87
+ resumeFallbackUsed: false
88
+ };
89
+ }
90
+
61
91
  // src/services/session/cursor-init-error-reporter.ts
62
92
  import { Cursor } from "@cursor/sdk";
63
93
 
@@ -189,6 +219,7 @@ var state = {
189
219
  fastModeParam: null,
190
220
  mcpServers: {},
191
221
  initSettled: null,
222
+ pendingResumeFallbackSystemContext: null,
192
223
  mode: void 0
193
224
  };
194
225
  function send(msg) {
@@ -242,8 +273,8 @@ function buildAgentsOption(agents) {
242
273
  { agents }
243
274
  ) : {};
244
275
  }
245
- async function acquireAgent(args) {
246
- const baseOptions = {
276
+ function buildAgentOptions(args) {
277
+ return {
247
278
  apiKey: args.apiKey,
248
279
  model: { id: args.modelId },
249
280
  local: args.local,
@@ -252,26 +283,6 @@ async function acquireAgent(args) {
252
283
  ...args.agentsOption,
253
284
  ...args.mode !== void 0 ? { mode: args.mode } : {}
254
285
  };
255
- async function createFreshAgent() {
256
- return Agent.create({ ...baseOptions, name: `shipyard-task-${args.taskId}` });
257
- }
258
- if (args.injectedAgentId !== void 0) {
259
- return Agent.resume(args.injectedAgentId, baseOptions);
260
- }
261
- if (args.resumeAgentId !== void 0) {
262
- try {
263
- const resumed = await Agent.resume(args.resumeAgentId, baseOptions);
264
- log("info", "runner_resume_agent_succeeded", { agentId: args.resumeAgentId });
265
- return resumed;
266
- } catch (resumeErr) {
267
- log("warn", "runner_resume_agent_failed_falling_back_to_create", {
268
- agentId: args.resumeAgentId,
269
- error: resumeErr instanceof Error ? resumeErr.message : String(resumeErr)
270
- });
271
- return createFreshAgent();
272
- }
273
- }
274
- return createFreshAgent();
275
286
  }
276
287
  async function handleInit(args) {
277
288
  state.currentGeneration = args.generation;
@@ -297,18 +308,23 @@ async function handleInit(args) {
297
308
  })
298
309
  };
299
310
  state.mcpServers = mcpServers;
300
- const agent = await acquireAgent({
301
- apiKey: args.apiKey,
311
+ const acquired = await acquireCursorAgent({
302
312
  taskId: args.taskId,
303
- modelId: args.modelId,
304
- local: buildLocalOption(args.cwd, args.skillsDir),
305
- mcpServers,
306
- agentsOption: buildAgentsOption(args.agents),
313
+ baseOptions: buildAgentOptions({
314
+ apiKey: args.apiKey,
315
+ modelId: args.modelId,
316
+ local: buildLocalOption(args.cwd, args.skillsDir),
317
+ mcpServers,
318
+ agentsOption: buildAgentsOption(args.agents),
319
+ ...args.mode !== void 0 && { mode: args.mode }
320
+ }),
307
321
  ...args.injectedAgentId !== void 0 && { injectedAgentId: args.injectedAgentId },
308
322
  ...args.resumeAgentId !== void 0 && { resumeAgentId: args.resumeAgentId },
309
- ...args.mode !== void 0 && { mode: args.mode }
323
+ log
310
324
  });
325
+ const { agent } = acquired;
311
326
  state.agent = agent;
327
+ state.pendingResumeFallbackSystemContext = acquired.resumeFallbackUsed ? args.resumeFallbackSystemContext ?? null : null;
312
328
  send({
313
329
  kind: "init_ok",
314
330
  sessionId: agent.agentId,
@@ -355,17 +371,22 @@ async function handleReinit(args) {
355
371
  })
356
372
  };
357
373
  state.mcpServers = mcpServers;
358
- const agent = await acquireAgent({
359
- apiKey: state.apiKey,
374
+ const acquired = await acquireCursorAgent({
360
375
  taskId: args.taskId,
361
- modelId: args.modelId,
362
- local: buildLocalOption(state.cwd, args.skillsDir),
363
- mcpServers,
364
- agentsOption: buildAgentsOption(args.agents),
376
+ baseOptions: buildAgentOptions({
377
+ apiKey: state.apiKey,
378
+ modelId: args.modelId,
379
+ local: buildLocalOption(state.cwd, args.skillsDir),
380
+ mcpServers,
381
+ agentsOption: buildAgentsOption(args.agents),
382
+ ...args.mode !== void 0 && { mode: args.mode }
383
+ }),
365
384
  ...args.resumeAgentId !== void 0 && { resumeAgentId: args.resumeAgentId },
366
- ...args.mode !== void 0 && { mode: args.mode }
385
+ log
367
386
  });
387
+ const { agent } = acquired;
368
388
  state.agent = agent;
389
+ state.pendingResumeFallbackSystemContext = acquired.resumeFallbackUsed ? args.resumeFallbackSystemContext ?? null : null;
369
390
  send({ kind: "reinit_ok", sessionId: agent.agentId });
370
391
  } catch (err) {
371
392
  send({
@@ -504,8 +525,14 @@ async function handlePushMessage(args) {
504
525
  });
505
526
  return;
506
527
  }
528
+ const fallbackSystemContext = state.pendingResumeFallbackSystemContext;
529
+ const content = prependCursorSystemContext(parsedContent.data, fallbackSystemContext);
530
+ if (fallbackSystemContext !== null) {
531
+ state.pendingResumeFallbackSystemContext = null;
532
+ send({ kind: "initial_system_context_attached", generation: args.generation });
533
+ }
507
534
  const userInput = buildCursorUserPrompt(
508
- parsedContent.data,
535
+ content,
509
536
  (entry) => log(entry.event.includes("error") ? "warn" : "info", entry.event, entry),
510
537
  { skillBodies: args.skillBodies }
511
538
  );
@@ -617,6 +644,7 @@ async function handleClose() {
617
644
  state.taskId = "";
618
645
  state.fastMode = false;
619
646
  state.fastModeParam = null;
647
+ state.pendingResumeFallbackSystemContext = null;
620
648
  state.mode = void 0;
621
649
  inFlightToolCount = 0;
622
650
  send({ kind: "pooled_idle" });
@@ -639,6 +667,9 @@ function buildHandleInitArgs(msg) {
639
667
  generation: msg.generation,
640
668
  ...msg.injectedAgentId !== void 0 && { injectedAgentId: msg.injectedAgentId },
641
669
  ...msg.resumeAgentId !== void 0 && { resumeAgentId: msg.resumeAgentId },
670
+ ...msg.resumeFallbackSystemContext !== void 0 && {
671
+ resumeFallbackSystemContext: msg.resumeFallbackSystemContext
672
+ },
642
673
  fastMode: msg.fastMode ?? false,
643
674
  fastModeParam: msg.fastModeParam ?? null,
644
675
  ...msg.agents !== void 0 && { agents: msg.agents },
@@ -655,6 +686,9 @@ function buildHandleReinitArgs(msg) {
655
686
  skillsDir: msg.skillsDir,
656
687
  generation: msg.generation,
657
688
  ...msg.resumeAgentId !== void 0 && { resumeAgentId: msg.resumeAgentId },
689
+ ...msg.resumeFallbackSystemContext !== void 0 && {
690
+ resumeFallbackSystemContext: msg.resumeFallbackSystemContext
691
+ },
658
692
  fastMode: msg.fastMode ?? false,
659
693
  fastModeParam: msg.fastModeParam ?? null,
660
694
  ...msg.agents !== void 0 && { agents: msg.agents },