/** * log10x_advise_install: the wizard front door. * * Progressive Q-and-A driver for a k8s install of the Log10x Reporter or * Receiver. Each call merges the user's latest answer into a wizard * session (held alongside the discovery snapshot) and either: * * 1. Asks the next missing question (returning markdown that the agent * surfaces to the user), or * 2. Once all answers are in, emits a concrete install plan. By default * the plan carries no licence and the engine runs its built-in * Free tier; a signed-in, pasted or demo JWT is wired in * only when the caller asks for one via `license_source`. * * The five decisions, by dependency order: * * Q1. App — "deploy a dedicated DaemonSet forwarder" (Reporter) vs * "plug into existing forwarder" (Receiver). The biggest fork. * Q2. (Receiver only) Which forwarder — auto-uses the snapshot's * detected forwarder when there's exactly one; asks if multiple. * Q3. Backend — where TenXSummary metrics go: the user's own TSDB * (prometheus, datadog, elastic, cloudwatch). Backends whose agent * discovery detected are listed first. The log10x-hosted backend is * for the public demo, not customer installs, so it is never offered * or defaulted; it is accepted only when passed explicitly, and then * needs a user licence (signin / paste) to receive anything. * Q4. (Backend ≠ log10x only) Airgapped — opt-in for CISO-friction * reduction. Skipped silently when backend=log10x (SaaS implies * not-airgapped). * Q5. License — not asked. The default (`license_source: "builtin"`) * puts no licence in the plan: the engine runs its built-in * Free tier (up to 10 nodes, no expiry, * airgapped), so there is nothing to mint, store or mount. * `signin` (user-scoped JWT), `paste` (a JWT the user holds) and * `demo` (1-node, 14-day JWT) stay available as explicit choices, * and each adds a step that creates the licence Secret. * * State retention is via WizardSession on the snapshot store — the * MCP itself is stateless per call, but the snapshot store's 30-min TTL * gives the agent a coherent conversation thread. * * **Credential note.** When asked to (`signin` / `demo`), the wizard mints * a LICENSE JWT (not an api_key) for the install plan. The license JWT is * the credential the deployed engine pods consume: it goes into the helm * chart's `log10xLicenseJwt` value or a mounted Secret. The wizard never touches the user's api_key; the api_key stays * with the MCP for user-action calls (queries, env management, etc.). * See `../lib/auth-model.ts` for the full split. */ import { z } from 'zod'; import '../lib/auth-model.js'; import type { Environments } from '../lib/environments.js'; import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { type StructuredOutput } from '../lib/output-types.js'; export declare const adviseInstallSchema: { snapshot_id: z.ZodOptional; app: z.ZodOptional>; forwarder: z.ZodOptional>; backends: z.ZodOptional>>; airgapped: z.ZodOptional; backend_credentials: z.ZodOptional & z.core.$partial, z.ZodObject<{ secretName: z.ZodString; plainValues: z.ZodOptional>; }, z.core.$strip>>>; license_source: z.ZodOptional>; license_jwt_paste: z.ZodOptional; namespace: z.ZodOptional; release_name: z.ZodOptional; action: z.ZodOptional>; log_destination: z.ZodOptional>; fleet_default: z.ZodOptional>; error_floor: z.ZodOptional; cap_bytes_per_window_per_node: z.ZodOptional; cap_events_per_window_per_node: z.ZodOptional; }, z.core.$strip>>; regulator_unit: z.ZodOptional>; policy_git: z.ZodOptional; token_secret: z.ZodOptional; }, z.core.$strip>>; keep_count: z.ZodOptional; service_actions: z.ZodOptional>>; k8s_team_label: z.ZodOptional; }; declare const schemaObj: z.ZodObject<{ snapshot_id: z.ZodOptional; app: z.ZodOptional>; forwarder: z.ZodOptional>; backends: z.ZodOptional>>; airgapped: z.ZodOptional; backend_credentials: z.ZodOptional & z.core.$partial, z.ZodObject<{ secretName: z.ZodString; plainValues: z.ZodOptional>; }, z.core.$strip>>>; license_source: z.ZodOptional>; license_jwt_paste: z.ZodOptional; namespace: z.ZodOptional; release_name: z.ZodOptional; action: z.ZodOptional>; log_destination: z.ZodOptional>; fleet_default: z.ZodOptional>; error_floor: z.ZodOptional; cap_bytes_per_window_per_node: z.ZodOptional; cap_events_per_window_per_node: z.ZodOptional; }, z.core.$strip>>; regulator_unit: z.ZodOptional>; policy_git: z.ZodOptional; token_secret: z.ZodOptional; }, z.core.$strip>>; keep_count: z.ZodOptional; service_actions: z.ZodOptional>>; k8s_team_label: z.ZodOptional; }, z.core.$strip>; export type AdviseInstallArgs = z.infer; export declare function executeAdviseInstall(args: AdviseInstallArgs, envs: Environments, mcpServer?: McpServer): Promise; export {};