@rallycry/conveyor-agent 10.13.65 → 10.13.67

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 (41) hide show
  1. package/dist/{boot-7OPX55AO.js → boot-UUPTBQ6R.js} +7 -8
  2. package/dist/{chunk-JIGG755T.js → chunk-6Q6LQBWO.js} +0 -1
  3. package/dist/{chunk-ULS4QPRE.js → chunk-6W6UZ4SJ.js} +0 -1
  4. package/dist/{chunk-AXA55U4Z.js → chunk-E2SHIH6Y.js} +3 -4
  5. package/dist/{chunk-QOJTJCYZ.js → chunk-EXQ6AHOY.js} +2 -3
  6. package/dist/{chunk-5OQQSDVT.js → chunk-IA45XHOA.js} +0 -1
  7. package/dist/{chunk-QZN6HVUY.js → chunk-KG4ORL3Y.js} +1 -2
  8. package/dist/{chunk-4VUQ2NPF.js → chunk-KMB3BU4S.js} +0 -1
  9. package/dist/{chunk-NAK6FY5U.js → chunk-LE6ZUDZT.js} +37 -6
  10. package/dist/{chunk-6GS5ADIY.js → chunk-R3FDJQL6.js} +0 -1
  11. package/dist/{chunk-BAQ2OAKB.js → chunk-XPZPR6NS.js} +591 -216
  12. package/dist/cli.js +35 -43
  13. package/dist/{client-LRVVHTNG.js → client-IG6C5F2G.js} +3 -4
  14. package/dist/heartbeat-worker.js +1 -2
  15. package/dist/index.d.ts +95 -13
  16. package/dist/index.js +7 -8
  17. package/dist/{mode-6RL3SVMV.js → mode-ZJSOSLGU.js} +1 -2
  18. package/dist/{oom-watchdog-U7JERHA2.js → oom-watchdog-PAC5OJJG.js} +1 -2
  19. package/dist/{protocol-QLVS5W6O.js → protocol-QBCYO4GI.js} +1 -2
  20. package/dist/server-US2DDQSW.js +9 -0
  21. package/package.json +2 -2
  22. package/dist/boot-7OPX55AO.js.map +0 -1
  23. package/dist/chunk-4VUQ2NPF.js.map +0 -1
  24. package/dist/chunk-5OQQSDVT.js.map +0 -1
  25. package/dist/chunk-6GS5ADIY.js.map +0 -1
  26. package/dist/chunk-AXA55U4Z.js.map +0 -1
  27. package/dist/chunk-BAQ2OAKB.js.map +0 -1
  28. package/dist/chunk-JIGG755T.js.map +0 -1
  29. package/dist/chunk-NAK6FY5U.js.map +0 -1
  30. package/dist/chunk-QOJTJCYZ.js.map +0 -1
  31. package/dist/chunk-QZN6HVUY.js.map +0 -1
  32. package/dist/chunk-ULS4QPRE.js.map +0 -1
  33. package/dist/cli.js.map +0 -1
  34. package/dist/client-LRVVHTNG.js.map +0 -1
  35. package/dist/heartbeat-worker.js.map +0 -1
  36. package/dist/index.js.map +0 -1
  37. package/dist/mode-6RL3SVMV.js.map +0 -1
  38. package/dist/oom-watchdog-U7JERHA2.js.map +0 -1
  39. package/dist/protocol-QLVS5W6O.js.map +0 -1
  40. package/dist/server-ZACB5T5S.js +0 -10
  41. package/dist/server-ZACB5T5S.js.map +0 -1
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  TOMBSTONE_MESSAGE,
4
4
  isLegacyEntrypointLaunch
