• …i_op_queue staging cols + ai_skill registry
    
    - proposeCreate tool -> ai_op_queue draft(payload) -> confirm executes addBusinessData
    - ai_op_queue: add sPayload/sSourceRef/bAutoExecute/sResultBillId/sErrorMsg/tExecutedDate/tExpireAt (create/examine/auto-flow ready)
    - ai_skill registry table + seed playbooks (Skills §6)
    - QueryTool: self-repair retry (feed SQL error back to model, up to 3x)
    - TracingChatModelListener: per-call LLM latency/token/error trace (Langfuse hook point)
    zichun authored
     
    Browse Code »

  • - FormResolverService: shared KG resolution (entity->master table excl. viw_*, field 中文->column, name field, labels)
    - ErpReadTool.lookupRecord(entity, record): reliably resolves the master table + returns a single record's full labelled fields — fixes the 'specific field of a specific record' case (e.g. 必胜客的销售员 -> 马艺祖)
    - AuditService + ai_audit_log: immutable audit of propose/confirm/cancel/query (who/when/action/target/result)
    - QueryTool.queryData(question): read-only SQL escape hatch — coder-model NL2SQL grounded on 字段字典, jsqlparser single-SELECT guard, blocks OUTFILE/LOAD_FILE/information_schema/SLEEP, forced LIMIT, audited. SAFE by construction; NL2SQL table/join accuracy for complex questions is limited (architecture-flagged, deferred).
    
    Verified: lookupRecord works; audit rows written; Query guards + LIMIT + audit work (NL2SQL grounding still mis-picks entity master on multi-table questions).
    zichun authored
     
    Browse Code »
  • - ai_op_queue: staging table for AI write ops (draft|confirmed|executed|failed|cancelled)
    - ProposeWriteTool.proposeUpdate(entity, record, field, newValue): self-resolves the entity master table (excludes viw_* report views), resolves field via 字段字典, locates the unique record + old value, stages a DRAFT to ai_op_queue — DOES NOT execute; returns a proposal
    - ErpClient.updateForm: executes via ERP addUpdateDelBusinessData with the frontend-compatible payload {data:[{sTable,name:master,column:[{handleType:update,sId,field:value}]}]}
    - OpController: deterministic (non-LLM) POST /op/{id}/confirm (executes + writes back status) / cancel / GET pending
    - AgentChatController.onToolExecuted: on proposeUpdate, attach conversation + push write_proposal SSE
    - chat.html: confirm/cancel card + result echo
    - system prompt: proposeUpdate flow; never claim a write is done before confirm
    
    Verified end-to-end: '把必胜客简称改成必胜客中国' -> proposal card -> confirm -> ERP update -> DB changed; cancel -> DB unchanged. Nothing executes without explicit user confirm.
    zichun authored
     
    Browse File »
  • Roll L2 flow up to domain->domain adjacency (11 domains) with anchor
    forms, form/tool counts, and the matching AI-agent scene. This is the
    coarse L1 tier meant to live in the agent system prompt for routing;
    L2/L3 stay as on-demand tools. Domains align to ai_agent's 8 business
    智能体 (+ 基础资料/设备/其他 -> ERP代理人).
    zichun authored
     
    Browse Dir »
  • Materialize each form's L2 neighbors (upstream/downstream documents) and
    L3 neighbors (referenced entity tables) so the retriever can expand a
    vector-recalled form-card into a subgraph context via a single JOIN.
    702 forms have downstream, 476 upstream, 1467 reference entity tables.
    zichun authored
     
    Browse Dir »
  • zichun authored
     
    Browse Dir »
  • Map 业务中文名 -> real column -> table (38342 mappings, 6075 terms, 539
    tables), ranked by form-usage for same-name disambiguation, with FK target
    (sFkTable/sFkKey) attached from viw_kg_edge_ref so NL2SQL knows the join.
    This is the field-dictionary half of the GraphRAG package.
    zichun authored
     
    Browse Dir »
  • Assemble one structured, embeddable text card per form (1748) merging
    node metadata, upstream/downstream document names, and the field 中文名
    list. export_form_cards.sh emits JSONL for vector-store ingestion
    (group_concat_max_len raised to avoid truncating 269-field forms).
    Generated corpus is gitignored — regenerate deterministically via script.
    zichun authored
     
    Browse Dir »
  • Parse gdsconfigformslave.sRelation (comma-separated field&table&pk&display
    hops) into FK edges: src_table.field -> tgt_table.pk, with the set of
    display columns each FK surfaces aggregated per edge. 1597 distinct FK
    edges / 368 source tables / 109 target tables (mostly ele*/sis* master
    data). Provides the join dictionary for NL2SQL grounding.
    zichun authored
     
    Browse Code »
  • One row per useful form enriched with business domain (L1, derived from
    normalized data-source prefix + AI-scene override), data source/exec type,
    and upstream/downstream flow counts from viw_kg_edge_flow. 857 forms
    participate in document flow; 63 back an AI tool; 92% domain-classified.
    zichun authored
     
    Browse Dir »
  • Materialize source-form -->generate--> target-form flow edges from the
    low-code config. Resolves BtnCopyTo.<Action>.sActiveId to the target
    gdsmodule exactly as Sp_Ai_AddCommonAfterNew does (sActiveId is the real
    target; the .ActXxx suffix is only a label).
    
    411 distinct edges / 405 (src,tgt) pairs / 51 self-loops; 404 endpoints
    hit viw_ai_useful_forms. Captures full order-to-cash and procure-to-pay
    chains plus cross-domain (order->workorder, quote->process-card).
    zichun authored
     
    Browse Dir »