generated from kgod/ai-review-template
feat: builder 简历生成 + 轻度优化 + 简历导入交付副本
自内部仓库剥离深度优化与 RAG 知识库后的交付版本: - Builder 对话式简历生成(FSM + 意图路由 LLM 兜底增强) - 条目级轻度优化:事实覆盖门禁 + STAR/bullet 修复链,功能/简介/成果与技术栈同级保护 - 简历导入:DOCX/PDF 解析、结构归一、手机号脱敏 - PostgreSQL 运行时 + Alembic 迁移链 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""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("__")]
|
||||
Reference in New Issue
Block a user