atdd 0.4.3__py3-none-any.whl → 0.4.4__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.
@@ -194,6 +194,11 @@ class AgentConfigSync:
194
194
  """
195
195
  agents = self._get_enabled_agents()
196
196
 
197
+ # Get configured vs detected for display
198
+ config = self._load_config()
199
+ sync_config = config.get("sync", {})
200
+ configured_agents = set(sync_config.get("agents", []))
201
+
197
202
  print("\n" + "=" * 60)
198
203
  print("ATDD Agent Config Sync Status")
199
204
  print("=" * 60)
@@ -202,8 +207,8 @@ class AgentConfigSync:
202
207
  print(f"ATDD template: {self.atdd_template}")
203
208
  print(f"Overlays dir: {self.overlays_dir}")
204
209
 
205
- print(f"\n{'Agent':<10} {'File':<15} {'Status':<20}")
206
- print("-" * 50)
210
+ print(f"\n{'Agent':<10} {'File':<15} {'Status':<20} {'Source':<12}")
211
+ print("-" * 62)
207
212
 
208
213
  for agent, target_file in sorted(self.AGENT_FILES.items()):
209
214
  target_path = self.target_dir / target_file
@@ -211,18 +216,22 @@ class AgentConfigSync:
211
216
 
212
217
  if not enabled:
213
218
  status = "disabled"
219
+ source = ""
214
220
  elif not target_path.exists():
215
221
  status = "missing"
222
+ source = "config"
216
223
  elif not self._has_managed_block(target_path.read_text()):
217
224
  status = "no managed block"
225
+ source = "auto" if agent not in configured_agents else "config"
218
226
  else:
219
227
  status = "synced"
228
+ source = "auto" if agent not in configured_agents else "config"
220
229
 
221
230
  enabled_marker = "*" if enabled else " "
222
- print(f"{enabled_marker} {agent:<8} {target_file:<15} {status:<20}")
231
+ print(f"{enabled_marker} {agent:<8} {target_file:<15} {status:<20} {source:<12}")
223
232
 
224
- print("-" * 50)
225
- print("* = enabled in config")
233
+ print("-" * 62)
234
+ print("* = enabled for sync (config = explicit, auto = file exists)")
226
235
 
227
236
  # Show overlay status
228
237
  print("\nOverlays:")
@@ -250,14 +259,32 @@ class AgentConfigSync:
250
259
 
251
260
  def _get_enabled_agents(self) -> List[str]:
252
261
  """
253
- Return agents from config.
262
+ Return agents to sync: configured agents + existing agent files.
263
+
264
+ Auto-includes any supported agent file that already exists in the
265
+ target directory, in addition to explicitly configured agents.
266
+ This ensures existing agent files stay in sync without requiring
267
+ explicit configuration.
254
268
 
255
269
  Returns:
256
- List of agent names enabled for sync.
270
+ List of unique agent names enabled for sync.
257
271
  """
272
+ # Get explicitly configured agents
258
273
  config = self._load_config()
259
274
  sync_config = config.get("sync", {})
260
- return sync_config.get("agents", [])
275
+ configured_agents = set(sync_config.get("agents", []))
276
+
277
+ # Auto-detect existing agent files
278
+ detected_agents = set()
279
+ for agent, filename in self.AGENT_FILES.items():
280
+ agent_path = self.target_dir / filename
281
+ if agent_path.exists():
282
+ detected_agents.add(agent)
283
+
284
+ # Merge: configured + detected
285
+ all_agents = configured_agents | detected_agents
286
+
287
+ return sorted(all_agents)
261
288
 
262
289
  def _load_base_content(self) -> Optional[str]:
263
290
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atdd
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: ATDD Platform - Acceptance Test Driven Development toolkit
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -16,7 +16,7 @@ atdd/coach/commands/inventory.py,sha256=qU42MnkXt1JSBh5GU7pPSKmCO27Zfga7XwMT19Rq
16
16
  atdd/coach/commands/migration.py,sha256=wRxU7emvvHqWt1MvXKkNTkPBjp0sU9g8F5Uy5yV2YfI,8177
17
17
  atdd/coach/commands/registry.py,sha256=76-Pe3_cN483JR1pXUdDIE5WSZjWtVV0Jl8dRtRw_9Y,58349
18
18
  atdd/coach/commands/session.py,sha256=MhuWXd5TR6bB3w0t8vANeZx3L476qwLT6EUQMwg-wQA,14268
19
- atdd/coach/commands/sync.py,sha256=4HNzg8AVaePDwhyBlQcywvNVZDP5NIW8TBsEPbqmJuQ,12545
19
+ atdd/coach/commands/sync.py,sha256=SLNzhcc6IuzMofMbkH9wM9rBSk5tPfcWPKXn9TaSZ-Y,13782
20
20
  atdd/coach/commands/test_interface.py,sha256=a7ut2Hhk0PnQ5LfJZkoQwfkfkVuB5OHA4QBwOS0-jcg,16870
21
21
  atdd/coach/commands/test_runner.py,sha256=_6JrDRq5fBHUOC4MtkgXcjkgJjG80otoGRTqnkEphIk,5832
22
22
  atdd/coach/commands/traceability.py,sha256=8TmpZDeUVHJAz-p3oxXq55jCFiFpKIQR8h1wLZVYcgA,163612
@@ -182,9 +182,9 @@ atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=zbUjsMWSJE1MP
182
182
  atdd/tester/validators/test_telemetry_structure.py,sha256=uU5frZnxSlOn60iHyqhe7Pg9b0wrOV7N14D4S6Aw6TE,22626
183
183
  atdd/tester/validators/test_typescript_test_naming.py,sha256=E-TyGv_GVlTfsbyuxrtv9sOWSZS_QcpH6rrJFbWoeeU,11280
184
184
  atdd/tester/validators/test_typescript_test_structure.py,sha256=eV89SD1RaKtchBZupqhnJmaruoROosf3LwB4Fwe4UJI,2612
185
- atdd-0.4.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
186
- atdd-0.4.3.dist-info/METADATA,sha256=KAH0NMoqTXf3-U24pNLCP6-x0G5-otbGLiCvPa1t5cE,8426
187
- atdd-0.4.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
188
- atdd-0.4.3.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
189
- atdd-0.4.3.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
190
- atdd-0.4.3.dist-info/RECORD,,
185
+ atdd-0.4.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
186
+ atdd-0.4.4.dist-info/METADATA,sha256=cBMNKGmx5Uyw5kwn_v6ezv-CKbuFd5QpsZ6hFG_rg9k,8426
187
+ atdd-0.4.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
188
+ atdd-0.4.4.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
189
+ atdd-0.4.4.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
190
+ atdd-0.4.4.dist-info/RECORD,,
File without changes