80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
export const ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION = "assistant_route_policy_runtime_v1" as const;
|
|
|
|
export interface RunAssistantRoutePolicyRuntimeInput {
|
|
rawUserMessage: string;
|
|
effectiveAddressUserMessage: string;
|
|
followupContext: unknown;
|
|
llmPreDecomposeMeta: Record<string, unknown>;
|
|
sessionItems?: unknown[];
|
|
sessionOrganizationScope?: unknown;
|
|
useMock: boolean;
|
|
resolveAssistantOrchestrationDecision: (input: {
|
|
rawUserMessage: string;
|
|
effectiveAddressUserMessage: string;
|
|
followupContext: unknown;
|
|
llmPreDecomposeMeta: Record<string, unknown>;
|
|
sessionItems?: unknown[];
|
|
sessionOrganizationScope?: unknown;
|
|
useMock: boolean;
|
|
}) => Record<string, unknown>;
|
|
}
|
|
|
|
export interface AssistantRoutePolicyRuntimeContract {
|
|
schema_version: typeof ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION;
|
|
policy_owner: "assistantRoutePolicyRuntimeAdapter";
|
|
decision_source: "resolveAssistantOrchestrationDecision";
|
|
living_mode: unknown;
|
|
living_reason: unknown;
|
|
tool_gate_decision: unknown;
|
|
tool_gate_reason: unknown;
|
|
has_followup_context: boolean;
|
|
has_orchestration_contract: boolean;
|
|
}
|
|
|
|
export interface RunAssistantRoutePolicyRuntimeOutput {
|
|
orchestrationDecision: Record<string, unknown>;
|
|
livingModeDecision: {
|
|
mode: unknown;
|
|
reason: unknown;
|
|
};
|
|
routePolicyContract: AssistantRoutePolicyRuntimeContract;
|
|
}
|
|
|
|
function hasObject(value: unknown): boolean {
|
|
return Boolean(value && typeof value === "object");
|
|
}
|
|
|
|
export function runAssistantRoutePolicyRuntime(
|
|
input: RunAssistantRoutePolicyRuntimeInput
|
|
): RunAssistantRoutePolicyRuntimeOutput {
|
|
const orchestrationDecision = input.resolveAssistantOrchestrationDecision({
|
|
rawUserMessage: input.rawUserMessage,
|
|
effectiveAddressUserMessage: input.effectiveAddressUserMessage,
|
|
followupContext: input.followupContext,
|
|
llmPreDecomposeMeta: input.llmPreDecomposeMeta,
|
|
sessionItems: input.sessionItems,
|
|
sessionOrganizationScope: input.sessionOrganizationScope,
|
|
useMock: input.useMock
|
|
});
|
|
const livingModeDecision = {
|
|
mode: orchestrationDecision.livingMode,
|
|
reason: orchestrationDecision.livingReason
|
|
};
|
|
|
|
return {
|
|
orchestrationDecision,
|
|
livingModeDecision,
|
|
routePolicyContract: {
|
|
schema_version: ASSISTANT_ROUTE_POLICY_RUNTIME_SCHEMA_VERSION,
|
|
policy_owner: "assistantRoutePolicyRuntimeAdapter",
|
|
decision_source: "resolveAssistantOrchestrationDecision",
|
|
living_mode: livingModeDecision.mode,
|
|
living_reason: livingModeDecision.reason,
|
|
tool_gate_decision: orchestrationDecision.toolGateDecision ?? null,
|
|
tool_gate_reason: orchestrationDecision.toolGateReason ?? null,
|
|
has_followup_context: hasObject(input.followupContext),
|
|
has_orchestration_contract: hasObject(orchestrationDecision.orchestrationContract)
|
|
}
|
|
};
|
|
}
|