code-atlas-forge 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. code_atlas/__init__.py +6 -0
  2. code_atlas/__main__.py +6 -0
  3. code_atlas/api/__init__.py +5 -0
  4. code_atlas/api/handlers.py +1514 -0
  5. code_atlas/api/server.py +394 -0
  6. code_atlas/cli.py +2084 -0
  7. code_atlas/config.py +149 -0
  8. code_atlas/context/__init__.py +66 -0
  9. code_atlas/context/contracts.py +277 -0
  10. code_atlas/context/domain.py +760 -0
  11. code_atlas/context/engine.py +442 -0
  12. code_atlas/context/expand.py +133 -0
  13. code_atlas/context/renderers.py +71 -0
  14. code_atlas/context/tokenizer.py +37 -0
  15. code_atlas/contracts/__init__.py +38 -0
  16. code_atlas/contracts/enums.py +67 -0
  17. code_atlas/contracts/models.py +175 -0
  18. code_atlas/contracts/ports.py +70 -0
  19. code_atlas/discovery/__init__.py +25 -0
  20. code_atlas/discovery/gitignore.py +119 -0
  21. code_atlas/discovery/identity.py +52 -0
  22. code_atlas/discovery/models.py +204 -0
  23. code_atlas/discovery/scanner.py +495 -0
  24. code_atlas/domains/__init__.py +107 -0
  25. code_atlas/domains/api/__init__.py +28 -0
  26. code_atlas/domains/api/adapter.py +405 -0
  27. code_atlas/domains/api/common.py +308 -0
  28. code_atlas/domains/api/consumers.py +224 -0
  29. code_atlas/domains/api/emit.py +231 -0
  30. code_atlas/domains/api/openapi.py +398 -0
  31. code_atlas/domains/api/routes.py +582 -0
  32. code_atlas/domains/api/yaml_subset.py +683 -0
  33. code_atlas/domains/aws/__init__.py +28 -0
  34. code_atlas/domains/aws/adapter.py +382 -0
  35. code_atlas/domains/aws/common.py +261 -0
  36. code_atlas/domains/aws/configs.py +1164 -0
  37. code_atlas/domains/aws/emit.py +411 -0
  38. code_atlas/domains/aws/pyfiles.py +2220 -0
  39. code_atlas/domains/aws/sqlbridge.py +448 -0
  40. code_atlas/domains/cicd/__init__.py +50 -0
  41. code_atlas/domains/cicd/adapter.py +762 -0
  42. code_atlas/domains/cicd/classify.py +136 -0
  43. code_atlas/domains/cicd/workflow.py +504 -0
  44. code_atlas/domains/cicd/yamlmini.py +946 -0
  45. code_atlas/domains/cli_surface.py +739 -0
  46. code_atlas/domains/contracts.py +274 -0
  47. code_atlas/domains/crossresolve.py +1208 -0
  48. code_atlas/domains/evidence.py +57 -0
  49. code_atlas/domains/identity.py +149 -0
  50. code_atlas/domains/model.py +202 -0
  51. code_atlas/domains/registry.py +250 -0
  52. code_atlas/domains/resolution.py +65 -0
  53. code_atlas/domains/spark/__init__.py +31 -0
  54. code_atlas/domains/spark/adapter.py +146 -0
  55. code_atlas/domains/spark/emit.py +344 -0
  56. code_atlas/domains/spark/extract.py +108 -0
  57. code_atlas/domains/spark/sqllit.py +192 -0
  58. code_atlas/domains/spark/walk.py +1943 -0
  59. code_atlas/domains/sql/__init__.py +30 -0
  60. code_atlas/domains/sql/adapter.py +382 -0
  61. code_atlas/domains/sql/extract.py +1271 -0
  62. code_atlas/domains/sql/nodes.py +264 -0
  63. code_atlas/domains/sql/parser.py +1510 -0
  64. code_atlas/domains/sql/tokens.py +318 -0
  65. code_atlas/domains/summarize.py +126 -0
  66. code_atlas/domains/terraform/__init__.py +20 -0
  67. code_atlas/domains/terraform/adapter.py +127 -0
  68. code_atlas/domains/terraform/catalog.py +43 -0
  69. code_atlas/domains/terraform/extract.py +1277 -0
  70. code_atlas/domains/terraform/hcl.py +538 -0
  71. code_atlas/domains/terraform/refs.py +181 -0
  72. code_atlas/domains/terraform/tfjson.py +163 -0
  73. code_atlas/domains/terraform/tfvars.py +98 -0
  74. code_atlas/domains/validation.py +120 -0
  75. code_atlas/env_override.py +27 -0
  76. code_atlas/eval/__init__.py +26 -0
  77. code_atlas/eval/domain_eval.py +681 -0
  78. code_atlas/eval/ground_truth.py +688 -0
  79. code_atlas/eval/impact_truth.py +758 -0
  80. code_atlas/eval/metrics.py +178 -0
  81. code_atlas/eval/pack_value.py +610 -0
  82. code_atlas/federation/__init__.py +72 -0
  83. code_atlas/federation/federation.py +676 -0
  84. code_atlas/federation/model.py +355 -0
  85. code_atlas/federation/store.py +194 -0
  86. code_atlas/gitbin.py +48 -0
  87. code_atlas/graph/__init__.py +20 -0
  88. code_atlas/graph/builder.py +378 -0
  89. code_atlas/graph/identity.py +54 -0
  90. code_atlas/graph/queries.py +47 -0
  91. code_atlas/graph/validation.py +92 -0
  92. code_atlas/impact/__init__.py +37 -0
  93. code_atlas/impact/blast_radius.py +171 -0
  94. code_atlas/impact/contract_analyzer.py +104 -0
  95. code_atlas/impact/contracts.py +315 -0
  96. code_atlas/impact/diff_reader.py +142 -0
  97. code_atlas/impact/domain_traversal.py +768 -0
  98. code_atlas/impact/engine.py +392 -0
  99. code_atlas/impact/packs.py +128 -0
  100. code_atlas/impact/report.py +136 -0
  101. code_atlas/impact/revision_binding.py +220 -0
  102. code_atlas/impact/risk_classifier.py +83 -0
  103. code_atlas/impact/snapshot_resolver.py +136 -0
  104. code_atlas/impact/symbol_diff.py +210 -0
  105. code_atlas/impact/test_selector.py +166 -0
  106. code_atlas/indexing/__init__.py +5 -0
  107. code_atlas/indexing/cache.py +396 -0
  108. code_atlas/indexing/change_detector.py +278 -0
  109. code_atlas/indexing/coordinator.py +1032 -0
  110. code_atlas/indexing/dependency_planner.py +268 -0
  111. code_atlas/indexing/persist.py +436 -0
  112. code_atlas/indexing/reuse.py +85 -0
  113. code_atlas/install/__init__.py +7 -0
  114. code_atlas/install/cli.py +168 -0
  115. code_atlas/install/lifecycle.py +286 -0
  116. code_atlas/mcp.py +674 -0
  117. code_atlas/observability/__init__.py +19 -0
  118. code_atlas/observability/logging.py +199 -0
  119. code_atlas/parsers/__init__.py +43 -0
  120. code_atlas/parsers/contracts.py +209 -0
  121. code_atlas/parsers/engine.py +125 -0
  122. code_atlas/parsers/languages/__init__.py +1 -0
  123. code_atlas/parsers/languages/python.py +391 -0
  124. code_atlas/parsers/languages/tsx.py +28 -0
  125. code_atlas/parsers/languages/typescript.py +909 -0
  126. code_atlas/parsers/registry.py +51 -0
  127. code_atlas/parsers/tree_sitter_runtime.py +118 -0
  128. code_atlas/resolvers/__init__.py +33 -0
  129. code_atlas/resolvers/bootstrap.py +246 -0
  130. code_atlas/resolvers/capabilities.py +33 -0
  131. code_atlas/resolvers/contracts.py +133 -0
  132. code_atlas/resolvers/coordinator.py +96 -0
  133. code_atlas/resolvers/enrichment.py +318 -0
  134. code_atlas/resolvers/lsp/__init__.py +26 -0
  135. code_atlas/resolvers/lsp/adapter.py +256 -0
  136. code_atlas/resolvers/lsp/lifecycle.py +251 -0
  137. code_atlas/resolvers/lsp/spawn.py +92 -0
  138. code_atlas/resolvers/lsp/transport.py +240 -0
  139. code_atlas/resolvers/registry.py +33 -0
  140. code_atlas/resolvers/scip/__init__.py +49 -0
  141. code_atlas/resolvers/scip/decoder.py +216 -0
  142. code_atlas/resolvers/scip/importer.py +248 -0
  143. code_atlas/resolvers/scip/loader.py +90 -0
  144. code_atlas/resolvers/scip/mapper.py +271 -0
  145. code_atlas/resolvers/scip/provenance.py +211 -0
  146. code_atlas/resolvers/scip/resolver.py +289 -0
  147. code_atlas/resolvers/scip/validation.py +101 -0
  148. code_atlas/resolvers/syntactic/__init__.py +8 -0
  149. code_atlas/resolvers/syntactic/resolver.py +254 -0
  150. code_atlas/search/__init__.py +32 -0
  151. code_atlas/search/contracts.py +176 -0
  152. code_atlas/search/domain.py +561 -0
  153. code_atlas/search/engine.py +530 -0
  154. code_atlas/search/federated.py +276 -0
  155. code_atlas/search/graph.py +282 -0
  156. code_atlas/search/hybrid.py +151 -0
  157. code_atlas/search/intent.py +48 -0
  158. code_atlas/search/lexical.py +176 -0
  159. code_atlas/search/refs.py +359 -0
  160. code_atlas/search/structural.py +505 -0
  161. code_atlas/search/tokenizer.py +43 -0
  162. code_atlas/search/vector/__init__.py +35 -0
  163. code_atlas/search/vector/contracts.py +76 -0
  164. code_atlas/search/vector/embeddings.py +96 -0
  165. code_atlas/search/vector/index.py +169 -0
  166. code_atlas/search/vector/provider.py +50 -0
  167. code_atlas/storage/__init__.py +14 -0
  168. code_atlas/storage/db.py +47 -0
  169. code_atlas/storage/migrations.py +552 -0
  170. code_atlas/storage/store.py +1045 -0
  171. code_atlas/ui/__init__.py +29 -0
  172. code_atlas/ui/i18n.py +143 -0
  173. code_atlas/ui/kit.py +689 -0
  174. code_atlas/ui/wizard.py +317 -0
  175. code_atlas_forge-1.1.0.dist-info/METADATA +246 -0
  176. code_atlas_forge-1.1.0.dist-info/RECORD +181 -0
  177. code_atlas_forge-1.1.0.dist-info/WHEEL +5 -0
  178. code_atlas_forge-1.1.0.dist-info/entry_points.txt +2 -0
  179. code_atlas_forge-1.1.0.dist-info/licenses/LICENSE +202 -0
  180. code_atlas_forge-1.1.0.dist-info/licenses/NOTICE +17 -0
  181. code_atlas_forge-1.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,29 @@
