mirror of
https://github.com/davidkaya/aryx.git
synced 2026-08-07 04:08:45 +02:00
refactor: finish Aryx rebrand sweep
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
+3
-3
@@ -20,15 +20,15 @@
|
|||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/davidkaya/eryx.git"
|
"url": "git+https://github.com/davidkaya/aryx.git"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/davidkaya/eryx/issues"
|
"url": "https://github.com/davidkaya/aryx/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/davidkaya/eryx#readme",
|
"homepage": "https://github.com/davidkaya/aryx#readme",
|
||||||
"packageManager": "bun@1.3.6",
|
"packageManager": "bun@1.3.6",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@lexical/headless": "0.42.0",
|
"@lexical/headless": "0.42.0",
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ function isSidecarStoppedBeforeCompletionError(error: unknown): error is Error {
|
|||||||
return error instanceof Error && error.message === SIDECAR_STOPPED_BEFORE_COMPLETION_MESSAGE;
|
return error instanceof Error && error.message === SIDECAR_STOPPED_BEFORE_COMPLETION_MESSAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EryxAppService extends EventEmitter<AppServiceEvents> {
|
export class AryxAppService extends EventEmitter<AppServiceEvents> {
|
||||||
private readonly workspaceRepository = new WorkspaceRepository();
|
private readonly workspaceRepository = new WorkspaceRepository();
|
||||||
private readonly sidecar = new SidecarClient();
|
private readonly sidecar = new SidecarClient();
|
||||||
private readonly secretStore = new SecretStore();
|
private readonly secretStore = new SecretStore();
|
||||||
+3
-3
@@ -1,15 +1,15 @@
|
|||||||
import { app, BrowserWindow } from 'electron';
|
import { app, BrowserWindow } from 'electron';
|
||||||
|
|
||||||
import { registerIpcHandlers } from '@main/ipc/registerIpcHandlers';
|
import { registerIpcHandlers } from '@main/ipc/registerIpcHandlers';
|
||||||
import { EryxAppService } from '@main/EryxAppService';
|
import { AryxAppService } from '@main/AryxAppService';
|
||||||
import { createMainWindow } from '@main/windows/createMainWindow';
|
import { createMainWindow } from '@main/windows/createMainWindow';
|
||||||
import { applyTitleBarTheme } from '@main/windows/titleBarTheme';
|
import { applyTitleBarTheme } from '@main/windows/titleBarTheme';
|
||||||
|
|
||||||
let mainWindow: BrowserWindow | undefined;
|
let mainWindow: BrowserWindow | undefined;
|
||||||
let appService: EryxAppService | undefined;
|
let appService: AryxAppService | undefined;
|
||||||
|
|
||||||
async function bootstrap(): Promise<void> {
|
async function bootstrap(): Promise<void> {
|
||||||
appService = new EryxAppService();
|
appService = new AryxAppService();
|
||||||
|
|
||||||
mainWindow = createMainWindow();
|
mainWindow = createMainWindow();
|
||||||
registerIpcHandlers(mainWindow, appService);
|
registerIpcHandlers(mainWindow, appService);
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ import type {
|
|||||||
import type { QuerySessionsInput } from '@shared/domain/sessionLibrary';
|
import type { QuerySessionsInput } from '@shared/domain/sessionLibrary';
|
||||||
import type { AppearanceTheme } from '@shared/domain/tooling';
|
import type { AppearanceTheme } from '@shared/domain/tooling';
|
||||||
|
|
||||||
import { EryxAppService } from '@main/EryxAppService';
|
import { AryxAppService } from '@main/AryxAppService';
|
||||||
import { applyTitleBarTheme } from '@main/windows/titleBarTheme';
|
import { applyTitleBarTheme } from '@main/windows/titleBarTheme';
|
||||||
|
|
||||||
export function registerIpcHandlers(window: BrowserWindow, service: EryxAppService): void {
|
export function registerIpcHandlers(window: BrowserWindow, service: AryxAppService): void {
|
||||||
ipcMain.handle(ipcChannels.describeSidecarCapabilities, () => service.describeSidecarCapabilities());
|
ipcMain.handle(ipcChannels.describeSidecarCapabilities, () => service.describeSidecarCapabilities());
|
||||||
ipcMain.handle(ipcChannels.refreshSidecarCapabilities, () => service.refreshSidecarCapabilities());
|
ipcMain.handle(ipcChannels.refreshSidecarCapabilities, () => service.refreshSidecarCapabilities());
|
||||||
ipcMain.handle(ipcChannels.loadWorkspace, () => service.loadWorkspace());
|
ipcMain.handle(ipcChannels.loadWorkspace, () => service.loadWorkspace());
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ describe('resolveWindowIconPath', () => {
|
|||||||
test('uses the Windows ico asset from the platform-specific icon directory', () => {
|
test('uses the Windows ico asset from the platform-specific icon directory', () => {
|
||||||
expect(
|
expect(
|
||||||
resolveWindowIconPath({
|
resolveWindowIconPath({
|
||||||
appPath: 'C:\\workspace\\personal\\repositories\\eryx',
|
appPath: 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
platform: 'win32',
|
platform: 'win32',
|
||||||
}),
|
}),
|
||||||
).toBe('C:\\workspace\\personal\\repositories\\eryx\\assets\\icons\\windows\\icon.ico');
|
).toBe('C:\\workspace\\personal\\repositories\\aryx\\assets\\icons\\windows\\icon.ico');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('uses the macOS icns asset on Darwin', () => {
|
test('uses the macOS icns asset on Darwin', () => {
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ const TIMESTAMP = '2026-03-25T00:00:00.000Z';
|
|||||||
mock.module('electron', () => ({
|
mock.module('electron', () => ({
|
||||||
app: {
|
app: {
|
||||||
isPackaged: false,
|
isPackaged: false,
|
||||||
getAppPath: () => 'C:\\workspace\\personal\\repositories\\eryx',
|
getAppPath: () => 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
getPath: () => 'C:\\workspace\\personal\\repositories\\eryx\\tests\\fixtures',
|
getPath: () => 'C:\\workspace\\personal\\repositories\\aryx\\tests\\fixtures',
|
||||||
},
|
},
|
||||||
dialog: {
|
dialog: {
|
||||||
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
||||||
@@ -30,7 +30,7 @@ mock.module('keytar', () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const { EryxAppService } = await import('@main/EryxAppService');
|
const { AryxAppService } = await import('@main/AryxAppService');
|
||||||
|
|
||||||
function createProject(overrides?: Partial<ProjectRecord>): ProjectRecord {
|
function createProject(overrides?: Partial<ProjectRecord>): ProjectRecord {
|
||||||
return {
|
return {
|
||||||
@@ -63,8 +63,8 @@ function createService(
|
|||||||
options?: {
|
options?: {
|
||||||
captureRunTurn?: (command: RunTurnCommand) => void;
|
captureRunTurn?: (command: RunTurnCommand) => void;
|
||||||
},
|
},
|
||||||
): InstanceType<typeof EryxAppService> {
|
): InstanceType<typeof AryxAppService> {
|
||||||
const service = new EryxAppService();
|
const service = new AryxAppService();
|
||||||
const internals = service as unknown as Record<string, unknown>;
|
const internals = service as unknown as Record<string, unknown>;
|
||||||
internals.loadWorkspace = async () => workspace;
|
internals.loadWorkspace = async () => workspace;
|
||||||
internals.persistAndBroadcast = async (nextWorkspace: WorkspaceState) => nextWorkspace;
|
internals.persistAndBroadcast = async (nextWorkspace: WorkspaceState) => nextWorkspace;
|
||||||
@@ -97,7 +97,7 @@ function createService(
|
|||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('EryxAppService discovered tooling', () => {
|
describe('AryxAppService discovered tooling', () => {
|
||||||
test('allows project-discovered MCP servers to be accepted and used in project sessions', async () => {
|
test('allows project-discovered MCP servers to be accepted and used in project sessions', async () => {
|
||||||
const workspace = createWorkspaceSeed();
|
const workspace = createWorkspaceSeed();
|
||||||
const pattern = workspace.patterns.find((candidate) => candidate.mode === 'single');
|
const pattern = workspace.patterns.find((candidate) => candidate.mode === 'single');
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import type { SidecarCapabilities } from '@shared/contracts/sidecar';
|
|||||||
mock.module('electron', () => ({
|
mock.module('electron', () => ({
|
||||||
app: {
|
app: {
|
||||||
isPackaged: false,
|
isPackaged: false,
|
||||||
getAppPath: () => 'C:\\workspace\\personal\\repositories\\eryx',
|
getAppPath: () => 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
getPath: () => 'C:\\workspace\\personal\\repositories\\eryx\\tests\\fixtures',
|
getPath: () => 'C:\\workspace\\personal\\repositories\\aryx\\tests\\fixtures',
|
||||||
},
|
},
|
||||||
dialog: {
|
dialog: {
|
||||||
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
||||||
@@ -24,7 +24,7 @@ mock.module('keytar', () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const { EryxAppService } = await import('@main/EryxAppService');
|
const { AryxAppService } = await import('@main/AryxAppService');
|
||||||
|
|
||||||
const SIDECAR_STOPPED_BEFORE_COMPLETION_MESSAGE =
|
const SIDECAR_STOPPED_BEFORE_COMPLETION_MESSAGE =
|
||||||
'The .NET sidecar was stopped before the command completed.';
|
'The .NET sidecar was stopped before the command completed.';
|
||||||
@@ -49,7 +49,7 @@ const CAPABILITIES_FIXTURE: SidecarCapabilities = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function setSidecar(
|
function setSidecar(
|
||||||
service: InstanceType<typeof EryxAppService>,
|
service: InstanceType<typeof AryxAppService>,
|
||||||
describeCapabilities: () => Promise<SidecarCapabilities>,
|
describeCapabilities: () => Promise<SidecarCapabilities>,
|
||||||
): void {
|
): void {
|
||||||
(
|
(
|
||||||
@@ -74,9 +74,9 @@ function createDeferred<T>() {
|
|||||||
return { promise, resolve };
|
return { promise, resolve };
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('EryxAppService sidecar capabilities', () => {
|
describe('AryxAppService sidecar capabilities', () => {
|
||||||
test('retries describe-capabilities after an intentional sidecar stop', async () => {
|
test('retries describe-capabilities after an intentional sidecar stop', async () => {
|
||||||
const service = new EryxAppService();
|
const service = new AryxAppService();
|
||||||
let attempts = 0;
|
let attempts = 0;
|
||||||
|
|
||||||
setSidecar(service, async () => {
|
setSidecar(service, async () => {
|
||||||
@@ -93,7 +93,7 @@ describe('EryxAppService sidecar capabilities', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('coalesces concurrent capability requests while the cache is empty', async () => {
|
test('coalesces concurrent capability requests while the cache is empty', async () => {
|
||||||
const service = new EryxAppService();
|
const service = new AryxAppService();
|
||||||
const deferred = createDeferred<SidecarCapabilities>();
|
const deferred = createDeferred<SidecarCapabilities>();
|
||||||
let calls = 0;
|
let calls = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ import type { SessionRecord } from '@shared/domain/session';
|
|||||||
import { createWorkspaceSeed, type WorkspaceState } from '@shared/domain/workspace';
|
import { createWorkspaceSeed, type WorkspaceState } from '@shared/domain/workspace';
|
||||||
|
|
||||||
const TIMESTAMP = '2026-03-25T00:00:00.000Z';
|
const TIMESTAMP = '2026-03-25T00:00:00.000Z';
|
||||||
const SCRATCHPAD_PATH = 'C:\\workspace\\personal\\repositories\\eryx\\scratchpad';
|
const SCRATCHPAD_PATH = 'C:\\workspace\\personal\\repositories\\aryx\\scratchpad';
|
||||||
|
|
||||||
mock.module('electron', () => ({
|
mock.module('electron', () => ({
|
||||||
app: {
|
app: {
|
||||||
isPackaged: false,
|
isPackaged: false,
|
||||||
getAppPath: () => 'C:\\workspace\\personal\\repositories\\eryx',
|
getAppPath: () => 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
getPath: () => 'C:\\workspace\\personal\\repositories\\eryx\\tests\\fixtures',
|
getPath: () => 'C:\\workspace\\personal\\repositories\\aryx\\tests\\fixtures',
|
||||||
},
|
},
|
||||||
dialog: {
|
dialog: {
|
||||||
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
showOpenDialog: async () => ({ canceled: true, filePaths: [] }),
|
||||||
@@ -31,7 +31,7 @@ mock.module('keytar', () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const { EryxAppService } = await import('@main/EryxAppService');
|
const { AryxAppService } = await import('@main/AryxAppService');
|
||||||
|
|
||||||
function createWorkspaceFixture(): {
|
function createWorkspaceFixture(): {
|
||||||
workspace: WorkspaceState;
|
workspace: WorkspaceState;
|
||||||
@@ -70,7 +70,7 @@ function createWorkspaceFixture(): {
|
|||||||
transport: 'local',
|
transport: 'local',
|
||||||
command: 'node',
|
command: 'node',
|
||||||
args: ['server.js', '--stdio'],
|
args: ['server.js', '--stdio'],
|
||||||
cwd: 'C:\\workspace\\personal\\repositories\\eryx',
|
cwd: 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
tools: ['git.status'],
|
tools: ['git.status'],
|
||||||
timeoutMs: 1500,
|
timeoutMs: 1500,
|
||||||
createdAt: TIMESTAMP,
|
createdAt: TIMESTAMP,
|
||||||
@@ -101,8 +101,8 @@ function createService(
|
|||||||
captureRunTurn?: (command: RunTurnCommand) => void;
|
captureRunTurn?: (command: RunTurnCommand) => void;
|
||||||
knownApprovalToolNames?: string[];
|
knownApprovalToolNames?: string[];
|
||||||
},
|
},
|
||||||
): InstanceType<typeof EryxAppService> {
|
): InstanceType<typeof AryxAppService> {
|
||||||
const service = new EryxAppService();
|
const service = new AryxAppService();
|
||||||
const internals = service as unknown as Record<string, unknown>;
|
const internals = service as unknown as Record<string, unknown>;
|
||||||
internals.loadWorkspace = async () => workspace;
|
internals.loadWorkspace = async () => workspace;
|
||||||
internals.persistAndBroadcast = async (nextWorkspace: WorkspaceState) => nextWorkspace;
|
internals.persistAndBroadcast = async (nextWorkspace: WorkspaceState) => nextWorkspace;
|
||||||
@@ -135,7 +135,7 @@ function createService(
|
|||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('EryxAppService scratchpad tooling support', () => {
|
describe('AryxAppService scratchpad tooling support', () => {
|
||||||
test('allows scratchpad sessions to save MCP and LSP selections', async () => {
|
test('allows scratchpad sessions to save MCP and LSP selections', async () => {
|
||||||
const { workspace, pattern, session } = createWorkspaceFixture();
|
const { workspace, pattern, session } = createWorkspaceFixture();
|
||||||
const service = createService(workspace, pattern);
|
const service = createService(workspace, pattern);
|
||||||
@@ -189,7 +189,7 @@ describe('EryxAppService scratchpad tooling support', () => {
|
|||||||
transport: 'local',
|
transport: 'local',
|
||||||
command: 'node',
|
command: 'node',
|
||||||
args: ['server.js', '--stdio'],
|
args: ['server.js', '--stdio'],
|
||||||
cwd: 'C:\\workspace\\personal\\repositories\\eryx',
|
cwd: 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
tools: ['git.status'],
|
tools: ['git.status'],
|
||||||
timeoutMs: 1500,
|
timeoutMs: 1500,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ afterEach(async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
async function createTempDirectory(): Promise<string> {
|
async function createTempDirectory(): Promise<string> {
|
||||||
const directory = await mkdtemp(join(tmpdir(), 'eryx-config-scanner-'));
|
const directory = await mkdtemp(join(tmpdir(), 'aryx-config-scanner-'));
|
||||||
temporaryPaths.push(directory);
|
temporaryPaths.push(directory);
|
||||||
return directory;
|
return directory;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ const spawnedProcesses: FakeChildProcess[] = [];
|
|||||||
mock.module('electron', () => ({
|
mock.module('electron', () => ({
|
||||||
app: {
|
app: {
|
||||||
isPackaged: false,
|
isPackaged: false,
|
||||||
getAppPath: () => 'C:\\workspace\\personal\\repositories\\eryx',
|
getAppPath: () => 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ describe('resolveSidecarProcess', () => {
|
|||||||
expect(
|
expect(
|
||||||
resolveSidecarProcess({
|
resolveSidecarProcess({
|
||||||
isPackaged: false,
|
isPackaged: false,
|
||||||
appPath: 'C:\\workspace\\personal\\repositories\\eryx',
|
appPath: 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
resourcesPath: 'C:\\workspace\\personal\\repositories\\eryx\\resources',
|
resourcesPath: 'C:\\workspace\\personal\\repositories\\aryx\\resources',
|
||||||
platform: 'win32',
|
platform: 'win32',
|
||||||
}),
|
}),
|
||||||
).toEqual({
|
).toEqual({
|
||||||
@@ -16,11 +16,11 @@ describe('resolveSidecarProcess', () => {
|
|||||||
args: [
|
args: [
|
||||||
'run',
|
'run',
|
||||||
'--project',
|
'--project',
|
||||||
'C:\\workspace\\personal\\repositories\\eryx\\sidecar\\src\\Aryx.AgentHost\\Aryx.AgentHost.csproj',
|
'C:\\workspace\\personal\\repositories\\aryx\\sidecar\\src\\Aryx.AgentHost\\Aryx.AgentHost.csproj',
|
||||||
'--',
|
'--',
|
||||||
'--stdio',
|
'--stdio',
|
||||||
],
|
],
|
||||||
cwd: 'C:\\workspace\\personal\\repositories\\eryx',
|
cwd: 'C:\\workspace\\personal\\repositories\\aryx',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -28,14 +28,14 @@ describe('resolveSidecarProcess', () => {
|
|||||||
expect(
|
expect(
|
||||||
resolveSidecarProcess({
|
resolveSidecarProcess({
|
||||||
isPackaged: true,
|
isPackaged: true,
|
||||||
appPath: 'C:\\workspace\\personal\\repositories\\eryx\\release\\win-unpacked\\resources\\app',
|
appPath: 'C:\\workspace\\personal\\repositories\\aryx\\release\\win-unpacked\\resources\\app',
|
||||||
resourcesPath: 'C:\\workspace\\personal\\repositories\\eryx\\release\\win-unpacked\\resources',
|
resourcesPath: 'C:\\workspace\\personal\\repositories\\aryx\\release\\win-unpacked\\resources',
|
||||||
platform: 'win32',
|
platform: 'win32',
|
||||||
}),
|
}),
|
||||||
).toEqual({
|
).toEqual({
|
||||||
command: 'C:\\workspace\\personal\\repositories\\eryx\\release\\win-unpacked\\resources\\sidecar\\Aryx.AgentHost.exe',
|
command: 'C:\\workspace\\personal\\repositories\\aryx\\release\\win-unpacked\\resources\\sidecar\\Aryx.AgentHost.exe',
|
||||||
args: ['--stdio'],
|
args: ['--stdio'],
|
||||||
cwd: 'C:\\workspace\\personal\\repositories\\eryx\\release\\win-unpacked\\resources\\sidecar',
|
cwd: 'C:\\workspace\\personal\\repositories\\aryx\\release\\win-unpacked\\resources\\sidecar',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user