Scope MCP discovery, setup, doctor, status and recovery guidance by selected tool families using one contract inventory and shared catalog identity. Preserve default discovery, canonical validation and complete Evidence. Fixes #3246. Builds on #3026. Real libcrypto workflow verifies all 5,367 exports and identical complete Evidence. Static/source/build/docs/Windows/package/Greptile checks pass; ten assertions reproduced identically on clean main and feature across Node 24/22, with cancelled coverage explicitly unverified. Merge uses the user-authorized bypass for baseline failures and unchecked human-readiness declarations, without attesting human review. Co-authored-by: 0xLLVEL <fakhrezan1@gmail.com> Co-authored-by: Codebuff <noreply@codebuff.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
2.5 KiB
TypeScript
60 lines
2.5 KiB
TypeScript
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
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 { compactPresentationForMcpInputSchemaProfile } from "../config/mcpInputSchemaProfile.js";
|
|
import {
|
|
directAnalysisCleanupFailure,
|
|
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: projectAnalysisError(config.error) };
|
|
const session = await dependencies.createBinarySession(config.value, logger);
|
|
return withSessionCleanup<JsonValue>(
|
|
session,
|
|
async () => {
|
|
const status = jsonObjectSchema.parse(await session.status());
|
|
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: catalogIdentityForToolFamilies(
|
|
compactPresentationForMcpInputSchemaProfile(
|
|
config.value.mcpInputSchemaProfile,
|
|
),
|
|
config.value.mcpOutputSchemaProfile ?? "full",
|
|
config.value.mcpToolFamilies === undefined
|
|
? undefined
|
|
: new Set(config.value.mcpToolFamilies),
|
|
),
|
|
}),
|
|
};
|
|
},
|
|
(status, cleanup) => directAnalysisCleanupFailure(ok(status), cleanup),
|
|
);
|
|
};
|