5
- } from "./chunk-6GS5ADIY.js";
5
+ } from "./chunk-R3FDJQL6.js";
6
6
  import {
7
7
  AgentConnection,
8
8
  CodespacePortVisibility,
@@ -15,8 +15,10 @@ import {
15
15
  applyBootstrapToEnv,
16
16
  awaitGitReady,
17
17
  buildProjectTools,
18
+ buildRateLimitEvents,
18
19
  buildSessionPreviewPorts,
19
20
  buildSynthesizedCredentials,
21
+ buildUnmeasurableEvent,
20
22
  claudeJsonPath,
21
23
  createServiceLogger,
22
24
  fetchBootstrap,
@@ -33,17 +35,17 @@ import {
33
35
  sampleKeyUsage,
34
36
  statWorkspacePath,
35
37
  workspacePathExists
36
- } from "./chunk-BAQ2OAKB.js";
38
+ } from "./chunk-XPZPR6NS.js";
37
39
  import {
38
40
  reportBootMilestone
39
- } from "./chunk-QZN6HVUY.js";
40
- import "./chunk-5OQQSDVT.js";
41
+ } from "./chunk-KG4ORL3Y.js";
42
+ import "./chunk-IA45XHOA.js";
41
43
  import {
42
44
  getWorkbenchClient
43
- } from "./chunk-QOJTJCYZ.js";
45
+ } from "./chunk-EXQ6AHOY.js";
44
46
  import {
45
47
  workbenchEnabled
46
- } from "./chunk-4VUQ2NPF.js";
48
+ } from "./chunk-KMB3BU4S.js";
47
49
  import {
48
50
  inheritedEnv,
49
51
  resolvePtySpawn,
@@ -51,8 +53,8 @@ import {
51
53
  runStartCommand,
52
54
  sessionTempBase,
53
55
  terminateProcessGroup
54
- } from "./chunk-NAK6FY5U.js";
55
- import "./chunk-JIGG755T.js";
56
+ } from "./chunk-LE6ZUDZT.js";
57
+ import "./chunk-6Q6LQBWO.js";
56
58
 
57
59
  // src/cli.ts
58
60
  import { readFileSync } from "fs";
@@ -572,6 +574,9 @@ var WorkspaceCommandSupervisor = class {
572
574
  this.connection.sendEvent({
573
575
  type: "setup_complete",
574
576
  startCommandRunning,
577
+ // Reported separately so the server can tell "nothing to run" apart from
578
+ // "the dev server failed to launch" — both report startCommandRunning:false.
579
+ startCommandConfigured: Boolean(this.config?.startCommand),
575
580
  ...previewPorts.length > 0 ? { previewPorts } : {}
576
581
  });
577
582
  }
@@ -904,16 +909,14 @@ var ProjectSessionRunner = class {
904
909
  * the task runner). Best-effort — never throws, no-op without an OAuth token. */
