/**
 * PNP/profile policy input detection (M8 PR 4 — see `.cursor/plans/m8-design.md` F2 and
 * `.cursor/plans/m8-implementation-plan.md` § PR 4).
 *
 * Pure helpers that decide whether the inputs the engine has been given
 * actually carry PNP/profile policy material. Used by:
 *
 *   - {@link ToolPolicyEngine}'s constructor as the auto-default for
 *     `pnpEnforcement` when the host did not pass an explicit `"on"` /
 *     `"off"`.
 *   - {@link ToolkitCoordinator.resolveEffectivePnpEnforcement} as the
 *     auto-mode rule. PR 2 used a coarse "any non-null assessment → on"
 *     placeholder; PR 4 narrows it to "assessment OR currentItemRef
 *     carries profile policy material."
 *
 * The rule is intentionally narrow. Hosts that bind a bare assessment
 * record (only `id` / `name`, no PNP and no settings) do not engage
 * PNP/profile gates. The flip happens the moment the assessment carries any of:
 *
 *   - `personalNeedsProfile` (any `supports`, `prohibitedSupports`, or
 *     `activateAtInit`),
 *   - `settings.districtPolicy` (any `blockedTools`, `requiredTools`,
 *     or `policies`),
 *   - `settings.testAdministration` (any populated key — `mode`,
 *     `toolOverrides`, etc.),
 *   - or the bound `currentItemRef.settings` carries
 *     `requiredTools` / `restrictedTools` / `toolParameters`.
 *
 * Hosts opt out of the auto-on behavior by passing
 * `pnpEnforcement: "off"` explicitly (engine input or
 * `ToolkitCoordinator.setPnpEnforcement("off")`).
 */
import type { AssessmentEntity, AssessmentItemRef } from "@pie-players/pie-players-shared/types";
/**
 * Return `true` when the assessment carries any PNP/profile policy
 * material that the engine's `PnpPolicySource` would consume.
 *
 * The check is structural — the presence of a non-empty PNP, district
 * policy, or test administration block is enough; the content does not
 * have to validate against any specific rule.
 */
export declare function assessmentHasPnpPolicyInputs(assessment: AssessmentEntity | null | undefined): boolean;
/**
 * Return `true` when the bound item reference carries item-level profile policy
 * material (`requiredTools`, `restrictedTools`, or `toolParameters`).
 *
 * Used in addition to {@link assessmentHasPnpPolicyInputs} so a host that
 * navigates to an item with profile-relevant settings — without a parent
 * assessment carrying its own PNP/district/test-admin block — still
 * gets PNP/profile gates engaged for that item.
 */
export declare function itemRefHasPnpPolicyInputs(itemRef: AssessmentItemRef | null | undefined): boolean;
/**
 * Resolve the default `pnpEnforcement` mode given the bound inputs.
 *
 * Returns `"on"` when {@link assessmentHasPnpPolicyInputs} or
 * {@link itemRefHasPnpPolicyInputs} reports any profile policy material; otherwise
 * `"off"`. Hosts override the default by passing an explicit
 * `pnpEnforcement` value (engine input) or by calling
 * `ToolkitCoordinator.setPnpEnforcement("on" | "off")`.
 */
export declare function resolveDefaultPnpEnforcement(args: {
    assessment?: AssessmentEntity | null;
    currentItemRef?: AssessmentItemRef | null;
}): "on" | "off";
