@openscout/scout 0.2.22 → 0.2.24

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.
@@ -3369,7 +3369,7 @@ async function ensureRelayAgentConfigured(value, options = {}) {
3369
3369
  registrationKind: "configured"
3370
3370
  };
3371
3371
  }
3372
- var SCOUT_PRIMARY_CONVERSATION_ID = "dm.scout.primary", MANAGED_AGENT_HARNESSES, DEFAULT_OPERATOR_NAME, DEFAULT_CAPABILITIES, DEFAULT_TRANSPORT = "claude_stream_json", DEFAULT_TELEGRAM_MODE = "polling", LEGACY_DEFAULT_TELEGRAM_CONVERSATION_ID = "channel.shared", DEFAULT_TELEGRAM_CONVERSATION_ID, SETTINGS_VERSION = 1, PROJECT_CONFIG_VERSION = 1, BUILT_IN_AGENT_IDS, PROJECT_SCAN_SKIP_DIRECTORIES, PROJECT_STRONG_MARKERS, PROJECT_WEAK_MARKERS, PROJECT_HARNESS_MARKERS, PROJECT_STRONG_MARKERS_FLAT_NESTED, PROJECT_WEAK_MARKERS_FLAT_NESTED, GIT_BRANCH_CACHE_TTL_MS = 15000, gitBranchCache, SCOUT_SKILL_FILE_NAME = "SKILL.md", SETUP_MODULE_DIRECTORY, SCOUT_SKILL_REPO_ROOT, SCOUT_SKILL_INSTALL_PATHS, PROJECT_SCAN_MAX_DEPTH = 64;
3372
+ var SCOUT_AGENT_ID = "scout", SCOUT_PRIMARY_CONVERSATION_ID = "dm.scout.primary", MANAGED_AGENT_HARNESSES, DEFAULT_OPERATOR_NAME, DEFAULT_CAPABILITIES, DEFAULT_TRANSPORT = "claude_stream_json", DEFAULT_TELEGRAM_MODE = "polling", LEGACY_DEFAULT_TELEGRAM_CONVERSATION_ID = "channel.shared", DEFAULT_TELEGRAM_CONVERSATION_ID, SETTINGS_VERSION = 1, PROJECT_CONFIG_VERSION = 1, BUILT_IN_AGENT_IDS, PROJECT_SCAN_SKIP_DIRECTORIES, PROJECT_STRONG_MARKERS, PROJECT_WEAK_MARKERS, PROJECT_HARNESS_MARKERS, PROJECT_STRONG_MARKERS_FLAT_NESTED, PROJECT_WEAK_MARKERS_FLAT_NESTED, GIT_BRANCH_CACHE_TTL_MS = 15000, gitBranchCache, SCOUT_SKILL_FILE_NAME = "SKILL.md", SETUP_MODULE_DIRECTORY, SCOUT_SKILL_REPO_ROOT, SCOUT_SKILL_INSTALL_PATHS, PROJECT_SCAN_MAX_DEPTH = 64;
3373
3373
  var init_setup = __esm(() => {
3374
3374
  init_dist();
3375
3375
  init_src();
@@ -6832,18 +6832,6 @@ function looksLikeWorkspaceRoot(candidate) {
6832
6832
  }
6833
6833
  }
6834
6834
  function looksLikePackagedAppRoot(candidate) {
6835
- const packageJsonPath = join5(candidate, "package.json");
6836
- if (!existsSync4(packageJsonPath)) {
6837
- return false;
6838
- }
6839
- try {
6840
- const parsed = JSON.parse(readFileSync2(packageJsonPath, "utf8"));
6841
- return parsed.name === "@scout/electron-app";
6842
- } catch {
6843
- return false;
6844
- }
6845
- }
6846
- function looksLikeInstalledCliRoot(candidate) {
6847
6835
  const packageJsonPath = join5(candidate, "package.json");
6848
6836
  if (!existsSync4(packageJsonPath)) {
6849
6837
  return false;
@@ -6908,14 +6896,8 @@ function resolveScoutAppRoot(options = {}) {
6908
6896
  return packagedRoot;
6909
6897
  }
6910
6898
  }
6911
- for (const start of starts) {
6912
- const installedCliRoot = findMatchingAncestor(start, looksLikeInstalledCliRoot);
6913
- if (installedCliRoot) {
6914
- return installedCliRoot;
6915
- }
6916
- }
6917
6899
  const workspaceRoot = resolveScoutWorkspaceRoot(options);
6918
- for (const relativePath of [["apps", "desktop"], ["apps", "scout"]]) {
6900
+ for (const relativePath of [["apps", "desktop"], ["apps", "scout"], ["packages", "cli"]]) {
6919
6901
  const candidate = resolve3(workspaceRoot, ...relativePath);
6920
6902
  if (looksLikeSourceAppRoot(candidate)) {
6921
6903
  return candidate;
@@ -7340,9 +7322,8 @@ function resolveScoutBunExecutable() {
7340
7322
  function resolveScoutPairingRuntimeScriptPath() {
7341
7323
  const appRoot = resolveScoutAppRoot();
7342
7324
  const candidates = [
7343
- join6(appRoot, "dist", "electron", SCOUT_PAIRING_RUNTIME_SCRIPT.replace(/\.ts$/, ".js")),
7344
- join6(appRoot, "bin", SCOUT_PAIRING_RUNTIME_SCRIPT),
7345
- join6(appRoot, "..", "..", "packages", "electron-app", "dist", "electron", SCOUT_PAIRING_RUNTIME_SCRIPT.replace(/\.ts$/, ".js"))
7325
+ join6(appRoot, "dist", SCOUT_PAIRING_RUNTIME_SCRIPT.replace(/\.ts$/, ".mjs")),
7326
+ join6(appRoot, "bin", SCOUT_PAIRING_RUNTIME_SCRIPT)
7346
7327
  ];
7347
7328
  for (const candidate of candidates) {
7348
7329
  if (existsSync5(candidate)) {
@@ -7490,13 +7471,13 @@ async function ensureScoutPairingRuntimeStarted() {
7490
7471
  }
7491
7472
  await startScoutPairingRuntime();
7492
7473
  }
7493
- async function getScoutElectronPairingState(currentDirectory) {
7474
+ async function getScoutDesktopPairingState(currentDirectory) {
7494
7475
  return readScoutPairingState(currentDirectory);
7495
7476
  }
7496
- async function refreshScoutElectronPairingState(currentDirectory) {
7477
+ async function refreshScoutDesktopPairingState(currentDirectory) {
7497
7478
  return readScoutPairingState(currentDirectory);
7498
7479
  }
7499
- async function controlScoutElectronPairingService(action, currentDirectory) {
7480
+ async function controlScoutDesktopPairingService(action, currentDirectory) {
7500
7481
  switch (action) {
7501
7482
  case "start":
7502
7483
  await ensureDefaultScoutPairingWorkspaceConfig(currentDirectory);
@@ -7550,6 +7531,7 @@ var BROKER_SYSTEM_CHANNEL_ID = "channel.system";
7550
7531
  var OPERATOR_ID = "operator";
7551
7532
  var DEFAULT_BROKER_HOST2 = "127.0.0.1";
7552
7533
  var DEFAULT_BROKER_PORT2 = 65535;
7534
+ var BUILT_IN_SCOUT_AGENT_IDS = new Set([SCOUT_AGENT_ID, "builder", "reviewer", "research"]);
7553
7535
  function buildScoutBrokerUrlFromEnv() {
7554
7536
  const host = process.env.OPENSCOUT_BROKER_HOST ?? DEFAULT_BROKER_HOST2;
7555
7537
  const port = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(DEFAULT_BROKER_PORT2), 10);
@@ -8140,7 +8122,9 @@ function runOptionalCommand(command, args) {
8140
8122
 
8141
8123
  // apps/desktop/src/app/desktop/shell-probes.ts
8142
8124
  var PROJECT_GIT_ACTIVITY_CACHE_TTL_MS = 60000;
8125
+ var TMUX_SESSION_CACHE_TTL_MS = 2000;
8143
8126
  var projectGitActivityCache = new Map;
8127
+ var tmuxSessionCache = null;
8144
8128
  function readHelperStatus() {
8145
8129
  const statusPath = resolveOpenScoutSupportPaths().desktopStatusPath;
8146
8130
  if (!existsSync8(statusPath)) {
@@ -8166,9 +8150,12 @@ function readHelperStatus() {
8166
8150
  }
8167
8151
  }
8168
8152
  function readTmuxSessions() {
8153
+ if (tmuxSessionCache && Date.now() - tmuxSessionCache.cachedAt < TMUX_SESSION_CACHE_TTL_MS) {
8154
+ return tmuxSessionCache.sessions;
8155
+ }
8169
8156
  try {
8170
8157
  const stdout = readTmuxSessionOutput();
8171
- return stdout.split(`
8158
+ const sessions3 = stdout.split(`
8172
8159
  `).map((line) => line.trim()).filter(Boolean).map((line) => {
8173
8160
  const [name, createdAtRaw] = line.split("\t");
8174
8161
  return {
@@ -8176,6 +8163,11 @@ function readTmuxSessions() {
8176
8163
  createdAt: createdAtRaw ? Number.parseInt(createdAtRaw, 10) : null
8177
8164
  };
8178
8165
  });
8166
+ tmuxSessionCache = {
8167
+ cachedAt: Date.now(),
8168
+ sessions: sessions3
8169
+ };
8170
+ return sessions3;
8179
8171
  } catch {
8180
8172
  return [];
8181
8173
  }
@@ -8300,8 +8292,6 @@ function activeEndpoint(snapshot, actorId) {
8300
8292
  return 1;
8301
8293
  case "waiting":
8302
8294
  return 2;
8303
- case "degraded":
8304
- return 3;
8305
8295
  case "offline":
8306
8296
  return 5;
8307
8297
  default:
@@ -8654,7 +8644,7 @@ function machineEndpointState(endpoint, activity) {
8654
8644
  if (endpoint.state === "idle") {
8655
8645
  return "idle";
8656
8646
  }
8657
- if (endpoint.state === "waiting" || endpoint.state === "degraded") {
8647
+ if (endpoint.state === "waiting") {
8658
8648
  return "waiting";
8659
8649
  }
8660
8650
  return "offline";
@@ -10505,9 +10495,7 @@ function queryFlights(opts) {
10505
10495
  ${where ? `WHERE ${where}` : ""}
10506
10496
  ORDER BY f.started_at DESC NULLS LAST
10507
10497
  LIMIT 100`;
10508
- const params = [];
10509
- if (opts?.agentId)
10510
- params.push(opts.agentId);
10498
+ const params = opts?.agentId ? [opts.agentId] : [];
10511
10499
  const rows = db().prepare(sql).all(...params);
10512
10500
  return rows.map((r) => ({
10513
10501
  id: r.id,
@@ -10542,7 +10530,7 @@ async function loadControlPlaneShellState(currentDirectory) {
10542
10530
  return composeScoutDesktopRelayShellPatch({ currentDirectory });
10543
10531
  }
10544
10532
  async function loadPairingState(currentDirectory, refresh) {
10545
- return refresh ? refreshScoutElectronPairingState(currentDirectory) : getScoutElectronPairingState(currentDirectory);
10533
+ return refresh ? refreshScoutDesktopPairingState(currentDirectory) : getScoutDesktopPairingState(currentDirectory);
10546
10534
  }
10547
10535
  function createScoutControlPlaneServer(options) {
10548
10536
  const shellTtl = options.shellStateCacheTtlMs ?? 15000;
@@ -10554,7 +10542,7 @@ function createScoutControlPlaneServer(options) {
10554
10542
  app.get("/api/pairing-state/refresh", async (c) => c.json(await loadPairingState(currentDirectory, true)));
10555
10543
  app.post("/api/pairing/control", async (c) => {
10556
10544
  const { action } = await c.req.json();
10557
- const result = await controlScoutElectronPairingService(action, currentDirectory);
10545
+ const result = await controlScoutDesktopPairingService(action, currentDirectory);
10558
10546
  shellStateCache.invalidate();
10559
10547
  return c.json(result);
10560
10548
  });