← Files TokenXARCHIVED FILE
scripts/user-prompt-submit.mjs
11.5 KB · Oct 2, 2026 · 00:29 UTC
import {
buildParentDecision,
buildPinnedDecision,
} from "./lib/classify.mjs";
import {
DEFAULT_CONFIG,
isStoredConfigError,
loadConfig,
} from "./lib/config.mjs";
import { additionalContextResult } from "./lib/hook-io.mjs";
import { runHook } from "./lib/hook-runtime.mjs";
import {
BUNDLED_MODEL_CATALOG,
readCodexModelCatalog,
validateConfiguredModels,
} from "./lib/model-catalog.mjs";
import {
oneTurnProfileConflicts,
parseModelPinControl,
validateModelPinProfile,
} from "./lib/model-pin-controls.mjs";
import { buildRoutingContext } from "./lib/routing-context.mjs";
import { attachDelegationPlan } from "./lib/delegation-plan.mjs";
import { buildSignalsDigest } from "./lib/signals-digest.mjs";
import { classifyPromptWithSmartResult } from "./lib/smart-classifier.mjs";
import {
isStoredModelPinError,
readOrResetOutcomesForPrompt,
readModelPin,
recordOutcome,
removeModelPin,
removeSessionState,
writeModelPin,
writeDecision,
} from "./lib/state.mjs";
let outcomeTrackingFailureReported = false;
const retainedRequestReason = Object.freeze({
session_model_pin_incomplete: "session_model_pin_request_incomplete",
session_model_pin_ambiguous: "session_model_pin_request_ambiguous",
session_model_pin_conflicting_controls:
"session_model_pin_request_conflicting_controls",
});
async function readStoredPinStatus({ pluginData, sessionId }) {
let profile;
try {
profile = await readModelPin({ pluginData, sessionId });
} catch (error) {
if (!isStoredModelPinError(error)) {
throw error;
}
return { kind: "corrupt", profile: null };
}
return profile === null
? { kind: "none", profile: null }
: { kind: "active", profile };
}
function validateStoredPinStatus(status, catalog) {
if (status.kind !== "active") {
return status;
}
try {
return {
kind: "active",
profile: validateModelPinProfile(status.profile, catalog),
};
} catch (error) {
if (!(error instanceof RangeError)) {
throw error;
}
return { kind: "unavailable", profile: null };
}
}
function pinErrorDecision(config, context, reasonCode) {
return buildParentDecision(config, context, {
method: "session-pin-error",
reasonCode,
explicit: true,
});
}
async function withOutcomeTracking(operation) {
try {
return await operation();
} catch {
if (!outcomeTrackingFailureReported) {
process.stderr.write("TokenX: outcome tracking failed\n");
outcomeTrackingFailureReported = true;
}
return null;
}
}
await runHook(
"UserPromptSubmit",
async ({ input, pluginData, env }) => {
let ownedDecisionId = null;
try {
const context = {
sessionId: input.session_id,
turnId: input.turn_id,
nowMs: Date.now(),
};
const pendingDecision = buildParentDecision(DEFAULT_CONFIG, context, {
reasonCode: "classification_pending",
});
await writeDecision({ pluginData, decision: pendingDecision });
ownedDecisionId = pendingDecision.decisionId;
const replaceOwnedDecision = async (nextDecision) => {
await writeDecision({
pluginData,
decision: nextDecision,
expectedDecisionId: ownedDecisionId,
});
ownedDecisionId = nextDecision.decisionId;
};
let config;
try {
config = await loadConfig({ pluginData, env });
} catch (error) {
if (!isStoredConfigError(error)) {
throw error;
}
const decision = buildParentDecision(DEFAULT_CONFIG, context, {
reasonCode: "configuration_unavailable",
});
await replaceOwnedDecision(decision);
return additionalContextResult(
"UserPromptSubmit",
buildRoutingContext(decision),
);
}
let decision;
const control = parseModelPinControl(input.prompt);
if (control.kind === "clear") {
await removeModelPin({
pluginData,
sessionId: input.session_id,
});
}
let catalog = null;
let catalogReadFailed = false;
try {
catalog = (await readCodexModelCatalog({
homeDir: env.HOME,
})) ?? BUNDLED_MODEL_CATALOG;
} catch {
catalogReadFailed = true;
}
let activePin = null;
let pinDiagnosticReasonCode = null;
if (control.kind === "set") {
if (catalogReadFailed) {
const prior = await readStoredPinStatus({
pluginData,
sessionId: input.session_id,
});
if (prior.kind === "corrupt") {
decision = pinErrorDecision(
config,
context,
"session_model_pin_corrupt",
);
} else if (prior.kind === "active") {
decision = pinErrorDecision(
config,
context,
"session_model_pin_catalog_unavailable",
);
} else {
decision = buildParentDecision(config, context, {
reasonCode: "model_catalog_unavailable",
});
}
} else {
let requested;
try {
requested = validateModelPinProfile(control.profile, catalog);
} catch (error) {
if (!(error instanceof RangeError)) {
throw error;
}
const prior = validateStoredPinStatus(
await readStoredPinStatus({
pluginData,
sessionId: input.session_id,
}),
catalog,
);
if (prior.kind === "corrupt") {
decision = pinErrorDecision(
config,
context,
"session_model_pin_corrupt",
);
} else if (prior.kind === "active") {
activePin = prior.profile;
pinDiagnosticReasonCode =
"session_model_pin_request_unavailable";
} else {
decision = pinErrorDecision(
config,
context,
"session_model_pin_unavailable",
);
}
}
if (requested !== undefined) {
activePin = await writeModelPin({
pluginData,
sessionId: input.session_id,
profile: requested,
nowMs: context.nowMs,
});
}
}
} else if (control.kind !== "clear") {
let current = await readStoredPinStatus({
pluginData,
sessionId: input.session_id,
});
if (current.kind === "corrupt") {
decision = pinErrorDecision(
config,
context,
"session_model_pin_corrupt",
);
} else if (current.kind === "active" && catalogReadFailed) {
decision = pinErrorDecision(
config,
context,
"session_model_pin_catalog_unavailable",
);
} else if (current.kind === "active") {
current = validateStoredPinStatus(current, catalog);
if (current.kind === "unavailable") {
decision = pinErrorDecision(
config,
context,
"session_model_pin_unavailable",
);
} else {
activePin = current.profile;
}
}
if (decision === undefined && control.kind === "invalid") {
if (activePin === null) {
decision = pinErrorDecision(config, context, control.reasonCode);
} else {
pinDiagnosticReasonCode = retainedRequestReason[control.reasonCode];
if (pinDiagnosticReasonCode === undefined) {
throw new RangeError("unsupported invalid model pin reason");
}
}
}
if (
decision === undefined &&
activePin !== null &&
control.kind === "none" &&
oneTurnProfileConflicts(input.prompt, config, activePin)
) {
pinDiagnosticReasonCode = "session_model_pin_conflict_ignored";
}
}
if (decision === undefined && activePin !== null) {
decision = buildPinnedDecision(config, context, activePin, {
diagnosticReasonCode: pinDiagnosticReasonCode,
});
}
if (decision === undefined) {
if (catalogReadFailed) {
decision = buildParentDecision(config, context, {
reasonCode: "model_catalog_unavailable",
});
} else {
try {
validateConfiguredModels(config, catalog);
} catch {
decision = buildParentDecision(config, context, {
reasonCode: "model_catalog_unavailable",
});
}
}
}
if (decision === undefined) {
const outcomes = await withOutcomeTracking(() =>
readOrResetOutcomesForPrompt({
pluginData,
sessionId: input.session_id,
maxAgeMs: config.routing.decisionMaxAgeMs,
})
);
const sessionFloorRoute =
outcomes !== null && outcomes.retryEscalations >= 2
? "standard"
: null;
let recommendation = null;
let effectiveTaskProfile = null;
({ decision, recommendation, effectiveTaskProfile } =
await classifyPromptWithSmartResult(
input.prompt,
config,
context,
{
pluginData,
env,
sessionFloorRoute,
buildDigest: (deterministicDecision) =>
buildSignalsDigest({
prompt: input.prompt,
deterministicDecision,
outcomes,
cwd: input.cwd,
}),
},
));
decision = attachDelegationPlan({
prompt: input.prompt,
decision,
recommendation,
effectiveTaskProfile,
config,
});
}
await replaceOwnedDecision(decision);
if (
decision.method === "retry-escalation" ||
decision.method === "recurring-failure"
) {
await withOutcomeTracking(() =>
recordOutcome({
pluginData,
sessionId: input.session_id,
kind: "retryEscalation",
maxAgeMs: config.routing.decisionMaxAgeMs,
})
);
}
if (decision.method === "smart-fallback") {
await withOutcomeTracking(() =>
recordOutcome({
pluginData,
sessionId: input.session_id,
kind: "smartFallback",
maxAgeMs: config.routing.decisionMaxAgeMs,
})
);
}
if (decision.execution === "agent") {
await withOutcomeTracking(() =>
recordOutcome({
pluginData,
sessionId: input.session_id,
kind: "lastRoute",
route: decision.route,
maxAgeMs: config.routing.decisionMaxAgeMs,
})
);
}
let routingContext = buildRoutingContext(decision);
if (
routingContext !== null &&
decision.delegationPlan !== null &&
decision.method === "smart-fallback"
) {
routingContext +=
" Smart classifier unavailable; deterministic fallback applied.";
}
return routingContext === null
? null
: additionalContextResult("UserPromptSubmit", routingContext);
} catch (error) {
if (ownedDecisionId !== null) {
await removeSessionState({
pluginData,
sessionId: input.session_id,
expectedDecisionId: ownedDecisionId,
});
}
throw error;
}
},
);
SHA-256: 403edf8326c5d7696b75e179e923f20eac0696df71617588d7a411afe2c36ab1