1
+ """Forge UI Kit — stdlib-only interactive terminal layer (vendored from
2
+ spark-forge-aws; byte-adapted for code_atlas imports).
3
+
4
+ Zero dependencies, cross-platform (msvcrt on Windows, termios on
5
+ POSIX). Every interaction has a headless equivalent so automation never
6
+ blocks on a TTY that isn't there.
7
+ """
8
+
9
+ from code_atlas.ui.i18n import t
10
+ from code_atlas.ui.kit import (
11
+ UIContext,
12
+ confirm,
13
+ dashboard,
14
+ multi_select,
15
+ prompt,
16
+ select,
17
+ status_table,
18
+ )
19
+
20
+ __all__ = [
21
+ "UIContext",
22
+ "confirm",
23
+ "dashboard",
24
+ "multi_select",
25
+ "prompt",
26
+ "select",
27
+ "status_table",
28
+ "t",
29
+ ]
code_atlas/ui/i18n.py ADDED
@@ -0,0 +1,143 @@
1
+ """Minimal i18n for the UI kit — pt-BR default, en fallback.
2
+
3
+ Strings are keyed; a missing key falls back to English then to the key
4
+ itself (never a crash). ``FORGE_LANG`` or locale env decides.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import locale
10
+ import os
11
+
12
+ _STRINGS: dict[str, dict[str, str]] = {
13
+ "en": {
14
+ "choose": "Choose",
15
+ "continue": "Continue",
16
+ "cancel": "Cancel",
17
+ "back": "Back",
18
+ "quit": "Quit",
19
+ "yes": "yes",
20
+ "no": "no",
21
+ "confirm_q": "Continue?",
22
+ "select_hint": "up/down or j/k + enter; q or esc to cancel",
23
+ "toggle_hint": "space toggles, enter confirms; j/k moves",
24
+ "install_scope_q": "Where do you want to install?",
25
+ "install_profile_q": "Installation profile?",
26
+ "install_gateway_profile_q": "Execution profile?",
27
+ "install_hosts_q": "Configure AI hosts?",
28
+ "install_components_q": "Optional components?",
29
+ "review": "Review installation",
30
+ "scope_project": "Current repository",
31
+ "scope_workspace": "Entire workspace",
32
+ "scope_user": "My user account",
33
+ "profile_balanced": "Balanced (Recommended)",
34
+ "profile_economy": "Economy",
35
+ "profile_full": "Full",
36
+ "env_detected": "Environment detected",
37
+ "diff_old": "OLD contract/dir",
38
+ "diff_new": "NEW contract/dir",
39
+ "dry_run_banner": "plan only — nothing was written",
40
+ "approved_banner": "changes applied",
41
+ "need_decision": "required decision missing in non-interactive mode",
42
+ "health": "Health",
43
+ "status": "Status",
44
+ "doc_status": "status",
45
+ "doc_target": "target",
46
+ "doc_scope": "scope",
47
+ "doc_version": "version",
48
+ "doc_profile": "profile",
49
+ "doc_state_dir": "state dir",
50
+ "doc_managed": "managed",
51
+ "doc_entries": "entries",
52
+ "doc_checks": "CHECKS",
53
+ "doc_repairable": "(repairable)",
54
+ "doc_drift": "DRIFT",
55
+ "doc_modified": "modified",
56
+ "doc_missing": "missing",
57
+ "doc_managed_files": "MANAGED FILES",
58
+ "doc_planned_files": "PLANNED FILES",
59
+ "doc_workspace": "WORKSPACE",
60
+ "doc_members": "member repo(s)",
61
+ "doc_unknown_member": "(not a discovered repo)",
62
+ "doc_verification": "verification",
63
+ "doc_refused": "refused:",
64
+ "doc_unlock": "unlock:",
65
+ "doc_repair": "repair:",
66
+ "doc_portal_vendored": "vendored assets — no local install",
67
+ "apply_q": "Apply this plan?",
68
+ },
69
+ "pt": {
70
+ "choose": "Escolha",
71
+ "continue": "Continuar",
72
+ "cancel": "Cancelar",
73
+ "back": "Voltar",
74
+ "quit": "Sair",
75
+ "yes": "sim",
76
+ "no": "não",
77
+ "confirm_q": "Continuar?",
78
+ "select_hint": "setas ou j/k + enter; q ou esc cancela",
79
+ "toggle_hint": "espaço alterna, enter confirma; j/k move",
80
+ "install_scope_q": "Onde instalar?",
81
+ "install_profile_q": "Perfil de instalação?",
82
+ "install_gateway_profile_q": "Perfil de execução?",
83
+ "install_hosts_q": "Configurar hosts de IA?",
84
+ "install_components_q": "Componentes opcionais?",
85
+ "review": "Revisar instalação",
86
+ "scope_project": "Repositório atual",
87
+ "scope_workspace": "Workspace inteira",
88
+ "scope_user": "Minha conta de usuário",
89
+ "profile_balanced": "Balanced (Recomendado)",
90
+ "profile_economy": "Economy",
91
+ "profile_full": "Full",
92
+ "env_detected": "Ambiente detectado",
93
+ "diff_old": "Contrato/diretório ANTIGO",
94
+ "diff_new": "Contrato/diretório NOVO",
95
+ "dry_run_banner": "somente plano — nada foi escrito",
96
+ "approved_banner": "alterações aplicadas",
97
+ "need_decision": "decisão obrigatória ausente em modo não-interativo",
98
+ "health": "Saúde",
99
+ "status": "Status",
100
+ "doc_status": "status",
101
+ "doc_target": "alvo",
102
+ "doc_scope": "escopo",
103
+ "doc_version": "versão",
104
+ "doc_profile": "perfil",
105
+ "doc_state_dir": "dir de estado",
106
+ "doc_managed": "gerenciados",
107
+ "doc_entries": "entradas",
108
+ "doc_checks": "CHECKS",
109
+ "doc_repairable": "(reparável)",
110
+ "doc_drift": "DRIFT",
111
+ "doc_modified": "modificados",
112
+ "doc_missing": "ausentes",
113
+ "doc_managed_files": "ARQUIVOS GERENCIADOS",
114
+ "doc_planned_files": "ARQUIVOS PLANEJADOS",
115
+ "doc_workspace": "WORKSPACE",
116
+ "doc_members": "repo(s) membro",
117
+ "doc_unknown_member": "(não é um repo descoberto)",
118
+ "doc_verification": "verificação",
119
+ "doc_refused": "recusado:",
120
+ "doc_unlock": "desbloqueio:",
121
+ "doc_repair": "reparo:",
122
+ "doc_portal_vendored": "assets embutidos — sem instalação local",
123
+ "apply_q": "Aplicar este plano?",
124
+ },
125
+ }
126
+
127
+
128
+ def lang() -> str:
129
+ explicit = os.environ.get("FORGE_LANG", "").lower()
130
+ if explicit.startswith("pt"):
131
+ return "pt"
132
+ if explicit.startswith("en"):
133
+ return "en"
134
+ try:
135
+ loc = (locale.getlocale()[0] or "").lower()
136
+ except (ValueError, AttributeError):
137
+ loc = ""
138
+ return "pt" if loc.startswith("pt") else "en"
139
+
140
+
141
+ def t(key: str, language: str | None = None) -> str:
142
+ language = language or lang()
143
+ return _STRINGS.get(language, _STRINGS["en"]).get(key, _STRINGS["en"].get(key, key))