@openscout/scout 0.2.39 → 0.2.40

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.
@@ -7,8 +7,8 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
9
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&family=Spectral:wght@500;600&display=swap" rel="stylesheet" />
10
- <script type="module" crossorigin src="/assets/index-CafSuiif.js"></script>
11
- <link rel="stylesheet" crossorigin href="/assets/index-X47yO2a-.css">
10
+ <script type="module" crossorigin src="/assets/index-B2VbvZaM.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index--5UC57U9.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="root"></div>
package/dist/main.mjs CHANGED
@@ -757,7 +757,7 @@ function diagnoseAgentIdentity(identity, candidates) {
757
757
  }
758
758
  return { kind: "ambiguous", candidates: matches };
759
759
  }
760
- var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, extractAgentSelectors, resolveAgentSelector;
760
+ var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", BUILT_IN_AGENT_DEFINITION_IDS, RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, extractAgentSelectors, resolveAgentSelector;
761
761
  var init_agent_identity = __esm(() => {
762
762
  DIMENSION_ALIASES = {
763
763
  workspace: "workspace",
@@ -771,6 +771,12 @@ var init_agent_identity = __esm(() => {
771
771
  host: "node"
772
772
  };
773
773
  normalizeAgentSelectorSegment = normalizeAgentIdentitySegment;
774
+ BUILT_IN_AGENT_DEFINITION_IDS = new Set([
775
+ SCOUT_DISPATCHER_AGENT_ID,
776
+ "builder",
777
+ "reviewer",
778
+ "research"
779
+ ]);
774
780
  RESERVED_AGENT_DEFINITION_IDS = new Set([
775
781
  SCOUT_DISPATCHER_AGENT_ID
776
782
  ]);
@@ -3577,7 +3583,7 @@ async function readRelayAgentOverrides() {
3577
3583
  return Object.fromEntries(Object.entries(agents).map(([agentId, record]) => {
3578
3584
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
3579
3585
  const projectRoot = normalizePath(record.projectRoot);
3580
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
3586
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
3581
3587
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
3582
3588
  const harnessProfiles = buildHarnessProfiles({
3583
3589
  projectRoot,
@@ -3612,7 +3618,7 @@ async function writeRelayAgentOverrides(overrides) {
3612
3618
  const normalizedAgents = Object.fromEntries(Object.entries(overrides).map(([agentId, record]) => {
3613
3619
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
3614
3620
  const projectRoot = normalizePath(record.projectRoot);
3615
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
3621
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
3616
3622
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
3617
3623
  const harnessProfiles = buildHarnessProfiles({
3618
3624
  projectRoot,
@@ -4190,14 +4196,14 @@ async function loadResolvedRelayAgents(options = {}) {
4190
4196
  const manifest = await readProjectConfig(projectRoot);
4191
4197
  const override = overrideByRoot.get(projectRoot);
4192
4198
  const resolvedAgent = manifest ? await resolveManifestBackedAgent(projectRoot, manifest, settings, override) : await resolveInferredAgent(projectRoot, settings, override);
4193
- if (!resolvedAgent.agentId || BUILT_IN_AGENT_IDS.has(resolvedAgent.agentId)) {
4199
+ if (!resolvedAgent.agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(resolvedAgent.definitionId)) {
4194
4200
  continue;
4195
4201
  }
4196
4202
  resolvedAgents.push(resolvedAgent);
4197
4203
  }
4198
4204
  const dedupedResolvedAgents = await dedupeResolvedAgentsByCanonicalProjectRoot(resolvedAgents);
4199
4205
  const configuredAgents = dedupedResolvedAgents.filter((agent) => agent.registrationKind === "configured");
4200
- const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([agentId]) => BUILT_IN_AGENT_IDS.has(agentId)));
4206
+ const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([, record]) => record.definitionId ? BUILT_IN_AGENT_DEFINITION_IDS.has(record.definitionId) : false));
4201
4207
  const nextOverrides = {
4202
4208
  ...builtInOverrides,
4203
4209
  ...Object.fromEntries(configuredAgents.map((agent) => [
@@ -4289,11 +4295,12 @@ async function ensureRelayAgentConfigured(value, options = {}) {
4289
4295
  async function ensureScoutRelayAgentConfigured(options = {}) {
4290
4296
  const settings = await readOpenScoutSettings({ currentDirectory: options.currentDirectory });
4291
4297
  const overrides = await readRelayAgentOverrides();
4292
- const existing = overrides[SCOUT_AGENT_ID];
4293
4298
  const resolvedProjectRoot = options.projectRoot ? normalizePath(options.projectRoot) : options.currentDirectory ? await findNearestProjectRoot(options.currentDirectory) ?? normalizePath(options.currentDirectory) : normalizePath(process.cwd());
4299
+ const qualifiedAgentId = buildRelayAgentInstance(SCOUT_AGENT_ID, resolvedProjectRoot).id;
4300
+ const existing = overrides[qualifiedAgentId] ?? overrides[SCOUT_AGENT_ID];
4294
4301
  const nextOverride = {
4295
4302
  ...existing,
4296
- agentId: SCOUT_AGENT_ID,
4303
+ agentId: qualifiedAgentId,
4297
4304
  definitionId: SCOUT_AGENT_ID,
4298
4305
  displayName: "Scout",
4299
4306
  projectName: "OpenScout",
@@ -4306,7 +4313,7 @@ async function ensureScoutRelayAgentConfigured(options = {}) {
4306
4313
  defaultHarness: "claude",
4307
4314
  harnessProfiles: buildHarnessProfiles({
4308
4315
  projectRoot: resolvedProjectRoot,
4309
- sessionKey: SCOUT_AGENT_ID,
4316
+ sessionKey: qualifiedAgentId,
4310
4317
  sessionPrefix: settings.agents.sessionPrefix,
4311
4318
  defaultHarness: "claude",
4312
4319
  profiles: existing?.harnessProfiles,
@@ -4322,8 +4329,11 @@ async function ensureScoutRelayAgentConfigured(options = {}) {
4322
4329
  }
4323
4330
  };
4324
4331
  nextOverride.launchArgs = nextOverride.harnessProfiles?.claude?.launchArgs ?? [];
4325
- if (JSON.stringify(existing) !== JSON.stringify(nextOverride)) {
4326
- overrides[SCOUT_AGENT_ID] = nextOverride;
4332
+ if (overrides[SCOUT_AGENT_ID]) {
4333
+ delete overrides[SCOUT_AGENT_ID];
4334
+ }
4335
+ if (JSON.stringify(overrides[qualifiedAgentId]) !== JSON.stringify(nextOverride)) {
4336
+ overrides[qualifiedAgentId] = nextOverride;
4327
4337
  await writeRelayAgentOverrides(overrides);
4328
4338
  }
4329
4339
  return nextOverride;
@@ -4335,7 +4345,7 @@ async function initializeOpenScoutSetup(options = {}) {
4335
4345
  syncLegacyMirror: true
4336
4346
  });
4337
4347
  }
4338
- 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;
4348
+ 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, 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;
4339
4349
  var init_setup = __esm(() => {
4340
4350
  init_dist();
4341
4351
  init_src();
@@ -4346,7 +4356,6 @@ var init_setup = __esm(() => {
4346
4356
  DEFAULT_OPERATOR_NAME = guessedOperatorName();
4347
4357
  DEFAULT_CAPABILITIES = ["chat", "invoke", "deliver"];
4348
4358
  DEFAULT_TELEGRAM_CONVERSATION_ID = SCOUT_PRIMARY_CONVERSATION_ID;
4349
- BUILT_IN_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
4350
4359
  PROJECT_SCAN_SKIP_DIRECTORIES = new Set([
4351
4360
  ".git",
4352
4361
  ".hg",
@@ -7075,7 +7084,7 @@ async function resolveLocalAgentByName(name) {
7075
7084
  return null;
7076
7085
  const overrides = await readRelayAgentOverrides();
7077
7086
  for (const [id, override] of Object.entries(overrides)) {
7078
- if (BUILT_IN_LOCAL_AGENT_IDS.has(id))
7087
+ if (BUILT_IN_AGENT_DEFINITION_IDS.has(id))
7079
7088
  continue;
7080
7089
  const defId = override.definitionId ?? id;
7081
7090
  if (defId === normalized || normalizeAgentSelectorSegment(override.projectName ?? "") === normalized) {
@@ -7086,7 +7095,7 @@ async function resolveLocalAgentByName(name) {
7086
7095
  }
7087
7096
  async function listLocalAgents(options = {}) {
7088
7097
  const overrides = await readRelayAgentOverrides();
7089
- return Object.entries(overrides).filter(([agentId]) => !BUILT_IN_LOCAL_AGENT_IDS.has(agentId)).map(([agentId, override]) => localAgentStatusFromRecord(agentId, localAgentRecordFromRelayAgentOverride(agentId, override), localAgentStatusSource(agentId, overrides))).sort((lhs, rhs) => lhs.projectName.localeCompare(rhs.projectName) || lhs.agentId.localeCompare(rhs.agentId));
7098
+ return Object.entries(overrides).filter(([agentId]) => !BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)).map(([agentId, override]) => localAgentStatusFromRecord(agentId, localAgentRecordFromRelayAgentOverride(agentId, override), localAgentStatusSource(agentId, overrides))).sort((lhs, rhs) => lhs.projectName.localeCompare(rhs.projectName) || lhs.agentId.localeCompare(rhs.agentId));
7090
7099
  }
7091
7100
  async function startLocalAgent(input) {
7092
7101
  const projectPath = normalizeProjectPath(input.projectPath);
@@ -7101,7 +7110,7 @@ async function startLocalAgent(input) {
7101
7110
  const findMatchForRoot = (root) => {
7102
7111
  let fallback = null;
7103
7112
  for (const [id, override] of Object.entries(overrides)) {
7104
- if (BUILT_IN_LOCAL_AGENT_IDS.has(id))
7113
+ if (BUILT_IN_AGENT_DEFINITION_IDS.has(id))
7105
7114
  continue;
7106
7115
  if (!override.projectRoot)
7107
7116
  continue;
@@ -7397,7 +7406,7 @@ async function loadRegisteredLocalAgentBindings(nodeId, options = {}) {
7397
7406
  return results;
7398
7407
  }
7399
7408
  async function inferLocalAgentBinding(agentId, nodeId) {
7400
- if (!agentId || BUILT_IN_LOCAL_AGENT_IDS.has(agentId)) {
7409
+ if (!agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
7401
7410
  return null;
7402
7411
  }
7403
7412
  const overrides = await readRelayAgentOverrides();
@@ -7420,7 +7429,7 @@ async function ensureLocalAgentBindingOnline(agentId, nodeId, options = {}) {
7420
7429
  if (registeredBinding) {
7421
7430
  return registeredBinding;
7422
7431
  }
7423
- if (BUILT_IN_LOCAL_AGENT_IDS.has(agentId)) {
7432
+ if (BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
7424
7433
  return null;
7425
7434
  }
7426
7435
  if (options.includeDiscovered) {
@@ -7523,7 +7532,7 @@ function shouldDisableGeneratedCodexEndpoint(endpoint) {
7523
7532
  }
7524
7533
  return endpoint.metadata?.source === "scout-app";
7525
7534
  }
7526
- var BUILT_IN_LOCAL_AGENT_IDS, MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude", SUPPORTED_LOCAL_AGENT_HARNESSES;
7535
+ var MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude", SUPPORTED_LOCAL_AGENT_HARNESSES;
7527
7536
  var init_local_agents = __esm(async () => {
7528
7537
  init_src();
7529
7538
  init_claude_stream_json();
@@ -7532,7 +7541,6 @@ var init_local_agents = __esm(async () => {
7532
7541
  init_support_paths();
7533
7542
  init_local_agent_template();
7534
7543
  await init_broker_service();
7535
- BUILT_IN_LOCAL_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
7536
7544
  MODULE_DIRECTORY = dirname5(fileURLToPath4(import.meta.url));
7537
7545
  OPENSCOUT_REPO_ROOT = resolve6(MODULE_DIRECTORY, "..", "..", "..");
7538
7546
  DEFAULT_LOCAL_AGENT_CAPABILITIES = ["chat", "invoke", "deliver"];
@@ -8559,7 +8567,10 @@ function whoEntryState(endpoints, registrationKind) {
8559
8567
  async function loadConfiguredAgentIds() {
8560
8568
  try {
8561
8569
  const overrides = await readRelayAgentOverrides();
8562
- return new Set(Object.entries(overrides).filter(([agentId]) => !BUILT_IN_SCOUT_AGENT_IDS.has(agentId)).map(([agentId]) => agentId));
8570
+ return new Set(Object.entries(overrides).filter(([agentId, record]) => {
8571
+ const defId = record.definitionId ?? agentId;
8572
+ return !BUILT_IN_AGENT_DEFINITION_IDS.has(defId);
8573
+ }).map(([agentId]) => agentId));
8563
8574
  } catch {
8564
8575
  return new Set;
8565
8576
  }
@@ -8730,7 +8741,7 @@ function buildScoutEnrollmentPrompt(input) {
8730
8741
  ].filter((line) => Boolean(line)).join(`
8731
8742
  `);
8732
8743
  }
8733
- var BROKER_SHARED_CHANNEL_ID = "channel.shared", BROKER_VOICE_CHANNEL_ID = "channel.voice", BROKER_SYSTEM_CHANNEL_ID = "channel.system", OPERATOR_ID = "operator", DEFAULT_BROKER_HOST2 = "127.0.0.1", DEFAULT_BROKER_PORT2 = 65535, BUILT_IN_SCOUT_AGENT_IDS;
8744
+ var BROKER_SHARED_CHANNEL_ID = "channel.shared", BROKER_VOICE_CHANNEL_ID = "channel.voice", BROKER_SYSTEM_CHANNEL_ID = "channel.system", OPERATOR_ID = "operator", DEFAULT_BROKER_HOST2 = "127.0.0.1", DEFAULT_BROKER_PORT2 = 65535;
8734
8745
  var init_service = __esm(async () => {
8735
8746
  init_src();
8736
8747
  init_setup();
@@ -8738,7 +8749,6 @@ var init_service = __esm(async () => {
8738
8749
  init_user_config();
8739
8750
  init_paths();
8740
8751
  await init_local_agents();
8741
- BUILT_IN_SCOUT_AGENT_IDS = new Set([SCOUT_AGENT_ID, "builder", "reviewer", "research"]);
8742
8752
  });
8743
8753
 
8744
8754
  // ../../apps/desktop/src/cli/commands/ask.ts
@@ -2303,7 +2303,7 @@ function diagnoseAgentIdentity(identity, candidates) {
2303
2303
  }
2304
2304
  return { kind: "ambiguous", candidates: matches };
2305
2305
  }
2306
- var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, resolveAgentSelector;
2306
+ var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", BUILT_IN_AGENT_DEFINITION_IDS, RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, resolveAgentSelector;
2307
2307
  var init_agent_identity = __esm(() => {
2308
2308
  DIMENSION_ALIASES = {
2309
2309
  workspace: "workspace",
@@ -2317,6 +2317,12 @@ var init_agent_identity = __esm(() => {
2317
2317
  host: "node"
2318
2318
  };
2319
2319
  normalizeAgentSelectorSegment = normalizeAgentIdentitySegment;
2320
+ BUILT_IN_AGENT_DEFINITION_IDS = new Set([
2321
+ SCOUT_DISPATCHER_AGENT_ID,
2322
+ "builder",
2323
+ "reviewer",
2324
+ "research"
2325
+ ]);
2320
2326
  RESERVED_AGENT_DEFINITION_IDS = new Set([
2321
2327
  SCOUT_DISPATCHER_AGENT_ID
2322
2328
  ]);
@@ -3616,7 +3622,7 @@ async function readRelayAgentOverrides() {
3616
3622
  return Object.fromEntries(Object.entries(agents).map(([agentId, record]) => {
3617
3623
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
3618
3624
  const projectRoot = normalizePath(record.projectRoot);
3619
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
3625
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
3620
3626
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
3621
3627
  const harnessProfiles = buildHarnessProfiles({
3622
3628
  projectRoot,
@@ -3651,7 +3657,7 @@ async function writeRelayAgentOverrides(overrides) {
3651
3657
  const normalizedAgents = Object.fromEntries(Object.entries(overrides).map(([agentId, record]) => {
3652
3658
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
3653
3659
  const projectRoot = normalizePath(record.projectRoot);
3654
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
3660
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
3655
3661
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
3656
3662
  const harnessProfiles = buildHarnessProfiles({
3657
3663
  projectRoot,
@@ -4229,14 +4235,14 @@ async function loadResolvedRelayAgents(options = {}) {
4229
4235
  const manifest = await readProjectConfig(projectRoot);
4230
4236
  const override = overrideByRoot.get(projectRoot);
4231
4237
  const resolvedAgent = manifest ? await resolveManifestBackedAgent(projectRoot, manifest, settings, override) : await resolveInferredAgent(projectRoot, settings, override);
4232
- if (!resolvedAgent.agentId || BUILT_IN_AGENT_IDS.has(resolvedAgent.agentId)) {
4238
+ if (!resolvedAgent.agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(resolvedAgent.definitionId)) {
4233
4239
  continue;
4234
4240
  }
4235
4241
  resolvedAgents.push(resolvedAgent);
4236
4242
  }
4237
4243
  const dedupedResolvedAgents = await dedupeResolvedAgentsByCanonicalProjectRoot(resolvedAgents);
4238
4244
  const configuredAgents = dedupedResolvedAgents.filter((agent) => agent.registrationKind === "configured");
4239
- const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([agentId]) => BUILT_IN_AGENT_IDS.has(agentId)));
4245
+ const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([, record]) => record.definitionId ? BUILT_IN_AGENT_DEFINITION_IDS.has(record.definitionId) : false));
4240
4246
  const nextOverrides = {
4241
4247
  ...builtInOverrides,
4242
4248
  ...Object.fromEntries(configuredAgents.map((agent) => [
@@ -4325,7 +4331,7 @@ async function ensureRelayAgentConfigured(value, options = {}) {
4325
4331
  registrationKind: "configured"
4326
4332
  };
4327
4333
  }
4328
- 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;
4334
+ 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, 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;
4329
4335
  var init_setup = __esm(() => {
4330
4336
  init_dist();
4331
4337
  init_src();
@@ -4336,7 +4342,6 @@ var init_setup = __esm(() => {
4336
4342
  DEFAULT_OPERATOR_NAME = guessedOperatorName();
4337
4343
  DEFAULT_CAPABILITIES = ["chat", "invoke", "deliver"];
4338
4344
  DEFAULT_TELEGRAM_CONVERSATION_ID = SCOUT_PRIMARY_CONVERSATION_ID;
4339
- BUILT_IN_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
4340
4345
  PROJECT_SCAN_SKIP_DIRECTORIES = new Set([
4341
4346
  ".git",
4342
4347
  ".hg",
@@ -6080,7 +6085,7 @@ async function startLocalAgent(input) {
6080
6085
  const findMatchForRoot = (root) => {
6081
6086
  let fallback = null;
6082
6087
  for (const [id, override] of Object.entries(overrides)) {
6083
- if (BUILT_IN_LOCAL_AGENT_IDS.has(id))
6088
+ if (BUILT_IN_AGENT_DEFINITION_IDS.has(id))
6084
6089
  continue;
6085
6090
  if (!override.projectRoot)
6086
6091
  continue;
@@ -6359,7 +6364,7 @@ async function loadRegisteredLocalAgentBindings(nodeId, options = {}) {
6359
6364
  return results;
6360
6365
  }
6361
6366
  async function inferLocalAgentBinding(agentId, nodeId) {
6362
- if (!agentId || BUILT_IN_LOCAL_AGENT_IDS.has(agentId)) {
6367
+ if (!agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
6363
6368
  return null;
6364
6369
  }
6365
6370
  const overrides = await readRelayAgentOverrides();
@@ -6382,7 +6387,7 @@ async function ensureLocalAgentBindingOnline(agentId, nodeId, options = {}) {
6382
6387
  if (registeredBinding) {
6383
6388
  return registeredBinding;
6384
6389
  }
6385
- if (BUILT_IN_LOCAL_AGENT_IDS.has(agentId)) {
6390
+ if (BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
6386
6391
  return null;
6387
6392
  }
6388
6393
  if (options.includeDiscovered) {
@@ -6405,7 +6410,7 @@ async function ensureLocalAgentBindingOnline(agentId, nodeId, options = {}) {
6405
6410
  const onlineRecord = await ensureLocalAgentOnline(agentId, recordForHarness(localAgentRecordFromRelayAgentOverride(agentId, override), options.harness));
6406
6411
  return buildLocalAgentBinding(agentId, onlineRecord, isLocalAgentRecordOnline(agentId, onlineRecord), nodeId, "relay-agent-registry");
6407
6412
  }
6408
- var BUILT_IN_LOCAL_AGENT_IDS, MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude";
6413
+ var MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude";
6409
6414
  var init_local_agents = __esm(async () => {
6410
6415
  init_src();
6411
6416
  init_claude_stream_json();
@@ -6414,7 +6419,6 @@ var init_local_agents = __esm(async () => {
6414
6419
  init_support_paths();
6415
6420
  init_local_agent_template();
6416
6421
  await init_broker_service();
6417
- BUILT_IN_LOCAL_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
6418
6422
  MODULE_DIRECTORY = dirname5(fileURLToPath4(import.meta.url));
6419
6423
  OPENSCOUT_REPO_ROOT = resolve4(MODULE_DIRECTORY, "..", "..", "..");
6420
6424
  DEFAULT_LOCAL_AGENT_CAPABILITIES = ["chat", "invoke", "deliver"];
@@ -12141,7 +12145,6 @@ var BROKER_SHARED_CHANNEL_ID = "channel.shared";
12141
12145
  var OPERATOR_ID = "operator";
12142
12146
  var DEFAULT_BROKER_HOST2 = "127.0.0.1";
12143
12147
  var DEFAULT_BROKER_PORT2 = 65535;
12144
- var BUILT_IN_SCOUT_AGENT_IDS = new Set([SCOUT_AGENT_ID, "builder", "reviewer", "research"]);
12145
12148
  function buildScoutBrokerUrlFromEnv() {
12146
12149
  const host = process.env.OPENSCOUT_BROKER_HOST ?? DEFAULT_BROKER_HOST2;
12147
12150
  const port = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(DEFAULT_BROKER_PORT2), 10);
@@ -1232,7 +1232,7 @@ function diagnoseAgentIdentity(identity, candidates) {
1232
1232
  }
1233
1233
  return { kind: "ambiguous", candidates: matches };
1234
1234
  }
1235
- var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, extractAgentSelectors, resolveAgentSelector;
1235
+ var DIMENSION_ALIASES, normalizeAgentSelectorSegment, SCOUT_DISPATCHER_AGENT_ID = "scout", BUILT_IN_AGENT_DEFINITION_IDS, RESERVED_AGENT_DEFINITION_IDS, parseAgentSelector, formatAgentSelector, extractAgentSelectors, resolveAgentSelector;
1236
1236
  var init_agent_identity = __esm(() => {
1237
1237
  DIMENSION_ALIASES = {
1238
1238
  workspace: "workspace",
@@ -1246,6 +1246,12 @@ var init_agent_identity = __esm(() => {
1246
1246
  host: "node"
1247
1247
  };
1248
1248
  normalizeAgentSelectorSegment = normalizeAgentIdentitySegment;
1249
+ BUILT_IN_AGENT_DEFINITION_IDS = new Set([
1250
+ SCOUT_DISPATCHER_AGENT_ID,
1251
+ "builder",
1252
+ "reviewer",
1253
+ "research"
1254
+ ]);
1249
1255
  RESERVED_AGENT_DEFINITION_IDS = new Set([
1250
1256
  SCOUT_DISPATCHER_AGENT_ID
1251
1257
  ]);
@@ -2693,7 +2699,7 @@ async function readRelayAgentOverrides() {
2693
2699
  return Object.fromEntries(Object.entries(agents).map(([agentId, record]) => {
2694
2700
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
2695
2701
  const projectRoot = normalizePath(record.projectRoot);
2696
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
2702
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
2697
2703
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
2698
2704
  const harnessProfiles = buildHarnessProfiles({
2699
2705
  projectRoot,
@@ -2728,7 +2734,7 @@ async function writeRelayAgentOverrides(overrides) {
2728
2734
  const normalizedAgents = Object.fromEntries(Object.entries(overrides).map(([agentId, record]) => {
2729
2735
  const definitionId = normalizeAgentId(record.definitionId || record.agentId || agentId);
2730
2736
  const projectRoot = normalizePath(record.projectRoot);
2731
- const concreteAgentId = BUILT_IN_AGENT_IDS.has(definitionId) ? definitionId : buildRelayAgentInstance(definitionId, projectRoot).id;
2737
+ const concreteAgentId = buildRelayAgentInstance(definitionId, projectRoot).id;
2732
2738
  const defaultHarness = normalizeManagedHarness(typeof record.defaultHarness === "string" ? record.defaultHarness : record.runtime?.harness, "claude");
2733
2739
  const harnessProfiles = buildHarnessProfiles({
2734
2740
  projectRoot,
@@ -3306,14 +3312,14 @@ async function loadResolvedRelayAgents(options = {}) {
3306
3312
  const manifest = await readProjectConfig(projectRoot);
3307
3313
  const override = overrideByRoot.get(projectRoot);
3308
3314
  const resolvedAgent = manifest ? await resolveManifestBackedAgent(projectRoot, manifest, settings, override) : await resolveInferredAgent(projectRoot, settings, override);
3309
- if (!resolvedAgent.agentId || BUILT_IN_AGENT_IDS.has(resolvedAgent.agentId)) {
3315
+ if (!resolvedAgent.agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(resolvedAgent.definitionId)) {
3310
3316
  continue;
3311
3317
  }
3312
3318
  resolvedAgents.push(resolvedAgent);
3313
3319
  }
3314
3320
  const dedupedResolvedAgents = await dedupeResolvedAgentsByCanonicalProjectRoot(resolvedAgents);
3315
3321
  const configuredAgents = dedupedResolvedAgents.filter((agent) => agent.registrationKind === "configured");
3316
- const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([agentId]) => BUILT_IN_AGENT_IDS.has(agentId)));
3322
+ const builtInOverrides = Object.fromEntries(Object.entries(overrides).filter(([, record]) => record.definitionId ? BUILT_IN_AGENT_DEFINITION_IDS.has(record.definitionId) : false));
3317
3323
  const nextOverrides = {
3318
3324
  ...builtInOverrides,
3319
3325
  ...Object.fromEntries(configuredAgents.map((agent) => [
@@ -3402,7 +3408,7 @@ async function ensureRelayAgentConfigured(value, options = {}) {
3402
3408
  registrationKind: "configured"
3403
3409
  };
3404
3410
  }
3405
- 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;
3411
+ 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, 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;
3406
3412
  var init_setup = __esm(() => {
3407
3413
  init_dist();
3408
3414
  init_src();
@@ -3413,7 +3419,6 @@ var init_setup = __esm(() => {
3413
3419
  DEFAULT_OPERATOR_NAME = guessedOperatorName();
3414
3420
  DEFAULT_CAPABILITIES = ["chat", "invoke", "deliver"];
3415
3421
  DEFAULT_TELEGRAM_CONVERSATION_ID = SCOUT_PRIMARY_CONVERSATION_ID;
3416
- BUILT_IN_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
3417
3422
  PROJECT_SCAN_SKIP_DIRECTORIES = new Set([
3418
3423
  ".git",
3419
3424
  ".hg",
@@ -5235,7 +5240,7 @@ function buildLocalAgentBinding(agentId, record, alive, nodeId, source) {
5235
5240
  };
5236
5241
  }
5237
5242
  async function inferLocalAgentBinding(agentId, nodeId) {
5238
- if (!agentId || BUILT_IN_LOCAL_AGENT_IDS.has(agentId)) {
5243
+ if (!agentId || BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
5239
5244
  return null;
5240
5245
  }
5241
5246
  const overrides = await readRelayAgentOverrides();
@@ -5246,7 +5251,7 @@ async function inferLocalAgentBinding(agentId, nodeId) {
5246
5251
  const record = localAgentRecordFromRelayAgentOverride(agentId, override);
5247
5252
  return buildLocalAgentBinding(agentId, record, isLocalAgentRecordOnline(agentId, record), nodeId, "relay-agent-registry");
5248
5253
  }
5249
- var BUILT_IN_LOCAL_AGENT_IDS, MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude";
5254
+ var MODULE_DIRECTORY, OPENSCOUT_REPO_ROOT, DEFAULT_LOCAL_AGENT_CAPABILITIES, DEFAULT_LOCAL_AGENT_HARNESS = "claude";
5250
5255
  var init_local_agents = __esm(async () => {
5251
5256
  init_src();
5252
5257
  init_claude_stream_json();
@@ -5255,7 +5260,6 @@ var init_local_agents = __esm(async () => {
5255
5260
  init_support_paths();
5256
5261
  init_local_agent_template();
5257
5262
  await init_broker_service();
5258
- BUILT_IN_LOCAL_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
5259
5263
  MODULE_DIRECTORY = dirname6(fileURLToPath5(import.meta.url));
5260
5264
  OPENSCOUT_REPO_ROOT = resolve5(MODULE_DIRECTORY, "..", "..", "..");
5261
5265
  DEFAULT_LOCAL_AGENT_CAPABILITIES = ["chat", "invoke", "deliver"];
@@ -7563,6 +7567,7 @@ async function controlScoutDesktopPairingService(action, currentDirectory) {
7563
7567
  }
7564
7568
 
7565
7569
  // apps/desktop/src/app/desktop/shell.ts
7570
+ init_src();
7566
7571
  init_setup();
7567
7572
  import { readFile as readFile5, readdir as readdir3, stat as stat3 } from "fs/promises";
7568
7573
  import { performance } from "perf_hooks";
@@ -7599,7 +7604,6 @@ var BROKER_SYSTEM_CHANNEL_ID = "channel.system";
7599
7604
  var OPERATOR_ID = "operator";
7600
7605
  var DEFAULT_BROKER_HOST2 = "127.0.0.1";
7601
7606
  var DEFAULT_BROKER_PORT2 = 65535;
7602
- var BUILT_IN_SCOUT_AGENT_IDS = new Set([SCOUT_AGENT_ID, "builder", "reviewer", "research"]);
7603
7607
  function buildScoutBrokerUrlFromEnv() {
7604
7608
  const host = process.env.OPENSCOUT_BROKER_HOST ?? DEFAULT_BROKER_HOST2;
7605
7609
  const port = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(DEFAULT_BROKER_PORT2), 10);
@@ -8345,7 +8349,6 @@ function readProjectGitActivity(projectRoot) {
8345
8349
 
8346
8350
  // apps/desktop/src/app/desktop/shell.ts
8347
8351
  var OPERATOR_ID2 = "operator";
8348
- var BUILT_IN_ROLE_AGENT_IDS = new Set(["scout", "builder", "reviewer", "research"]);
8349
8352
  var RECENT_AGENT_ACTIVITY_WINDOW_SECONDS = 60 * 60 * 24 * 30;
8350
8353
  var RECONCILE_OFFLINE_WAIT_SECONDS = 60 * 3;
8351
8354
  var RECONCILE_NO_FOLLOW_UP_SECONDS = 60 * 10;
@@ -8556,7 +8559,7 @@ function interAgentThreadKey(participantIds) {
8556
8559
  function visibleRelayAgentIds(snapshot, configuredAgentIds, messagesByConversation, directActivity) {
8557
8560
  const visible = new Set([
8558
8561
  ...configuredAgentIds,
8559
- ...Array.from(BUILT_IN_ROLE_AGENT_IDS)
8562
+ ...Array.from(BUILT_IN_AGENT_DEFINITION_IDS)
8560
8563
  ]);
8561
8564
  const cutoff = Math.floor(Date.now() / 1000) - RECENT_AGENT_ACTIVITY_WINDOW_SECONDS;
8562
8565
  for (const [agentId, activity] of directActivity.entries()) {