@openscout/scout 0.2.23 → 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.
- package/bin/scout.mjs +9 -0
- package/dist/client/assets/index-CJIMoIMu.css +1 -0
- package/dist/client/assets/{index-B0OEtbrj.js → index-EaWhXnAI.js} +4 -4
- package/dist/client/index.html +4 -8
- package/dist/control-plane-client/assets/{index-D70CFXZt.js → index-B9LKyxlo.js} +1 -1
- package/dist/control-plane-client/index.html +1 -1
- package/dist/main.mjs +1903 -1831
- package/dist/pair-supervisor.mjs +33378 -0
- package/dist/scout-control-plane-web.mjs +23 -35
- package/dist/scout-web-server.mjs +181 -171
- package/package.json +2 -2
- package/dist/client/apple-icon.png +0 -0
- package/dist/client/assets/index-B4RPFOPU.css +0 -1
- package/dist/client/dispatch-button.svg +0 -1
- package/dist/client/icon-dark-32x32.png +0 -0
- package/dist/client/icon-light-32x32.png +0 -0
- package/dist/client/icon.svg +0 -26
- package/dist/client/placeholder-logo.png +0 -0
- package/dist/client/placeholder-logo.svg +0 -1
- package/dist/client/placeholder-user.jpg +0 -0
- package/dist/client/placeholder.jpg +0 -0
- package/dist/client/placeholder.svg +0 -1
- package/dist/client/scout.icns +0 -0
- package/dist/client/scout.png +0 -0
|
@@ -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",
|
|
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
|
|
7474
|
+
async function getScoutDesktopPairingState(currentDirectory) {
|
|
7494
7475
|
return readScoutPairingState(currentDirectory);
|
|
7495
7476
|
}
|
|
7496
|
-
async function
|
|
7477
|
+
async function refreshScoutDesktopPairingState(currentDirectory) {
|
|
7497
7478
|
return readScoutPairingState(currentDirectory);
|
|
7498
7479
|
}
|
|
7499
|
-
async function
|
|
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
|
-
|
|
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"
|
|
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 ?
|
|
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
|
|
10545
|
+
const result = await controlScoutDesktopPairingService(action, currentDirectory);
|
|
10558
10546
|
shellStateCache.invalidate();
|
|
10559
10547
|
return c.json(result);
|
|
10560
10548
|
});
|