Files
resume-agent/backend/app/builder_conversation/__init__.py
T
hypandClaude ae2d9b128d feat: builder 简历生成 + 轻度优化 + 简历导入交付副本
自内部仓库剥离深度优化与 RAG 知识库后的交付版本:
- Builder 对话式简历生成(FSM + 意图路由 LLM 兜底增强)
- 条目级轻度优化:事实覆盖门禁 + STAR/bullet 修复链,功能/简介/成果与技术栈同级保护
- 简历导入:DOCX/PDF 解析、结构归一、手机号脱敏
- PostgreSQL 运行时 + Alembic 迁移链

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-05 11:08:30 +08:00

80 lines
2.2 KiB
Python

"""Focused Builder conversation policy for lightweight resume completion.
Builder collects confirmed resume facts only. It never calls the deep-optimization
graph, job rubrics, Office data, or JD analysis. Candidate rewrites remain optional
until the user explicitly chooses one in the confirmation card.
This package was split from the original single module to keep every code file
within the 200-line harness limit. The public surface is re-exported here so
existing `from . import builder_conversation` / `from app.builder_conversation
import ...` consumers keep working unchanged.
"""
from __future__ import annotations
from .candidate import (
_candidate_rewrite,
_fact_is_preserved,
_material_fact_fragments,
_normalize_material_fact,
_uncovered_material_facts,
)
from .component_events import process_component_event
from .constants import (
GAP_PROMPTS,
IDENTITY_CHANGE_TERMS,
MAX_GAP_DIMENSIONS,
MAX_GAPS_PER_TURN,
NO_INFORMATION_PATTERNS,
SECTION_GAP_DIMENSIONS,
SECTION_HEADINGS,
SECTION_KEYWORDS,
SECTION_PRIORITY,
u,
)
from .flow import _begin_edit, _process_detail_message, process_message
from .followups import (
_continue_recent_entry,
_redisplay_revision_candidate,
reconcile_last_confirmed_entry,
)
from .predicates import (
_dimension_present,
_entry_by_id,
_gap_prompt,
_is_no_information_reply,
_is_revision_instruction,
_looks_like_recent_continuation,
_matching_entries,
_next_gap_dimensions,
_requested_section,
_requests_identity_change,
_requests_new_entry,
)
from .save import save_entry
from .skills import _builder_skill_candidates, _process_skill_selection, _skill_choice_card
from .state import (
_clear_draft,
_completed_sections,
_dedupe_strings,
_gap_state,
_highlights,
_merge_fact_text,
_public_entry,
_reset_gap_state,
_set_stream_phases,
ensure_builder_state,
)
from .turns import (
_entry_choice_card,
_entry_label,
_fact_prompt,
_next_step_turn,
_record_card,
_section_choice_card,
recommended_section,
welcome_turn,
)
__all__ = [name for name in dir() if not name.startswith("__")]