@ganglion/xacpx 0.23.0-beta.0 → 0.23.0-beta.2
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/dist/cli.js
CHANGED
|
@@ -50322,6 +50322,7 @@ class AgentEndpointRegistry {
|
|
|
50322
50322
|
}),
|
|
50323
50323
|
node: ep.displayName ?? ep.nodeId,
|
|
50324
50324
|
displayName: ep.displayName,
|
|
50325
|
+
sessionAlias: ep.sessionAlias,
|
|
50325
50326
|
agent: ep.agent,
|
|
50326
50327
|
workspace: ep.workspace,
|
|
50327
50328
|
state: ep.state,
|
|
@@ -50352,6 +50353,7 @@ class AgentEndpointRegistry {
|
|
|
50352
50353
|
activity: candidate.endpoint.activity,
|
|
50353
50354
|
capabilities: candidate.endpoint.capabilities,
|
|
50354
50355
|
...candidate.endpoint.displayName ? { displayName: candidate.endpoint.displayName } : {},
|
|
50356
|
+
...candidate.endpoint.sessionAlias ? { sessionAlias: candidate.endpoint.sessionAlias } : {},
|
|
50355
50357
|
updatedAt: Date.now()
|
|
50356
50358
|
}));
|
|
50357
50359
|
}
|
|
@@ -50502,7 +50504,7 @@ class AgentEndpointRegistry {
|
|
|
50502
50504
|
const matches = candidates.filter((candidate) => {
|
|
50503
50505
|
if (displayNameFilter) {
|
|
50504
50506
|
const candDisplayName = candidate.endpoint.displayName?.trim().toLowerCase();
|
|
50505
|
-
const candAlias = candidate.runtime.kind === "logical" ? candidate.runtime.alias?.trim().toLowerCase() : undefined;
|
|
50507
|
+
const candAlias = candidate.endpoint.sessionAlias?.trim().toLowerCase() ?? (candidate.runtime.kind === "logical" ? candidate.runtime.alias?.trim().toLowerCase() : undefined);
|
|
50506
50508
|
if (candDisplayName !== displayNameFilter && candAlias !== displayNameFilter) {
|
|
50507
50509
|
return false;
|
|
50508
50510
|
}
|
|
@@ -50593,7 +50595,8 @@ class AgentEndpointRegistry {
|
|
|
50593
50595
|
nodeId: this.deps.nodeId,
|
|
50594
50596
|
endpointId: session3.logical_session_id
|
|
50595
50597
|
};
|
|
50596
|
-
const
|
|
50598
|
+
const sessionAlias = toDisplaySessionAlias(session3.alias);
|
|
50599
|
+
const displayName = session3.display_name || sessionAlias;
|
|
50597
50600
|
const isRunning = this.deps.isSessionActive?.(session3.alias) ?? false;
|
|
50598
50601
|
return {
|
|
50599
50602
|
address,
|
|
@@ -50602,6 +50605,7 @@ class AgentEndpointRegistry {
|
|
|
50602
50605
|
agent: session3.agent,
|
|
50603
50606
|
workspace: session3.workspace,
|
|
50604
50607
|
displayName,
|
|
50608
|
+
sessionAlias,
|
|
50605
50609
|
state: isRunning ? "running" : "idle",
|
|
50606
50610
|
activity: {
|
|
50607
50611
|
status: isRunning ? "working" : "idle"
|
|
@@ -57747,7 +57751,7 @@ import { execFile as execFile2, spawn as spawn17 } from "node:child_process";
|
|
|
57747
57751
|
import { promisify as promisify2 } from "node:util";
|
|
57748
57752
|
import { homedir as homedir14 } from "node:os";
|
|
57749
57753
|
import { readdir as readdir9, realpath as realpath6, stat as stat7, open as open10, readFile as readFile23, writeFile as writeFile9, mkdir as mkdir14, rename as fsRename, cp, rm as rm13 } from "node:fs/promises";
|
|
57750
|
-
import { basename as basename7, dirname as dirname22, isAbsolute as isAbsolute7, relative as relative3, resolve as resolve7, sep as sep4 } from "node:path";
|
|
57754
|
+
import { basename as basename7, dirname as dirname22, isAbsolute as isAbsolute7, join as join33, relative as relative3, resolve as resolve7, sep as sep4 } from "node:path";
|
|
57751
57755
|
import writeFileAtomic3 from "write-file-atomic";
|
|
57752
57756
|
function expandHome2(p) {
|
|
57753
57757
|
if (p === "~")
|
|
@@ -57756,6 +57760,44 @@ function expandHome2(p) {
|
|
|
57756
57760
|
return resolve7(homedir14(), p.slice(2));
|
|
57757
57761
|
return p;
|
|
57758
57762
|
}
|
|
57763
|
+
async function browseDirectories(input) {
|
|
57764
|
+
const raw = (input ?? "").trim();
|
|
57765
|
+
const dir = resolve7(homedir14(), expandHome2(raw));
|
|
57766
|
+
const dirents = await readdir9(dir, { withFileTypes: true });
|
|
57767
|
+
const out = [];
|
|
57768
|
+
for (const d of dirents) {
|
|
57769
|
+
if (d.isDirectory()) {
|
|
57770
|
+
out.push({ name: d.name, path: join33(dir, d.name) });
|
|
57771
|
+
continue;
|
|
57772
|
+
}
|
|
57773
|
+
if (d.isSymbolicLink()) {
|
|
57774
|
+
try {
|
|
57775
|
+
if ((await stat7(join33(dir, d.name))).isDirectory()) {
|
|
57776
|
+
out.push({ name: d.name, path: join33(dir, d.name) });
|
|
57777
|
+
}
|
|
57778
|
+
} catch {}
|
|
57779
|
+
}
|
|
57780
|
+
}
|
|
57781
|
+
out.sort((a, b) => {
|
|
57782
|
+
const la = a.name.toLowerCase(), lb = b.name.toLowerCase();
|
|
57783
|
+
return la < lb ? -1 : la > lb ? 1 : a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
|
|
57784
|
+
});
|
|
57785
|
+
const truncated = out.length > MAX_BROWSE_ENTRIES;
|
|
57786
|
+
if (truncated)
|
|
57787
|
+
out.length = MAX_BROWSE_ENTRIES;
|
|
57788
|
+
const parent = dirname22(dir);
|
|
57789
|
+
return {
|
|
57790
|
+
path: dir,
|
|
57791
|
+
sep: sepChar(),
|
|
57792
|
+
parent: parent === dir ? null : parent,
|
|
57793
|
+
home: homedir14(),
|
|
57794
|
+
dirs: out,
|
|
57795
|
+
truncated
|
|
57796
|
+
};
|
|
57797
|
+
}
|
|
57798
|
+
function sepChar() {
|
|
57799
|
+
return sep4 === "\\" ? "\\" : "/";
|
|
57800
|
+
}
|
|
57759
57801
|
|
|
57760
57802
|
class WorkspaceFs {
|
|
57761
57803
|
listWorkspaces;
|
|
@@ -58354,7 +58396,7 @@ function globToRegExp(glob) {
|
|
|
58354
58396
|
return /$^/;
|
|
58355
58397
|
}
|
|
58356
58398
|
}
|
|
58357
|
-
var execFileAsync2, MAX_ENTRIES = 2000, FILE_READ_CAP, DIFF_CAP, GIT_MAX_BUFFER, SEARCH_MAX_RESULTS = 200, SEARCH_MAX_SCAN = 20000, SEARCH_SKIP_DIRS, SEARCH_CONTENT_MAX_HITS = 500, SEARCH_CONTENT_MAX_FILE, LINE_MATCH_CAP = 2000, DOWNLOAD_MAX, GIT_TIMEOUT_MS = 1e4, SEARCH_DEADLINE_MS = 4000, MIME_BY_EXT;
|
|
58399
|
+
var execFileAsync2, MAX_ENTRIES = 2000, FILE_READ_CAP, DIFF_CAP, GIT_MAX_BUFFER, SEARCH_MAX_RESULTS = 200, SEARCH_MAX_SCAN = 20000, SEARCH_SKIP_DIRS, SEARCH_CONTENT_MAX_HITS = 500, SEARCH_CONTENT_MAX_FILE, LINE_MATCH_CAP = 2000, DOWNLOAD_MAX, GIT_TIMEOUT_MS = 1e4, SEARCH_DEADLINE_MS = 4000, MAX_BROWSE_ENTRIES = 1000, MIME_BY_EXT;
|
|
58358
58400
|
var init_workspace_fs = __esm(() => {
|
|
58359
58401
|
execFileAsync2 = promisify2(execFile2);
|
|
58360
58402
|
FILE_READ_CAP = 256 * 1024;
|
|
@@ -58389,7 +58431,7 @@ import { execFile as execFile3 } from "node:child_process";
|
|
|
58389
58431
|
import { createHash as createHash11 } from "node:crypto";
|
|
58390
58432
|
import { lstat, mkdir as mkdir15, realpath as realpath7 } from "node:fs/promises";
|
|
58391
58433
|
import { homedir as homedir15 } from "node:os";
|
|
58392
|
-
import { basename as basename8, isAbsolute as isAbsolute8, join as
|
|
58434
|
+
import { basename as basename8, isAbsolute as isAbsolute8, join as join34, resolve as resolve8, sep as sep5, win32 as win324 } from "node:path";
|
|
58393
58435
|
import { promisify as promisify3 } from "node:util";
|
|
58394
58436
|
function expandHome3(path14) {
|
|
58395
58437
|
if (path14 === "~")
|
|
@@ -58437,7 +58479,7 @@ class WorkspaceGit {
|
|
|
58437
58479
|
writeTails = new Map;
|
|
58438
58480
|
constructor(listWorkspaces, options = {}) {
|
|
58439
58481
|
this.listWorkspaces = listWorkspaces;
|
|
58440
|
-
this.managedWorktreesRoot = options.managedWorktreesRoot ??
|
|
58482
|
+
this.managedWorktreesRoot = options.managedWorktreesRoot ?? join34(homedir15(), ".xacpx", "worktrees");
|
|
58441
58483
|
this.platform = options.platform ?? process.platform;
|
|
58442
58484
|
this.runGitOverride = options.runGit;
|
|
58443
58485
|
}
|
|
@@ -58669,7 +58711,7 @@ class WorkspaceGit {
|
|
|
58669
58711
|
const repoKey = `${basename8(top)}-${createHash11("sha256").update(commonDir).digest("hex").slice(0, 8)}`;
|
|
58670
58712
|
const branchSlug = branch.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "branch";
|
|
58671
58713
|
const branchKey = `${branchSlug}-${createHash11("sha256").update(branch).digest("hex").slice(0, 6)}`;
|
|
58672
|
-
const repoDir =
|
|
58714
|
+
const repoDir = join34(managedRoot, repoKey);
|
|
58673
58715
|
try {
|
|
58674
58716
|
const existing = await lstat(repoDir);
|
|
58675
58717
|
if (!existing.isDirectory() || existing.isSymbolicLink())
|
|
@@ -58682,7 +58724,7 @@ class WorkspaceGit {
|
|
|
58682
58724
|
const realRepoDir = await realpath7(repoDir);
|
|
58683
58725
|
if (!worktreePathIsWithin(managedRoot, realRepoDir, this.platform))
|
|
58684
58726
|
throw new Error("worktree-path-unsafe");
|
|
58685
|
-
const target =
|
|
58727
|
+
const target = join34(realRepoDir, branchKey);
|
|
58686
58728
|
try {
|
|
58687
58729
|
await lstat(target);
|
|
58688
58730
|
throw new Error("worktree-path-exists");
|
|
@@ -59531,6 +59573,9 @@ class ControlService {
|
|
|
59531
59573
|
listDirectory(workspace3, path15) {
|
|
59532
59574
|
return this.workspaceFs.listDirectory(workspace3, path15);
|
|
59533
59575
|
}
|
|
59576
|
+
browseDirectories(path15) {
|
|
59577
|
+
return browseDirectories(path15);
|
|
59578
|
+
}
|
|
59534
59579
|
readWorkspaceFile(workspace3, path15) {
|
|
59535
59580
|
return this.workspaceFs.readFile(workspace3, path15);
|
|
59536
59581
|
}
|
|
@@ -60906,9 +60951,9 @@ __export(exports_acpx_agent_overlay, {
|
|
|
60906
60951
|
ACPX_MANAGED_ALIAS_PREFIX: () => ACPX_MANAGED_ALIAS_PREFIX
|
|
60907
60952
|
});
|
|
60908
60953
|
import { chmod as chmod5, readFile as readFile24, stat as stat9 } from "node:fs/promises";
|
|
60909
|
-
import { join as
|
|
60954
|
+
import { join as join35 } from "node:path";
|
|
60910
60955
|
function acpxConfigPath(home) {
|
|
60911
|
-
return
|
|
60956
|
+
return join35(home, ".acpx", "config.json");
|
|
60912
60957
|
}
|
|
60913
60958
|
function computeAgentOverlayEntries(config4) {
|
|
60914
60959
|
const entries = [];
|
|
@@ -61100,7 +61145,7 @@ __export(exports_main, {
|
|
|
61100
61145
|
});
|
|
61101
61146
|
import { randomUUID as randomUUID15 } from "node:crypto";
|
|
61102
61147
|
import { homedir as homedir17 } from "node:os";
|
|
61103
|
-
import { dirname as dirname24, join as
|
|
61148
|
+
import { dirname as dirname24, join as join36 } from "node:path";
|
|
61104
61149
|
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
61105
61150
|
async function defaultProvisionAgentOverlays(config4, logger) {
|
|
61106
61151
|
const entries = computeAgentOverlayEntries(config4);
|
|
@@ -61239,7 +61284,7 @@ async function buildApp(paths, deps = {}) {
|
|
|
61239
61284
|
}
|
|
61240
61285
|
});
|
|
61241
61286
|
const runtimeRoot = dirname24(paths.configPath);
|
|
61242
|
-
const messagingNodeIdentity = await new MessagingNodeIdentityStore(
|
|
61287
|
+
const messagingNodeIdentity = await new MessagingNodeIdentityStore(join36(runtimeRoot, "agent-messaging", "node.json")).loadOrCreate();
|
|
61243
61288
|
const sessions = new SessionService(config4, debouncedStateStore, state, {
|
|
61244
61289
|
stateMutex,
|
|
61245
61290
|
runtimeRoot
|
|
@@ -61306,7 +61351,7 @@ async function buildApp(paths, deps = {}) {
|
|
|
61306
61351
|
sessionInitTimeoutMs: config4.transport.sessionInitTimeoutMs
|
|
61307
61352
|
} : {},
|
|
61308
61353
|
...deps.orphanRegistry ? {
|
|
61309
|
-
generationFilePath:
|
|
61354
|
+
generationFilePath: join36(deps.orphanRegistry.root, "generation.json")
|
|
61310
61355
|
} : {},
|
|
61311
61356
|
onMalformedLine: (line) => {
|
|
61312
61357
|
logger.error("bridge.protocol.malformed_line", "dropped undecodable bridge output line", {
|
|
@@ -62087,8 +62132,8 @@ async function main() {
|
|
|
62087
62132
|
}
|
|
62088
62133
|
}
|
|
62089
62134
|
async function prepareChannelMedia(configPath, config4) {
|
|
62090
|
-
const runtimeDir =
|
|
62091
|
-
const mediaRootDir =
|
|
62135
|
+
const runtimeDir = join36(dirname24(configPath), "runtime");
|
|
62136
|
+
const mediaRootDir = join36(runtimeDir, "media");
|
|
62092
62137
|
const mediaStore = new RuntimeMediaStore({ rootDir: mediaRootDir });
|
|
62093
62138
|
await mediaStore.cleanupExpired().catch((error2) => {
|
|
62094
62139
|
console.error("[xacpx] media cleanup failed:", error2 instanceof Error ? error2.message : String(error2));
|
|
@@ -62101,12 +62146,12 @@ function resolveRuntimePaths() {
|
|
|
62101
62146
|
if (!home) {
|
|
62102
62147
|
throw new Error("Unable to resolve the current user home directory");
|
|
62103
62148
|
}
|
|
62104
|
-
const configPath = coreEnv("CONFIG") ??
|
|
62105
|
-
const runtimeDir =
|
|
62149
|
+
const configPath = coreEnv("CONFIG") ?? join36(coreHomeDir(home), "config.json");
|
|
62150
|
+
const runtimeDir = join36(dirname24(configPath), "runtime");
|
|
62106
62151
|
return {
|
|
62107
62152
|
configPath,
|
|
62108
|
-
statePath: coreEnv("STATE") ??
|
|
62109
|
-
perfLogPath:
|
|
62153
|
+
statePath: coreEnv("STATE") ?? join36(coreHomeDir(home), "state.json"),
|
|
62154
|
+
perfLogPath: join36(runtimeDir, "perf.log"),
|
|
62110
62155
|
orchestrationSocketPath: coreEnv("ORCHESTRATION_SOCKET") ?? resolveDaemonOrchestrationSocketPath(runtimeDir)
|
|
62111
62156
|
};
|
|
62112
62157
|
}
|
|
@@ -62118,13 +62163,13 @@ function resolveBridgeEntryPath() {
|
|
|
62118
62163
|
}
|
|
62119
62164
|
function resolveAppLogPath(configPath) {
|
|
62120
62165
|
const rootDir = dirname24(configPath);
|
|
62121
|
-
const runtimeDir =
|
|
62122
|
-
return
|
|
62166
|
+
const runtimeDir = join36(rootDir, "runtime");
|
|
62167
|
+
return join36(runtimeDir, "app.log");
|
|
62123
62168
|
}
|
|
62124
62169
|
function resolvePerfLogPath(configPath) {
|
|
62125
62170
|
const rootDir = dirname24(configPath);
|
|
62126
|
-
const runtimeDir =
|
|
62127
|
-
return
|
|
62171
|
+
const runtimeDir = join36(rootDir, "runtime");
|
|
62172
|
+
return join36(runtimeDir, "perf.log");
|
|
62128
62173
|
}
|
|
62129
62174
|
function resolveOrchestrationSocketPathFromConfigPath(configPath) {
|
|
62130
62175
|
const runtimeDir = resolveRuntimeDirFromConfigPath(configPath);
|
|
@@ -62806,7 +62851,7 @@ var init_config_check = __esm(() => {
|
|
|
62806
62851
|
import { readdir as readdir11, readFile as readFile25, rm as rm15 } from "node:fs/promises";
|
|
62807
62852
|
import { fileURLToPath as fileURLToPath8 } from "node:url";
|
|
62808
62853
|
import { homedir as homedir18 } from "node:os";
|
|
62809
|
-
import { join as
|
|
62854
|
+
import { join as join37 } from "node:path";
|
|
62810
62855
|
async function checkDaemon(options = {}) {
|
|
62811
62856
|
const home = options.home ?? process.env.HOME ?? homedir18();
|
|
62812
62857
|
const runtimeDir = options.configPath ? resolveRuntimeDirFromConfigPath(options.configPath) : undefined;
|
|
@@ -62908,7 +62953,7 @@ async function detectStaleConsumerLockFix(runtimeDir, deps) {
|
|
|
62908
62953
|
if (fileName === RUNTIME_CONSUMER_LOCK_FILE || !fileName.endsWith(CONSUMER_LOCK_SUFFIX2)) {
|
|
62909
62954
|
continue;
|
|
62910
62955
|
}
|
|
62911
|
-
const lockPath =
|
|
62956
|
+
const lockPath = join37(runtimeDir, fileName);
|
|
62912
62957
|
const lock2 = await deps.readConsumerLock(lockPath);
|
|
62913
62958
|
if (lock2 && !deps.isProcessRunning(lock2.pid)) {
|
|
62914
62959
|
stalePaths.push(lockPath);
|
|
@@ -62973,7 +63018,7 @@ var init_daemon_check = __esm(() => {
|
|
|
62973
63018
|
|
|
62974
63019
|
// src/doctor/checks/logs-check.ts
|
|
62975
63020
|
import { stat as stat10, readdir as readdir12 } from "node:fs/promises";
|
|
62976
|
-
import { basename as basename10, join as
|
|
63021
|
+
import { basename as basename10, join as join38 } from "node:path";
|
|
62977
63022
|
import { homedir as homedir19 } from "node:os";
|
|
62978
63023
|
async function checkLogs(options = {}) {
|
|
62979
63024
|
const home = options.home ?? process.env.HOME ?? homedir19();
|
|
@@ -63008,7 +63053,7 @@ async function checkLogs(options = {}) {
|
|
|
63008
63053
|
const matched = entries.filter((entry) => isTrackedLogName(entry, tracked));
|
|
63009
63054
|
const files = [];
|
|
63010
63055
|
for (const name of matched) {
|
|
63011
|
-
const path16 =
|
|
63056
|
+
const path16 = join38(paths.runtimeDir, name);
|
|
63012
63057
|
try {
|
|
63013
63058
|
const fileStat = await probe.stat(path16);
|
|
63014
63059
|
if (fileStat.isDirectory()) {
|
|
@@ -64039,7 +64084,7 @@ var init_render_doctor = __esm(() => {
|
|
|
64039
64084
|
|
|
64040
64085
|
// src/doctor/doctor.ts
|
|
64041
64086
|
import { homedir as homedir22 } from "node:os";
|
|
64042
|
-
import { join as
|
|
64087
|
+
import { join as join39 } from "node:path";
|
|
64043
64088
|
async function runDoctor(options = {}, deps = {}) {
|
|
64044
64089
|
const home = deps.home ?? process.env.HOME ?? homedir22();
|
|
64045
64090
|
const runtimePaths = resolveDoctorRuntimePaths(home, deps.resolveRuntimePaths);
|
|
@@ -64200,8 +64245,8 @@ function resolveDoctorRuntimePaths(home, resolver) {
|
|
|
64200
64245
|
return resolveRuntimePaths();
|
|
64201
64246
|
}
|
|
64202
64247
|
return {
|
|
64203
|
-
configPath:
|
|
64204
|
-
statePath:
|
|
64248
|
+
configPath: join39(coreHomeDir(home), "config.json"),
|
|
64249
|
+
statePath: join39(coreHomeDir(home), "state.json")
|
|
64205
64250
|
};
|
|
64206
64251
|
}
|
|
64207
64252
|
function depsUseExplicitRuntimeOverrides() {
|
|
@@ -64404,7 +64449,7 @@ __export(exports_cli, {
|
|
|
64404
64449
|
});
|
|
64405
64450
|
import { randomUUID as randomUUID16 } from "node:crypto";
|
|
64406
64451
|
import { homedir as homedir23 } from "node:os";
|
|
64407
|
-
import { dirname as dirname26, join as
|
|
64452
|
+
import { dirname as dirname26, join as join40, sep as sep6 } from "node:path";
|
|
64408
64453
|
import { fileURLToPath as fileURLToPath9 } from "node:url";
|
|
64409
64454
|
async function prepareMcpCoordinatorStartup(input) {
|
|
64410
64455
|
const coordinatorSession = input.coordinatorSession.trim();
|
|
@@ -65090,14 +65135,14 @@ function createAdapterCliDeps(input) {
|
|
|
65090
65135
|
const runtimeRoot = dirname26(resolveConfigPathForCurrentEnv());
|
|
65091
65136
|
let orphanRegistry;
|
|
65092
65137
|
if (process.platform === "win32") {
|
|
65093
|
-
orphanRegistry = new OrphanRegistry(
|
|
65138
|
+
orphanRegistry = new OrphanRegistry(join40(runtimeRoot, "runtime"));
|
|
65094
65139
|
await orphanRegistry.initialize();
|
|
65095
65140
|
}
|
|
65096
65141
|
const [result] = await garbageCollectAdapterReleases({
|
|
65097
65142
|
runtimeRoot,
|
|
65098
65143
|
id,
|
|
65099
65144
|
releaseId,
|
|
65100
|
-
statePath: coreEnv("STATE") ??
|
|
65145
|
+
statePath: coreEnv("STATE") ?? join40(runtimeRoot, "state.json"),
|
|
65101
65146
|
...orphanRegistry ? { orphanRegistry } : {}
|
|
65102
65147
|
});
|
|
65103
65148
|
return result.disposition;
|
|
@@ -65516,7 +65561,7 @@ function safeDaemonLogPaths() {
|
|
|
65516
65561
|
const configPath = resolveConfigPathForCurrentEnv();
|
|
65517
65562
|
const paths = resolveDaemonPathsForCurrentConfig();
|
|
65518
65563
|
return {
|
|
65519
|
-
appLog:
|
|
65564
|
+
appLog: join40(dirname26(configPath), "runtime", "app.log"),
|
|
65520
65565
|
stderrLog: paths.stderrLog
|
|
65521
65566
|
};
|
|
65522
65567
|
} catch {
|
|
@@ -8,7 +8,7 @@ import type { CancelTaskInput, OrchestrationService, OrchestrationTaskFilter } f
|
|
|
8
8
|
import type { OrchestrationTaskRecord } from "../orchestration/orchestration-types";
|
|
9
9
|
import type { ControlEventBus } from "./control-event-bus";
|
|
10
10
|
import type { AgentCatalogEntry } from "../config/agent-catalog";
|
|
11
|
-
import { type DirListing, type FileContent, type SearchOptions, type SearchResult, type WorkspaceDiff } from "./workspace-fs";
|
|
11
|
+
import { type BrowseDirsResult, type DirListing, type FileContent, type SearchOptions, type SearchResult, type WorkspaceDiff } from "./workspace-fs";
|
|
12
12
|
import { type GitCheckoutOptions, type GitCommitResult, type GitPushOptions, type GitStatus, type GitWorktreeCreateOptions, type GitWorktreeCreateResult } from "./workspace-git";
|
|
13
13
|
import type { AgentEndpointView, AgentMessageTraceRecord } from "../orchestration/agent-messaging-types";
|
|
14
14
|
import type { PromptAttachmentRef } from "@ganglion/xacpx-relay-protocol";
|
|
@@ -226,6 +226,7 @@ export declare class ControlService {
|
|
|
226
226
|
constructor(deps: ControlServiceDeps);
|
|
227
227
|
private readonly workspaceFs;
|
|
228
228
|
listDirectory(workspace: string, path?: string): Promise<DirListing>;
|
|
229
|
+
browseDirectories(path?: string): Promise<BrowseDirsResult>;
|
|
229
230
|
readWorkspaceFile(workspace: string, path: string): Promise<FileContent>;
|
|
230
231
|
workspaceGitDiff(workspace: string, path?: string): Promise<WorkspaceDiff>;
|
|
231
232
|
workspaceGitStatus(workspace: string): Promise<GitStatus>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** Expand a leading `~` to the home directory (workspace cwds are often configured
|
|
2
|
+
* as `~` or `~/path`). */
|
|
3
|
+
export declare function expandHome(p: string): string;
|
|
1
4
|
export interface FsEntry {
|
|
2
5
|
name: string;
|
|
3
6
|
type: "dir" | "file";
|
|
@@ -67,6 +70,18 @@ export interface WorkspaceDiff {
|
|
|
67
70
|
linked: boolean;
|
|
68
71
|
};
|
|
69
72
|
}
|
|
73
|
+
export interface BrowseDirsResult {
|
|
74
|
+
path: string;
|
|
75
|
+
sep: "/" | "\\";
|
|
76
|
+
parent: string | null;
|
|
77
|
+
home: string;
|
|
78
|
+
dirs: Array<{
|
|
79
|
+
name: string;
|
|
80
|
+
path: string;
|
|
81
|
+
}>;
|
|
82
|
+
truncated: boolean;
|
|
83
|
+
}
|
|
84
|
+
export declare function browseDirectories(input?: string): Promise<BrowseDirsResult>;
|
|
70
85
|
export interface WorkspaceRef {
|
|
71
86
|
name: string;
|
|
72
87
|
cwd: string;
|