905
910
  async sampleAndReportKeyUsage() {
906
911
  if (this.stopped) return;
907
- const samples = await sampleKeyUsage(process.env.CLAUDE_CODE_OAUTH_TOKEN);
908
- for (const sample of samples) {
909
- this.connection.sendEvent({
910
- type: "rate_limit_update",
911
- rateLimitType: sample.rateLimitType,
912
- utilization: sample.utilization,
913
- status: sample.status,
914
- resetsAt: sample.resetsAt ?? void 0,
915
- gauges: sample.gauges
916
- });
912
+ const codingAgentKeyId = process.env.CONVEYOR_CODING_AGENT_KEY_ID;
913
+ const { samples, unmeasurable } = await sampleKeyUsage(process.env.CLAUDE_CODE_OAUTH_TOKEN);
914
+ if (unmeasurable) {
915
+ this.connection.sendEvent(buildUnmeasurableEvent(unmeasurable.reason, codingAgentKeyId));
916
+ return;
917
+ }
918
+ for (const event of buildRateLimitEvents(samples, codingAgentKeyId)) {
919
+ this.connection.sendEvent(event);
917
920
  }
918
921
  }
919
922
  shutdown() {
@@ -1230,32 +1233,22 @@ var AdhocSessionRunner = class {
1230
1233
  }
1231
1234
  const probed = await probeKeysUsage(keys);
1232
1235
  for (const { codingAgentKeyId, samples } of probed) {
1233
- for (const sample of samples) {
1234
- this.connection.sendEvent({
1235
- type: "rate_limit_update",
1236
- rateLimitType: sample.rateLimitType,
1237
- utilization: sample.utilization,
1238
- status: sample.status,
1239
- resetsAt: sample.resetsAt ?? void 0,
1240
- gauges: sample.gauges,
1241
- codingAgentKeyId
1242
- });
1236
+ for (const event of buildRateLimitEvents(samples, codingAgentKeyId)) {
1237
+ this.connection.sendEvent(event);
1243
1238
  }
1244
1239
  }
1245
1240
  }
1246
1241
  /** Single-key fallback: sample only the key this pod booted under. */
1247
1242
  async sampleAndReportOwnKey() {
1248
1243
  if (this.stopped) return;
1249
- const samples = await sampleKeyUsage(process.env.CLAUDE_CODE_OAUTH_TOKEN);
1250
- for (const sample of samples) {
1251
- this.connection.sendEvent({
1252
- type: "rate_limit_update",
1253
- rateLimitType: sample.rateLimitType,
1254
- utilization: sample.utilization,
1255
- status: sample.status,
1256
- resetsAt: sample.resetsAt ?? void 0,
1257
- gauges: sample.gauges
1258
- });
1244
+ const codingAgentKeyId = process.env.CONVEYOR_CODING_AGENT_KEY_ID;
1245
+ const { samples, unmeasurable } = await sampleKeyUsage(process.env.CLAUDE_CODE_OAUTH_TOKEN);
1246
+ if (unmeasurable) {
1247
+ this.connection.sendEvent(buildUnmeasurableEvent(unmeasurable.reason, codingAgentKeyId));
1248
+ return;
1249
+ }
1250
+ for (const event of buildRateLimitEvents(samples, codingAgentKeyId)) {
1251
+ this.connection.sendEvent(event);
1259
1252
  }
1260
1253
  }
1261
1254
  async shutdown() {
@@ -1722,7 +1715,7 @@ function hostsSpawnedChildren(mode) {
1722
1715
 
1723
1716
  // src/cli.ts
1724
1717
  if (process.argv[2] === "boot") {
1725
- const { runBoot } = await import("./boot-7OPX55AO.js");
1718
+ const { runBoot } = await import("./boot-UUPTBQ6R.js");
1726
1719
  process.exit(await runBoot(process.argv.slice(3)));
1727
1720
  }
1728
1721
  if (isLegacyEntrypointLaunch(process.env)) {
@@ -1824,9 +1817,9 @@ process.on("unhandledRejection", (reason) => {
1824
1817
  process.exit(1);
1825
1818
  });
1826
1819
  if (process.env.CONVEYOR_MODE === "workbench") {
1827
- const { startWorkbenchServer } = await import("./server-ZACB5T5S.js");
1828
- const { oomWatchdogOptionsFromEnv } = await import("./oom-watchdog-U7JERHA2.js");
1829
- const { DEFAULT_WORKBENCH_PORT } = await import("./protocol-QLVS5W6O.js");
1820
+ const { startWorkbenchServer } = await import("./server-US2DDQSW.js");
1821
+ const { oomWatchdogOptionsFromEnv } = await import("./oom-watchdog-PAC5OJJG.js");
1822
+ const { DEFAULT_WORKBENCH_PORT } = await import("./protocol-QBCYO4GI.js");
1830
1823
  const port = Number(process.env.CONVEYOR_WORKBENCH_PORT) || DEFAULT_WORKBENCH_PORT;
1831
1824
  const token = process.env.CONVEYOR_WORKBENCH_TOKEN ?? process.env.POD_BOOTSTRAP_TOKEN ?? "";
1832
1825
  if (!token) {
@@ -2155,4 +2148,3 @@ runner.run().then(async () => {
2155
2148
  logAgentExit("error", { exitCode: 1, finalState: runner.finalState ?? void 0 });
2156
2149
  process.exit(1);
2157
2150
  });
2158
- //# sourceMappingURL=cli.js.map
@@ -4,9 +4,9 @@ import {
4
4
  WorkbenchError,
5
5
  getWorkbenchClient,
6
6
  resetWorkbenchClient
7
- } from "./chunk-QOJTJCYZ.js";
8
- import "./chunk-4VUQ2NPF.js";
9
- import "./chunk-JIGG755T.js";
7
+ } from "./chunk-EXQ6AHOY.js";
8
+ import "./chunk-KMB3BU4S.js";
9
+ import "./chunk-6Q6LQBWO.js";
10
10
  export {
11
11
  RemoteProcessHandle,
12
12
  WorkbenchClient,
@@ -14,4 +14,3 @@ export {
14
14
  getWorkbenchClient,
15
15
  resetWorkbenchClient
16
16
  };
17
- //# sourceMappingURL=client-LRVVHTNG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  heartbeatStatusFor,
4
4
  lagFromBuffer,
5
5
  statusFromBuffer
6
- } from "./chunk-5OQQSDVT.js";
6
+ } from "./chunk-IA45XHOA.js";
7
7
 
8
8
  // src/connection/heartbeat-worker.ts
9
9
  import { parentPort, workerData } from "worker_threads";
@@ -42,4 +42,3 @@ function beat() {
42
42
  );
43
43
  }
44
44
  setInterval(beat, data.intervalMs);
45
- //# sourceMappingURL=heartbeat-worker.js.map
package/dist/index.d.ts CHANGED
@@ -94,6 +94,7 @@ declare class AgentConnection {
94
94
  private apiKeyUpdateCallback;
95
95
  private pullBranchCallback;
96
96
  private runStartCommandCallback;
97
+ private earlyRunStartCommand;
97
98
  private earlyPullBranches;
98
99
  private spawnReviewCallback;
99
100
  private earlySpawnReviews;
@@ -174,6 +175,21 @@ declare class AgentConnection {
174
175
  * it; the review session is identified separately.
175
176
  */
176
177
  reportReviewSpawnFailure(reviewSessionId: string, error?: string): void;
178
+ /**
179
+ * Report that this pod's git credential is dead and refreshing did not fix
180
+ * it (fire-and-forget).
181
+ *
182
+ * Purely diagnostic. Until this existed a pod could lose git entirely and
183
+ * leave no server-side trace at all — the refresh RPC succeeded every time,
184
+ * so the failure was visible only in pod stderr, which is why it took two
185
+ * investigations to attribute. `tokenShape` describes the served credential
186
+ * (length, prefix class, mtime) and NEVER carries its value.
187
+ */
188
+ reportCredentialFailure(details: {
189
+ error?: string;
190
+ tokenShape?: string;
191
+ healed?: boolean;
192
+ }): void;
177
193
  /**
178
194
  * Ask the server to destroy and recreate this pod (fire-and-forget). The
179
195
  * agent calls this only when it has proven it cannot recover in place — the
@@ -193,6 +209,9 @@ declare class AgentConnection {
193
209
  * sessionId is OUR (builder) session — the task-identity guard runs on it.
194
210
  */
195
211
  reportSessionSpawnFailure(spawnedSessionId: string, error?: string): void;
212
+ /** Register the restart handler, draining a `session:runStartCommand` that
213
+ * arrived before the supervisor was ready. Collapsed to one drain: two
214
+ * clicks during boot should produce one restart, not two competing ones. */
196
215
  onRunStartCommand(callback: () => void): void;
197
216
  /**
198
217
  * Forward a raw chunk of terminal output to the S2 relay (fire-and-forget).
@@ -332,6 +351,20 @@ declare class AgentConnection {
332
351
  * the same pod token is the designed refresh mechanism.
333
352
  */
334
353
  private refreshFromV3Bootstrap;
354
+ /**
355
+ * Write the bundle's GitHub token to the shared credential files — unless the
356
+ * bundle belongs to another session.
357
+ *
358
+ * The bootstrap GET is keyed by the POD, so on a pod also hosting a same-pod
359
+ * review it can resolve to the reader session, whose token is read-only.
360
+ * Writing that over the shared files silently downgrades the builder's push
361
+ * credential. Our own taskToken carries the same claims, so it is what we
362
+ * compare against.
363
+ *
364
+ * The legitimate case this path exists for — our own session's bundle
365
+ * refreshing the token when the RPC is failing — is unaffected.
366
+ */
367
+ private applyBundleCredentialFiles;
335
368
  /**
336
369
  * Poll the bootstrap bundle once (maxWaitMs 0), retrying only on a transient
337
370
  * 429 (standby-pool pods share one Cloud NAT IP against podBootstrapLimiter)
@@ -694,8 +727,8 @@ declare class SessionRunner {
694
727
  private periodicGitFlush;
695
728
  /** Sample the running Claude subscription key's rate-limit utilization from
696
729
  * the Claude CLI `/usage` command and report it as `rate_limit_update` events.
697
- * The API (`persistRateLimitSnapshot`) attributes them to the key this session
698
- * launched under, keeping User Settings + the PtY-tab usage widget fresh and
730
+ * The API (`persistRateLimitSnapshot`) attributes them to the key named on the
731
+ * event, keeping User Settings + the PtY-tab usage widget fresh and
699
732
  * `selectBestKey` rotation honest. Best-effort — never throws, no-op when the
700
733
  * pod has no OAuth token (e.g. API-key projects). */
701
734
  private sampleAndReportKeyUsage;
@@ -720,8 +753,20 @@ declare class SessionRunner {
720
753
  private buildFullContext;
721
754
  private createQueryBridge;
722
755
  private wireConnectionCallbacks;
723
- /** Proactively refresh the GitHub token before the 1-hour expiry. */
756
+ /**
757
+ * Proactively refresh the GitHub token before the 1-hour expiry — and PROVE
758
+ * the result works.
759
+ *
760
+ * The old version logged "Proactively refreshed GitHub token" whenever the
761
+ * credential store write succeeded. It never inspected the token-file write
762
+ * and never asked git anything, so a pod whose token file was stale printed
763
+ * that line every 45 minutes while every push 401'd. Three of those lines,
764
+ * perfectly spaced, are what made the 2026-08-19 occurrence unreadable. A
765
+ * success line here now means the credential authenticated against origin.
766
+ */
724
767
  private refreshGithubToken;
768
+ /** Mint a GitHub token over the RPC. `forceFresh` bypasses the API's cache. */
769
+ private mintGithubToken;
725
770
  /** Re-fetch task context to pick up a newly created branch and check it out. */
726
771
  private refreshBranchForBuilding;
727
772
  /**
@@ -779,16 +824,44 @@ interface AgentRunnerCallbacks {
779
824
  interface GithubTokenFileSync {
780
825
  tokenFile: boolean;
781
826
  ghHosts: boolean;
827
+ /**
828
+ * Why a copy is not current, when a write actually threw.
829
+ *
830
+ * A `false` flag alone is ambiguous — it also means "deliberately skipped"
831
+ * (a `gh` login we do not own, a vitest run without a temp-dir override).
832
+ * Callers that report on a refresh need to tell a skip from a failure, and
833
+ * until this existed the thrown error was discarded here and the caller had
834
+ * nothing to print but the flag.
835
+ */
836
+ errors?: {
837
+ tokenFile?: string;
838
+ ghHosts?: string;
839
+ };
782
840
  }
783
841
 
784
- /** Returns true if the working tree has uncommitted changes (staged or unstaged). */
785
- declare function hasUncommittedChanges(cwd: string): Promise<boolean>;
786
- /** Returns the current branch name, or null if on detached HEAD. */
787
- declare function getCurrentBranch(cwd: string): Promise<string | null>;
788
- /** Returns true if there are committed changes that haven't been pushed to origin. */
789
- declare function hasUnpushedCommits(cwd: string): Promise<boolean>;
790
- /** Stage all changes and create a commit. Returns the commit hash if successful. */
791
- declare function stageAndCommit(cwd: string, message: string): Promise<string | null>;
842
+ /**
843
+ * Writing the pod's git credential, and proving it works.
844
+ *
845
+ * Split out of `git-utils.ts`: these four functions are one concern — what a
846
+ * token refresh WRITES (`updateRemoteCredential` / `updateRemoteToken`) and
847
+ * whether the result can actually authenticate (`verifyGitCredential`) — and
848
+ * `refresh-verify-heal.ts` is built entirely on them.
849
+ *
850
+ * Every git call here goes through the shared `git()` runner (`git-run.ts`),
851
+ * which carries the async-only / always-a-timeout / args-as-arrays rules.
852
+ */
853
+
854
+ /**
855
+ * How a caller mints a fresh GitHub token.
856
+ *
857
+ * `forceFresh` skips the API's installation-token cache. It matters only on the
858
+ * retry after a rejection: the cache tracks expiry, never validity, so an
859
+ * ordinary re-mint hands back the very token GitHub just refused. Optional so
860
+ * every existing zero-argument closure still satisfies this type.
861
+ */
862
+ type RefreshTokenFn = (opts?: {
863
+ forceFresh?: boolean;
864
+ }) => Promise<string | undefined>;
792
865
  /** What a credential refresh actually managed to write. */
793
866
  interface GitCredentialUpdate {
794
867
  /** Both the credential file and the helper config are current. */
@@ -807,13 +880,22 @@ interface TokenRefreshResult {
807
880
  }
808
881
  /** Compatibility alias for the existing refreshGithubToken RPC. */
809
882
  declare function updateRemoteToken(cwd: string, token: string): Promise<TokenRefreshResult>;
883
+
884
+ /** Returns true if the working tree has uncommitted changes (staged or unstaged). */
885
+ declare function hasUncommittedChanges(cwd: string): Promise<boolean>;
886
+ /** Returns the current branch name, or null if on detached HEAD. */
887
+ declare function getCurrentBranch(cwd: string): Promise<string | null>;
888
+ /** Returns true if there are committed changes that haven't been pushed to origin. */
889
+ declare function hasUnpushedCommits(cwd: string): Promise<boolean>;
890
+ /** Stage all changes and create a commit. Returns the commit hash if successful. */
891
+ declare function stageAndCommit(cwd: string, message: string): Promise<string | null>;
810
892
  /** Best-effort flush of pending work: pushes any real (intentional) commits to
811
893
  * the task branch, and captures uncommitted changes as a WIP snapshot on the
812
894
  * `conveyor-wip/<branch>` ref — never as commits on the branch itself. When
813
895
  * the tree is clean, a previously pushed WIP ref is deleted. Never throws. */
814
896
  declare function flushPendingChanges(cwd: string, opts?: {
815
897
  wipMessage?: string;
816
- refreshToken?: () => Promise<string | undefined>;
898
+ refreshToken?: RefreshTokenFn;
817
899
  }): Promise<{
818
900
  committed: boolean;
819
901
  pushed: boolean;
@@ -821,7 +903,7 @@ declare function flushPendingChanges(cwd: string, opts?: {
821
903
  }>;
822
904
  /** Push current branch to origin. Proactively refreshes the GitHub token before
823
905
  * attempting the push. On auth failure, refreshes again and retries. */
824
- declare function pushToOrigin(cwd: string, refreshToken?: () => Promise<string | undefined>, skipVerify?: boolean): Promise<boolean>;
906
+ declare function pushToOrigin(cwd: string, refreshToken?: RefreshTokenFn, skipVerify?: boolean): Promise<boolean>;
825
907
 
826
908
  declare function ensureWorktree(projectDir: string, taskId: string, branch?: string): Promise<string>;
827
909
  /**
package/dist/index.js CHANGED
@@ -13,21 +13,21 @@ import {
13
13
  unshallowRepo,
14
14
  updateRemoteToken,
15
15
  workspacePathExists
16
- } from "./chunk-BAQ2OAKB.js";
17
- import "./chunk-QZN6HVUY.js";
18
- import "./chunk-5OQQSDVT.js";
16
+ } from "./chunk-XPZPR6NS.js";
17
+ import "./chunk-KG4ORL3Y.js";
18
+ import "./chunk-IA45XHOA.js";
19
19
  import {
20
20
  getWorkbenchClient
21
- } from "./chunk-QOJTJCYZ.js";
21
+ } from "./chunk-EXQ6AHOY.js";
22
22
  import {
23
23
  workbenchEnabled
24
- } from "./chunk-4VUQ2NPF.js";
24
+ } from "./chunk-KMB3BU4S.js";
25
25
  import {
26
26
  runAuthTokenCommand,
27
27
  runSetupCommand,
28
28
  runStartCommand
29
- } from "./chunk-NAK6FY5U.js";
30
- import "./chunk-JIGG755T.js";
29
+ } from "./chunk-LE6ZUDZT.js";
30
+ import "./chunk-6Q6LQBWO.js";
31
31
 
32
32
  // src/runner/worktree.ts
33
33
  import { execFile } from "child_process";
@@ -114,4 +114,3 @@ export {
114
114
  unshallowRepo,
115
115
  updateRemoteToken
116
116
  };
117
- //# sourceMappingURL=index.js.map
@@ -3,11 +3,10 @@ import {
3
3
  workbenchEnabled,
4
4
  workbenchPort,
5
5
  workbenchToken
6
- } from "./chunk-4VUQ2NPF.js";
6
+ } from "./chunk-KMB3BU4S.js";
7
7
  export {
8
8
  sharedDir,
9
9
  workbenchEnabled,
10
10
  workbenchPort,
11
11
  workbenchToken
12
12
  };
13
- //# sourceMappingURL=mode-6RL3SVMV.js.map
@@ -2,10 +2,9 @@ import {
2
2
  biggestForeignProcessGroup,
3
3
  oomWatchdogOptionsFromEnv,
4
4
  startOomWatchdog
5
- } from "./chunk-ULS4QPRE.js";
5
+ } from "./chunk-6W6UZ4SJ.js";
6
6
  export {
7
7
  biggestForeignProcessGroup,
8
8
  oomWatchdogOptionsFromEnv,
9
9
  startOomWatchdog
10
10
  };
11
- //# sourceMappingURL=oom-watchdog-U7JERHA2.js.map
@@ -4,7 +4,7 @@ import {
4
4
  parseLine,
5
5
  timingSafeTokenEqual,
6
6
  writeFrame
7
- } from "./chunk-JIGG755T.js";
7
+ } from "./chunk-6Q6LQBWO.js";
8
8
  export {
9
9
  DEFAULT_WORKBENCH_PORT,
10
10
  FrameReader,
@@ -12,4 +12,3 @@ export {
12
12
  timingSafeTokenEqual,
13
13
  writeFrame
14
14
  };
15
- //# sourceMappingURL=protocol-QLVS5W6O.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ startWorkbenchServer
3
+ } from "./chunk-E2SHIH6Y.js";
4
+ import "./chunk-LE6ZUDZT.js";
5
+ import "./chunk-6Q6LQBWO.js";
6
+ import "./chunk-6W6UZ4SJ.js";
7
+ export {
8
+ startWorkbenchServer
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rallycry/conveyor-agent",
3
- "version": "10.13.65",
3
+ "version": "10.13.67",
4
4
  "description": "Conveyor Agent Runner v10 - PTY harness for the task chat (SDK harness for audit/project-chat). Agent-as-User architecture with BaseService patterns. Works locally too.",
5
5
  "keywords": [
6
6
  "agent",
@@ -40,7 +40,7 @@
40
40
  "@modelcontextprotocol/sdk": "^1.12.1",
41
41
  "node-pty": "^1.0.0",
42
42
  "socket.io-client": "^4.8.3",
43
- "tar": "^7.5.19",
43
+ "tar": "^7.5.21",
44
44
  "zod": "^4.0.0"
45
45
  },
46
46
  "devDependencies": {