@pushpalsdev/cli 1.1.8 → 1.1.10

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.
@@ -1644,8 +1644,10 @@ var WINDOWS_TASKKILL_TIMEOUT_MS2 = 5000;
1644
1644
  var RUNTIME_BINARY_DOWNLOAD_ATTEMPTS = 3;
1645
1645
  var DEFAULT_STARTUP_GIT_PROBE_TIMEOUT_MS = 5000;
1646
1646
  var DEFAULT_STARTUP_GIT_REMOTE_TIMEOUT_MS = 1e4;
1647
+ var DEFAULT_EMBEDDED_SERVICE_LAUNCH_WARN_MS = 5000;
1647
1648
  var EMBEDDED_SERVICE_RESTART_MAX_ATTEMPTS = 4;
1648
1649
  var WORKERPAL_STARTUP_READINESS_PROBE_MAX_MS = 15000;
1650
+ var CLI_SESSION_JOB_LOG_MAX_CHARS = 700;
1649
1651
  var EMBEDDED_RUNTIME_SAFETY_CAP_DISABLE_ENV = "PUSHPALS_DISABLE_EMBEDDED_SAFETY_CAPS";
1650
1652
  var EMBEDDED_RUNTIME_WINDOWS_SAFETY_CAPS = {
1651
1653
  REMOTEBUDDY_WORKERPAL_STARTUP_TIMEOUT_MS: "120000",
@@ -1677,6 +1679,13 @@ function formatRuntimeStartupTimingSummary(input) {
1677
1679
  const detail = typeof input.detail === "string" && input.detail.trim() ? ` detail=${input.detail.trim()}` : "";
1678
1680
  return `[pushpals] startup timing summary: outcome=${input.outcome} ` + `total=${Math.max(0, Math.floor(input.totalDurationMs))}ms${detail}` + (phaseSummary ? ` ${phaseSummary}` : "");
1679
1681
  }
1682
+ function formatEmbeddedServiceLaunchDelayWarning(input) {
1683
+ const durationMs = Math.max(0, Math.floor(Number(input.durationMs) || 0));
1684
+ const serviceName = String(input.serviceName || "service");
1685
+ const platform = String(input.platform ?? process.platform);
1686
+ const windowsHint = platform === "win32" ? " On Windows, first-run standalone binaries can be delayed while security software scans them." : "";
1687
+ return `[pushpals] Embedded ${serviceName} process launch took ${durationMs}ms; startup is continuing.` + windowsHint;
1688
+ }
1680
1689
  function describeWorkerExecutionReadiness(opts) {
1681
1690
  const onlineWorkers = Math.max(0, Math.floor(opts.onlineWorkers));
1682
1691
  const idleWorkers = Math.max(0, Math.floor(opts.idleWorkers));
@@ -4481,10 +4490,34 @@ async function autoStartRuntimeServices(opts) {
4481
4490
  };
4482
4491
  };
4483
4492
  const launchService = (name, command, launchOpts) => {
4484
- return serviceManager.startService(buildManagedServiceSpec(name, command, launchOpts));
4493
+ const launchStartedAt = Date.now();
4494
+ const service = serviceManager.startService(buildManagedServiceSpec(name, command, launchOpts));
4495
+ const launchDurationMs = Date.now() - launchStartedAt;
4496
+ if (launchDurationMs >= DEFAULT_EMBEDDED_SERVICE_LAUNCH_WARN_MS) {
4497
+ const warning = formatEmbeddedServiceLaunchDelayWarning({
4498
+ serviceName: name,
4499
+ durationMs: launchDurationMs,
4500
+ platform: process.platform
4501
+ });
4502
+ console.warn(warning);
4503
+ appendRuntimeServicesLogLine(runtimeServicesLogPath, warning);
4504
+ }
4505
+ return service;
4485
4506
  };
4486
4507
  const replaceService = (name, command, launchOpts) => {
4487
- return serviceManager.replaceService(buildManagedServiceSpec(name, command, launchOpts));
4508
+ const launchStartedAt = Date.now();
4509
+ const service = serviceManager.replaceService(buildManagedServiceSpec(name, command, launchOpts));
4510
+ const launchDurationMs = Date.now() - launchStartedAt;
4511
+ if (launchDurationMs >= DEFAULT_EMBEDDED_SERVICE_LAUNCH_WARN_MS) {
4512
+ const warning = formatEmbeddedServiceLaunchDelayWarning({
4513
+ serviceName: name,
4514
+ durationMs: launchDurationMs,
4515
+ platform: process.platform
4516
+ });
4517
+ console.warn(warning);
4518
+ appendRuntimeServicesLogLine(runtimeServicesLogPath, warning);
4519
+ }
4520
+ return service;
4488
4521
  };
4489
4522
  const sandboxPaths = buildWorkerpalSandboxPaths(runtimeRoot);
4490
4523
  const remoteBuddyFallbackBun = process.platform === "win32" ? resolveEmbeddedBunExecutableFromEnv(runtimeEnv, process.platform, process.execPath) : "";
@@ -5160,6 +5193,29 @@ function formatSessionEventLine(event) {
5160
5193
  const type = String(event.type ?? "").toLowerCase();
5161
5194
  const from = String(event.from ?? "");
5162
5195
  const payload = event.payload ?? {};
5196
+ if (type === "job_enqueued") {
5197
+ const jobId = String(payload.jobId ?? "").slice(0, 8);
5198
+ const kind = String(payload.kind ?? "").trim();
5199
+ const taskId = String(payload.taskId ?? "").slice(0, 8);
5200
+ const detail = kind || (taskId ? `task ${taskId}` : "queued");
5201
+ return `[job ${jobId}] queued: ${detail}`;
5202
+ }
5203
+ if (type === "job_claimed") {
5204
+ const jobId = String(payload.jobId ?? "").slice(0, 8);
5205
+ const workerId = String(payload.workerId ?? "").trim();
5206
+ return `[job ${jobId}] claimed${workerId ? ` by ${workerId}` : ""}`;
5207
+ }
5208
+ if (type === "job_log") {
5209
+ const jobId = String(payload.jobId ?? "").slice(0, 8);
5210
+ const stream = String(payload.stream ?? "").toLowerCase() === "stderr" ? " stderr" : "";
5211
+ const line = compactCliSessionJobLogLine(String(payload.line ?? "").trim());
5212
+ return line ? `[job ${jobId}${stream}] ${line}` : null;
5213
+ }
5214
+ if (type === "job_failed") {
5215
+ const jobId = String(payload.jobId ?? "").slice(0, 8);
5216
+ const message = String(payload.message ?? "").trim();
5217
+ return `[job ${jobId}] failed: ${message || "unknown"}`;
5218
+ }
5163
5219
  if (!shouldDisplayInteractiveSessionEvent(event))
5164
5220
  return null;
5165
5221
  if (type === "message")
@@ -5185,10 +5241,10 @@ function formatSessionEventLine(event) {
5185
5241
  const summary = String(payload.summary ?? "").trim();
5186
5242
  return `[task ${taskId}] completed${summary ? `: ${summary}` : ""}`;
5187
5243
  }
5188
- if (type === "job_failed") {
5244
+ if (type === "job_completed") {
5189
5245
  const jobId = String(payload.jobId ?? "").slice(0, 8);
5190
- const message = String(payload.message ?? "").trim();
5191
- return `[job ${jobId}] failed: ${message || "unknown"}`;
5246
+ const summary = String(payload.summary ?? "").trim();
5247
+ return `[job ${jobId}] completed${summary ? `: ${summary}` : ""}`;
5192
5248
  }
5193
5249
  if (type === "error") {
5194
5250
  const message = String(payload.message ?? "").trim();
@@ -5202,6 +5258,12 @@ function formatSessionEventLine(event) {
5202
5258
  }
5203
5259
  return null;
5204
5260
  }
5261
+ function compactCliSessionJobLogLine(line) {
5262
+ const compacted = line.replace(/\s+/g, " ").trim();
5263
+ if (compacted.length <= CLI_SESSION_JOB_LOG_MAX_CHARS)
5264
+ return compacted;
5265
+ return `${compacted.slice(0, CLI_SESSION_JOB_LOG_MAX_CHARS - 3)}...`;
5266
+ }
5205
5267
  function buildSessionEventReplayFingerprint(event) {
5206
5268
  const type = String(event.type ?? "").trim().toLowerCase();
5207
5269
  if (type !== "status")
@@ -5905,6 +5967,7 @@ export {
5905
5967
  formatTimestampedCliLine,
5906
5968
  formatSessionEventLine,
5907
5969
  formatRuntimeStartupTimingSummary,
5970
+ formatEmbeddedServiceLaunchDelayWarning,
5908
5971
  formatEmbeddedRuntimeHealthLines2 as formatEmbeddedRuntimeHealthLines,
5909
5972
  extractRemoteBuddySessionConsumerHealth,
5910
5973
  extractRemoteBuddyAutonomousEngineState,
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
435
435
  @keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
436
436
  @keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
437
437
  @keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
438
- @keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-22a236a301d5ba71c53234f142ec71d4.js" defer></script>
438
+ @keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-ff425ab85ad13c1920b8ee00abfae7dd.js" defer></script>
439
439
  </body></html>