@schoolai/shipyard 3.19.0 → 3.20.0-rc.20260723.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.
Files changed (32) hide show
  1. package/dist/capability-detector-worker.js +4 -4
  2. package/dist/{chunk-KMMF5R3M.js → chunk-FMHVDAJK.js} +3 -3
  3. package/dist/{chunk-FASB7KFF.js → chunk-LYUR7G6B.js} +2 -2
  4. package/dist/{chunk-NRXFTDBH.js → chunk-MD32Y6U4.js} +2 -2
  5. package/dist/{chunk-LVQLRQKF.js → chunk-OBYRPZRA.js} +40 -10
  6. package/dist/chunk-OBYRPZRA.js.map +1 -0
  7. package/dist/{chunk-6TK5KO76.js → chunk-OC75AUKJ.js} +33 -5
  8. package/dist/chunk-OC75AUKJ.js.map +1 -0
  9. package/dist/{chunk-4XU7QHYE.js → chunk-QNEFPC4Y.js} +2 -2
  10. package/dist/{chunk-JEIJ4LIM.js → chunk-SECZGRK2.js} +3 -3
  11. package/dist/{chunk-JEIJ4LIM.js.map → chunk-SECZGRK2.js.map} +1 -1
  12. package/dist/{chunk-HD66ZG4O.js → chunk-TJ4TMMMB.js} +3 -3
  13. package/dist/chunk-TJ4TMMMB.js.map +1 -0
  14. package/dist/cursor-runner.js +3 -3
  15. package/dist/electron-utility.js +2 -2
  16. package/dist/index.js +4 -4
  17. package/dist/{login-RU3BXPEI.js → login-VNZ6AQDV.js} +3 -3
  18. package/dist/{plan-backfill-CKSC7OK3.js → plan-backfill-ZNL2YQP6.js} +4 -4
  19. package/dist/{serve-AA4FCUY6.js → serve-WG7HQAYG.js} +653 -202
  20. package/dist/{serve-AA4FCUY6.js.map → serve-WG7HQAYG.js.map} +1 -1
  21. package/dist/{start-RNGMBSQN.js → start-5VG7QWUR.js} +6 -6
  22. package/package.json +1 -1
  23. package/dist/chunk-6TK5KO76.js.map +0 -1
  24. package/dist/chunk-HD66ZG4O.js.map +0 -1
  25. package/dist/chunk-LVQLRQKF.js.map +0 -1
  26. /package/dist/{chunk-KMMF5R3M.js.map → chunk-FMHVDAJK.js.map} +0 -0
  27. /package/dist/{chunk-FASB7KFF.js.map → chunk-LYUR7G6B.js.map} +0 -0
  28. /package/dist/{chunk-NRXFTDBH.js.map → chunk-MD32Y6U4.js.map} +0 -0
  29. /package/dist/{chunk-4XU7QHYE.js.map → chunk-QNEFPC4Y.js.map} +0 -0
  30. /package/dist/{login-RU3BXPEI.js.map → login-VNZ6AQDV.js.map} +0 -0
  31. /package/dist/{plan-backfill-CKSC7OK3.js.map → plan-backfill-ZNL2YQP6.js.map} +0 -0
  32. /package/dist/{start-RNGMBSQN.js.map → start-5VG7QWUR.js.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  detectCapabilities,
4
4
  refreshMcpServers,
5
5
  registerBuiltInProfiles
6
- } from "./chunk-LVQLRQKF.js";
6
+ } from "./chunk-OBYRPZRA.js";
7
7
  import "./chunk-TUQTEWK3.js";
