| 847 | } |
| 848 | |
| 849 | func showConfigSetupHint(root string) { |
| 850 | assessment := config.AssessSetup(root) |
| 851 | if !assessment.NeedsAttention() { |
| 852 | return |
| 853 | } |
| 854 | |
| 855 | type configHint struct { |
| 856 | State string `json:"state"` |
| 857 | Reasons []string `json:"reasons,omitempty"` |
| 858 | } |
| 859 | if data, err := json.Marshal(configHint{ |
| 860 | State: string(assessment.State), |
| 861 | Reasons: assessment.Reasons, |
| 862 | }); err == nil { |
| 863 | fmt.Printf("<!-- codemap:config %s -->\n", string(data)) |
| 864 | } |
| 865 | |
| 866 | fmt.Println("⚙️ Codemap config setup recommended:") |
| 867 | for _, reason := range assessment.Reasons { |
| 868 | fmt.Printf(" • %s\n", reason) |
| 869 | } |
| 870 | fmt.Println(" • Run `codemap skill show config-setup` and tune `.codemap/config.json` before deeper analysis.") |
| 871 | fmt.Println() |
| 872 | } |
| 873 | |
| 874 | // showDriftWarnings checks and displays documentation drift warnings. |
| 875 | func showDriftWarnings(root string, cfg config.DriftConfig, routing config.RoutingConfig) { |