mirror of
https://github.com/morluto/rea.git
synced 2026-11-11 01:13:39 +00:00
Add per-connection discovery that loads canonical named tools on demand while preserving the default full catalog. Bound discovery replies before changing visibility, preserve family exclusions and Evidence workflows, and reset visibility on HTTP reconnect. Verified with focused protocol tests and real Codex CLI artifact investigations; token costs remain task-dependent, so the profile is opt-in.
65 lines
2.6 KiB
TypeScript
65 lines
2.6 KiB
TypeScript
import { jsonObjectSchema, type JsonValue } from "../domain/jsonValue.js";
|
|
import { createServerIdentity } from "../serverIdentity.js";
|
|
import { silentLogger } from "../logger.js";
|
|
import type { Logger } from "pino";
|
|
import type { DirectAnalysisDependencies } from "./DirectAnalysisDependencies.js";
|
|
import { providerCapabilitySet } from "../contracts/toolOutputSchemaPrimitives.js";
|
|
import { providerCapabilitySets } from "./binary/BinarySessionStatus.js";
|
|
import { sqliteDatabaseCapability } from "./sqlite/SqliteDatabaseCapability.js";
|
|
import { CURRENT_ENTRYPOINT_PATH } from "../process/CurrentEntrypointPath.js";
|
|
import { catalogIdentityForToolFamilies } from "../catalogIdentity.js";
|
|
import { progressiveCatalogIdentity } from "../catalogDiscovery.js";
|
|
import { compactPresentationForMcpInputSchemaProfile } from "../config/mcpInputSchemaProfile.js";
|
|
import {
|
|
directAnalysisCleanupFailure,
|
|
projectInvocationFailure,
|
|
withSessionCleanup,
|
|
} from "./DirectAnalysisCleanup.js";
|
|
import { ok } from "../domain/result.js";
|
|
|
|
/** Read target-free provider status and operation availability. */
|
|
export const runSessionStatus = async (
|
|
dependencies: Pick<
|
|
DirectAnalysisDependencies,
|
|
"createBinarySession" | "readConfiguration"
|
|
>,
|
|
logger: Logger = silentLogger,
|
|
): Promise<JsonValue> => {
|
|
const config = dependencies.readConfiguration();
|
|
if (!config.ok) return { error: projectInvocationFailure(config.error) };
|
|
const session = await dependencies.createBinarySession(config.value, logger);
|
|
return withSessionCleanup<JsonValue>(
|
|
session,
|
|
async () => {
|
|
const status = jsonObjectSchema.parse(await session.status());
|
|
const catalog = catalogIdentityForToolFamilies(
|
|
compactPresentationForMcpInputSchemaProfile(
|
|
config.value.mcpInputSchemaProfile,
|
|
),
|
|
config.value.mcpOutputSchemaProfile ?? "full",
|
|
config.value.mcpToolFamilies === undefined
|
|
? undefined
|
|
: new Set(config.value.mcpToolFamilies),
|
|
);
|
|
return {
|
|
...status,
|
|
capabilities: [
|
|
...providerCapabilitySet.array().parse(status.capabilities),
|
|
...providerCapabilitySets([
|
|
sqliteDatabaseCapability(process.versions.node),
|
|
]),
|
|
],
|
|
server_identity: createServerIdentity({
|
|
startedAt: new Date().toISOString(),
|
|
commandPath: CURRENT_ENTRYPOINT_PATH,
|
|
catalog:
|
|
config.value.mcpToolCatalogProfile === "hot-cold"
|
|
? progressiveCatalogIdentity(catalog)
|
|
: catalog,
|
|
}),
|
|
};
|
|
},
|
|
(status, cleanup) => directAnalysisCleanupFailure(ok(status), cleanup),
|
|
);
|
|
};
|