mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
3c84080aab
* refactor(domain): consolidate canonical ordering and digest helpers (#624) * refactor(domain): consolidate canonical ordering and digest helpers Single owner for code-point ordering (domain/canonicalOrdering.ts) and canonical JSON digests (domain/comparisonSemantics.ts). Delete all local compareCodePoints/compareText/digestCanonical duplicates and migrate every importer. No re-export shims. * fix(ci): allow slower real browser startup * chore(config): remove dead eslint, dedupe scripts, cacheable turbo tasks Delete eslint.config.js (oxlint is the linter), drop lint:dead alias, pin smol-toml, fold jscpd/scan:todos into check:pr, make test:run cacheable, align oxlint ignores. * fix(config): hash all test inputs for cached runs * docs: fix architecture diagram and pretty-print tool catalog Drop dangling REPLAY edges, add dotnet/reference/error/evaluation nodes. Emit 2-space JSON from the catalog generator and regenerate. * test: extract shared fixtures, drop knip carve-outs Dedupe android/apple session tests, bundler adapter headers, and reconstruction helpers into tests/support fixtures. Delete unused type aliases and the knip ignoreIssues block. Lower jscpd threshold 2.7 to 2.5. * refactor(app): split Setup and ProcessOwnership modules Extract SetupTypes/SetupHost from Setup.ts and move observation helpers into ProcessOwnershipObservation/ProcessTree. Migrate all importers including CLI commands. No re-export shims.
67 lines
2.6 KiB
TypeScript
67 lines
2.6 KiB
TypeScript
import type {
|
|
ClientConfigurationResult,
|
|
SetupHost,
|
|
SetupProviderEnvironment,
|
|
SetupProgressEvent,
|
|
} from "./SetupTypes.js";
|
|
import type { SetupClient } from "./SupportedClients.js";
|
|
|
|
const failedConfigurationMessage = (
|
|
reason: "path" | "backup" | "write" | "readback",
|
|
): string => {
|
|
if (reason === "path")
|
|
return "Agent configuration path could not be safely verified. Check its permissions and, if it is a symbolic link, verify that the link resolves to a regular file owned by the current user, then rerun setup.";
|
|
if (reason === "backup")
|
|
return "Agent configuration could not be backed up, so no change was made. Check file permissions, then rerun setup.";
|
|
if (reason === "write")
|
|
return "Agent configuration could not be updated. Check file permissions, then rerun setup.";
|
|
return "Agent configuration could not be verified after writing. Repair the configuration file or restore its `.rea.backup`, then rerun setup.";
|
|
};
|
|
|
|
/** Configure every detected agent and report the first failed transaction. */
|
|
export const configureDetectedClients = async (options: {
|
|
readonly host: SetupHost;
|
|
readonly detectedClients: readonly SetupClient[];
|
|
readonly providerEnvironment: SetupProviderEnvironment;
|
|
readonly command: readonly string[];
|
|
readonly clients: Record<string, ClientConfigurationResult>;
|
|
readonly appliedActions: string[];
|
|
readonly onProgress?: (event: SetupProgressEvent) => void;
|
|
}): Promise<string | undefined> => {
|
|
let failure: string | undefined;
|
|
for (const client of options.detectedClients) {
|
|
const actionId = `configure_client:${client.name}`;
|
|
const label = client.displayName ?? client.name;
|
|
options.onProgress?.({ actionId, label, state: "started" });
|
|
const result = await options.host.configureClient(
|
|
client,
|
|
options.providerEnvironment,
|
|
options.command,
|
|
);
|
|
options.clients[client.name] = result;
|
|
if (result.status === "failed") {
|
|
failure ??= failedConfigurationMessage(result.reason);
|
|
options.onProgress?.({
|
|
actionId,
|
|
label,
|
|
state: "failed",
|
|
detail: failedConfigurationMessage(result.reason),
|
|
});
|
|
} else if (result.status === "configured") {
|
|
options.appliedActions.push(`configured_${client.name}`);
|
|
options.onProgress?.({ actionId, label, state: "completed" });
|
|
} else {
|
|
options.onProgress?.({
|
|
actionId,
|
|
label,
|
|
state: "warning",
|
|
detail:
|
|
result.status === "unchanged"
|
|
? "Already current"
|
|
: "Manual configuration required",
|
|
});
|
|
}
|
|
}
|
|
return failure;
|
|
};
|