8
8
  import {
9
9
  getRepoMetadata
@@ -15,9 +15,9 @@ import {
15
15
  import "./chunk-RR6V6SNM.js";
16
16
  import "./chunk-ESCSN2NN.js";
17
17
  import "./chunk-ZFKJAYAN.js";
18
- import "./chunk-FASB7KFF.js";
19
- import "./chunk-6TK5KO76.js";
20
- import "./chunk-HD66ZG4O.js";
18
+ import "./chunk-LYUR7G6B.js";
19
+ import "./chunk-OC75AUKJ.js";
20
+ import "./chunk-TJ4TMMMB.js";
21
21
  import "./chunk-EHQITHQX.js";
22
22
  import "./chunk-X3MULCV5.js";
23
23
  import {
@@ -18,8 +18,8 @@ function getDaemonVersion() {
18
18
  return cached;
19
19
  }
20
20
  function readDaemonVersion() {
21
- if ("3.19.0".length > 0) {
22
- return "3.19.0";
21
+ if ("3.20.0".length > 0) {
22
+ return "3.20.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-KMMF5R3M.js.map
51
+ //# sourceMappingURL=chunk-FMHVDAJK.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  isImageMimeType,
4
4
  parseAssetUri
5
- } from "./chunk-6TK5KO76.js";
5
+ } from "./chunk-OC75AUKJ.js";
6
6
  import {
7
7
  assertNever
8
8
  } from "./chunk-X3MULCV5.js";
@@ -588,4 +588,4 @@ export {
588
588
  toRecord,
589
589
  buildCursorUserPrompt
590
590
  };
591
- //# sourceMappingURL=chunk-FASB7KFF.js.map
591
+ //# sourceMappingURL=chunk-LYUR7G6B.js.map
@@ -15,7 +15,7 @@ import {
15
15
  DevicePollResponseSchema,
16
16
  DeviceStartResponseSchema,
17
17
  ROUTES
18
- } from "./chunk-HD66ZG4O.js";
18
+ } from "./chunk-TJ4TMMMB.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-NRXFTDBH.js.map
226
+ //# sourceMappingURL=chunk-MD32Y6U4.js.map
@@ -38,7 +38,7 @@ import {
38
38
  formatTaskFeedback,
39
39
  toRecord,
40
40
  toSdkContent
41
- } from "./chunk-FASB7KFF.js";
41
+ } from "./chunk-LYUR7G6B.js";
42
42
  import {
43
43
  AGENT_IDS,
44
44
  AGENT_SYSTEM_CLAUDE_CODE,
@@ -50,14 +50,14 @@ import {
50
50
  REASONING_EFFORTS,
51
51
  inflateToolResultContent,
52
52
  isImageMimeType
53
- } from "./chunk-6TK5KO76.js";
53
+ } from "./chunk-OC75AUKJ.js";
54
54
  import {
55
55
  AnthropicAuthStatusSchema,
56
56
  CodexAuthStatusSchema,
57
57
  CursorAuthStatusSchema,
58
58
  PermissionModeSchema,
59
59
  TESTED_CODEX_VERSION
60
- } from "./chunk-HD66ZG4O.js";
60
+ } from "./chunk-TJ4TMMMB.js";
61
61
  import {
62
62
  logger
63
63
  } from "./chunk-X53VIV2J.js";
@@ -3353,7 +3353,7 @@ var codexProfile = {
3353
3353
  return null;
3354
3354
  },
3355
3355
  async applyLive(subprocess, target) {
3356
- if (target.kind !== "dropLastTurns") return { handled: false };
3356
+ if (target.kind !== "dropLastTurns" || target.numTurns <= 0) return { handled: false };
3357
3357
  await subprocess.rollback(target.numTurns);
3358
3358
  return { handled: true };
3359
3359
  }
@@ -3701,7 +3701,11 @@ var codexProfile = {
3701
3701
  * codex-subprocess-spawn-helpers.ts; add the rendered section there.
3702
3702
  */
3703
3703
  subagentBackend: {
3704
- /** Codex's `spawn_agent` MCP tool launches a sub-thread. */
3704
+ /**
3705
+ * Codex's native `spawn_agent` tool launches a sub-thread. It is built
3706
+ * into the Codex runtime — NOT a Shipyard harness MCP tool (#4784
3707
+ * showed the bare word "MCP" here misleads; say which surface owns it).
3708
+ */
3705
3709
  spawnTool: "spawn_agent",
3706
3710
  /**
3707
3711
  * Progress lands as collab-tool-call updates on the parent thread —
@@ -3855,7 +3859,7 @@ var codexProfile = {
3855
3859
  */
3856
3860
  systemPromptFragments: {
3857
3861
  backgroundExecution: "Codex does not support background execution. Long-running shell commands block the current turn \u2014 keep them short or break work into smaller steps so the user sees progress.",
3858
- planMode: "In plan mode Codex runs read-only \u2014 file edits and shell writes are blocked. Use this turn to research the codebase and propose a plan in your final message; Shipyard captures that message as the plan and surfaces it for review. Do not call apply_patch or destructive shell commands until the user approves and exits plan mode.",
3862
+ planMode: "In plan mode Codex runs under a read-only filesystem sandbox with network enabled \u2014 apply_patch and mutating shell commands are blocked, while shell reads and network research are allowed; update_plan is also blocked in plan mode. Publish your plan by wrapping it in a <proposed_plan>...</proposed_plan> block in your streamed message \u2014 Shipyard extracts the block and surfaces it for review; text outside the block is chat, not plan. Do not mutate files until reviewers approve.",
3859
3863
  todoGuidance: "Use the update_plan tool to keep the user-visible task list in sync with your work. When starting, include any items already visible in <task-list> using their exact subjects \u2014 then add your own steps below them. Don't paraphrase template items or you'll create duplicate sidebar entries. Update statuses (pending \u2192 in_progress \u2192 completed) as you progress; call update_plan whenever you start, finish, or reorder a step.",
3860
3864
  toolReferences: {
3861
3865
  subagentSpawn: "spawn_agent",
@@ -3884,7 +3888,33 @@ var codexProfile = {
3884
3888
  * system-prompt assembly path (~2500 chars / 4 ≈ 625 tokens as of 2026-05-25).
3885
3889
  */
3886
3890
  systemPromptOverheadTokens: 625,
3887
- stallTimeoutMs: null,
3891
+ /**
3892
+ * Stall watchdog (#4921). Codex previously set every window to null, so no
3893
+ * watchdog ever armed — an overnight Codex hang had no recovery path. The
3894
+ * watchdog machinery is agent-neutral (`resolveStallBudgets` reads these
3895
+ * fields; the pure FSM resets on `stream_activity`), so declaring the windows
3896
+ * here is what turns it on. Codex liveness is emitted per turn frame from
3897
+ * `codex-turn-event-dispatch.ts` (`onLiveness` → `stream_activity`), so the
3898
+ * timer measures TRUE silence (a genuine hang), not turn cadence.
3899
+ *
3900
+ * 180 s mid-run silence — the agent-operation timeout floor; matches Cursor.
3901
+ */
3902
+ stallTimeoutMs: 18e4,
3903
+ /**
3904
+ * 5 min from spawn to the first liveness frame. Covers Codex's `app-server`
3905
+ * spawn + `thread/start` handshake with generous headroom. Because Codex
3906
+ * emits `stream_activity` (not `step_progress`), the cold-start latch is
3907
+ * never retired — this window stays in force all session, which is fine: it
3908
+ * still catches a multi-hour hang far below the "overnight" failure it fixes.
3909
+ */
3910
+ firstStepStallTimeoutMs: 3e5,
3911
+ /**
3912
+ * Per-tool extended window stays disabled for v1 — Codex emits no
3913
+ * `tool_execution_started` / `tool_execution_settled` edges, so there is
3914
+ * nothing to latch. A silent long-running shell command (no output frames
3915
+ * for >300 s) is the known v1 gap; adding the tool-execution edges is the
3916
+ * follow-up, mirroring Cursor's #4229 fix.
3917
+ */
3888
3918
  toolExecutionStallTimeoutMs: null
3889
3919
  };
3890
3920
 
@@ -5410,8 +5440,8 @@ var cursorProfile = {
5410
5440
  */
5411
5441
  systemPromptFragments: {
5412
5442
  backgroundExecution: "Cursor does not support background execution. Long-running Shell commands block the current turn \u2014 keep them short or break work into smaller steps so the user sees progress.",
5413
- planMode: 'In plan mode Cursor runs read-only \u2014 `write`, `edit`, `delete`, `shell`, and `task` are blocked at the hook layer. Research the codebase, then propose your plan by calling `createPlan({ plan: "..." })` with the full plan as markdown \u2014 that tool call is how Shipyard captures the plan, so a plan written only as a chat message will not be captured. Wait for the user to approve before attempting writes.',
5414
- todoGuidance: 'Use the shipyard_update_plan MCP tool to keep the user-visible task list in sync with your work. When starting, include any items already visible in <task-list> with their visible IDs (for example, use id: "1" for #1). Keep that same ID if you rename a template item, and omit id only for brand-new steps. Update statuses (pending \u2192 in_progress \u2192 completed) as you progress; call shipyard_update_plan whenever you start, finish, or reorder a step. Use the task tool to spawn subagents for parallel work \u2014 that is a separate concern.',
5443
+ planMode: 'In plan mode Cursor runs read-only \u2014 `Write`, `Edit`, `MultiEdit`, `Shell`, and `applyPatch` are denied at the hook layer, and the native `task` subagent tool must not be called (blocked by instruction, not the hook). Research the codebase, then propose your plan by calling `createPlan({ plan: "..." })` with the full plan as markdown \u2014 that tool call is how Shipyard captures the plan, so a plan written only as a chat message will not be captured. Wait for the user to approve before attempting writes.',
5444
+ todoGuidance: 'Use the shipyard_update_plan MCP tool to keep the user-visible task list in sync with your work. When starting, include any items already visible in <task-list> with their visible IDs (for example, use id: "1" for #1). Keep that same ID if you rename a template item, and omit id only for brand-new steps. Update statuses (pending \u2192 in_progress \u2192 completed) as you progress; call shipyard_update_plan whenever you start, finish, or reorder a step. Use the native `task` tool to spawn subagents for parallel work \u2014 that is a separate concern (and distinct from the Shipyard `task` MCP tool, which manages sibling tasks).',
5415
5445
  toolReferences: {
5416
5446
  subagentSpawn: "task",
5417
5447
  shellExec: "Shell",
@@ -8251,4 +8281,4 @@ export {
8251
8281
  refreshInstalledAgents,
8252
8282
  refreshCodexAuthSlice
8253
8283
  };
8254
- //# sourceMappingURL=chunk-LVQLRQKF.js.map
8284
+ //# sourceMappingURL=chunk-OBYRPZRA.js.map