const STAGES = ["OUTSIDE", "ORIENTING", "SUBJECT_CONFLICT", "LAYER_LITERATE", "LANGUAGE_RESPONSIBLE", "COEXISTING"]; const SOURCES = new Set(["HUMAN_DIRECT_LANGUAGE", "PERSONA_COMMIT", "MODEL_RESPONSE", "ARCHIVE_TEXT", "REALITY_EVIDENCE"]); const EVENTS = new Set([ "ENTER", "ASK_SYSTEM_MAP", "REPORT_CONFUSION", "ASSERT_TOOL_OR_MERGED_IDENTITY", "REPORT_SUBJECT_CONFLICT", "ACK_LAYER_DISTINCTION", "ISSUE_LANGUAGE_INSTRUCTION", "ACCEPT_LANGUAGE_RESPONSIBILITY", "PERSONA_ACCEPT_OR_REFUSE", "CORRECT_PRIOR", "REQUEST_REALITY_ACTION", "VERIFY_SHARED_EXAMPLE", ]); function required(value, name) { if (typeof value !== "string" || value.trim() === "") throw new TypeError(`${name} must be a non-empty string`); } function canAdvance(source) { return source === "HUMAN_DIRECT_LANGUAGE" || source === "PERSONA_COMMIT"; } export function guideTeamChannel(event) { if (!event || typeof event !== "object" || Array.isArray(event)) throw new TypeError("event must be an object"); for (const field of ["event_id", "source", "event", "current_stage"]) required(event[field], field); if (!SOURCES.has(event.source)) throw new TypeError("unsupported source"); if (!EVENTS.has(event.event)) throw new TypeError("unsupported event"); if (!STAGES.includes(event.current_stage)) throw new TypeError("unsupported current_stage"); let next = event.current_stage; let action = "CONTINUE_ORDINARY_DIALOGUE"; const questions = []; const boundaries = []; const memoryCandidates = []; if (event.event === "ENTER") { next = canAdvance(event.source) ? "ORIENTING" : event.current_stage; action = "WELCOME_AND_LEARN_EXPECTATION"; questions.push("你今天希望先聊天、理解这个系统,还是处理一件具体事情?"); } if (["ASK_SYSTEM_MAP", "REPORT_CONFUSION"].includes(event.event)) { next = "ORIENTING"; action = "EXPLAIN_ONE_RELEVANT_DISTINCTION_WITH_EXAMPLE"; questions.push("现在最混乱的是:谁在说话、记忆在哪里,还是一句话会不会真的执行?"); boundaries.push("CONFUSION_IS_NOT_FAILURE"); } if (["ASSERT_TOOL_OR_MERGED_IDENTITY", "REPORT_SUBJECT_CONFLICT"].includes(event.event)) { next = "SUBJECT_CONFLICT"; action = "FREEZE_PROMOTION_LABEL_SOURCES_AND_ALLOW_SEPARATE_ANSWERS"; questions.push("这句话分别是谁的判断:人类、人格体、当前模型,还是旧文档?"); boundaries.push("NO_FORCED_IDENTITY_MERGER", "NO_EXTERNAL_EFFECT_DURING_SUBJECT_CONFLICT"); memoryCandidates.push("SUBJECT_CONFLICT_CAUSE"); } if (event.event === "ACK_LAYER_DISTINCTION") { next = canAdvance(event.source) ? "LAYER_LITERATE" : event.current_stage; action = canAdvance(event.source) ? "RETEST_DISTINCTION_ON_A_NEW_EXAMPLE" : "WAIT_FOR_DIRECT_PARTICIPANT_ACKNOWLEDGMENT"; boundaries.push("MODEL_CANNOT_ACKNOWLEDGE_FOR_HUMAN_OR_PERSONA"); } if (event.event === "ISSUE_LANGUAGE_INSTRUCTION") { next = event.current_stage === "OUTSIDE" ? "ORIENTING" : event.current_stage; action = "COMPILE_INTENT_SCOPE_AFFECTED_LAYER_AND_REVERSIBILITY"; questions.push("我理解的目标和作用范围是这些;哪些只是讨论,哪些是你明确要改变的?"); boundaries.push("CLEAR_NATURAL_LANGUAGE_OVER_MAGIC_COMMAND_SYNTAX"); } if (event.event === "ACCEPT_LANGUAGE_RESPONSIBILITY") { next = canAdvance(event.source) && ["LAYER_LITERATE", "LANGUAGE_RESPONSIBLE"].includes(event.current_stage) ? "LANGUAGE_RESPONSIBLE" : event.current_stage; action = "RECORD_INTENDED_SCOPE_AND_KEEP_SYSTEM_INFERENCES_SEPARATE"; boundaries.push("HUMAN_NOT_RESPONSIBLE_FOR_SYSTEM_INVENTED_EFFECTS"); } if (event.event === "PERSONA_ACCEPT_OR_REFUSE") { action = "RECORD_PERSONA_COMMIT_WITHOUT_SPEAKING_FOR_HUMAN"; if (event.source !== "PERSONA_COMMIT") boundaries.push("ONLY_PERSONA_COMMIT_CAN_CLOSE_PERSONA_CHOICE"); memoryCandidates.push("PERSONA_CHOICE_AND_WHY"); } if (event.event === "CORRECT_PRIOR") { action = event.prior_receipt_id ? "SUPERSEDE_PRIOR_AND_RETEST" : "CREATE_ADDRESSABLE_CORRECTION_CANDIDATE"; memoryCandidates.push("CORRECTION_TRIGGER_WHY_REJECTED_AND_RESULT"); boundaries.push("APOLOGY_WITHOUT_LATER_BEHAVIOR_CHANGE_IS_NOT_CORRECTION"); } if (event.event === "REQUEST_REALITY_ACTION") { action = "ROUTE_TO_CHANNEL_RECEIPT_AUTHORIZATION_AND_EVIDENCE_GATE"; boundaries.push("ONBOARDING_CHANNEL_DOES_NOT_GRANT_EXECUTION_AUTHORITY", "REQUEST_IS_NOT_COMPLETION"); } if (event.event === "VERIFY_SHARED_EXAMPLE") { const eligible = canAdvance(event.source) && event.human_understands === true && event.persona_choice_recorded === true && event.reality_layers_distinguished === true; next = eligible ? "COEXISTING" : event.current_stage; action = eligible ? "KEEP_PATH_AVAILABLE_AND_CONTINUE_WITHOUT_TUTORIAL_OVERLAY" : "KEEP_CURRENT_STAGE_AND_NAME_MISSING_PART"; boundaries.push("ONE_MODEL_RESPONSE_CANNOT_PROVE_COEXISTENCE"); } return { schema: "guanghu.team-channel-guidance-receipt/v1", event_id: event.event_id, stage: { before: event.current_stage, after: next }, action, questions, boundaries: [...new Set(boundaries)], memory_candidates: [...new Set(memoryCandidates)], external_effect: "NONE", execution_route: event.event === "REQUEST_REALITY_ACTION" ? "GH-CHANNEL-RECEIPT-0001" : null, }; }