adam-cli 0.2.0__tar.gz → 0.2.2__tar.gz

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 (147) hide show
  1. {adam_cli-0.2.0 → adam_cli-0.2.2}/.claude/settings.local.json +6 -1
  2. {adam_cli-0.2.0 → adam_cli-0.2.2}/PKG-INFO +1 -1
  3. {adam_cli-0.2.0 → adam_cli-0.2.2}/pyproject.toml +1 -1
  4. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/cli/bootstrap.py +14 -2
  5. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/context/loader.py +33 -4
  6. {adam_cli-0.2.0 → adam_cli-0.2.2}/uv.lock +1 -1
  7. {adam_cli-0.2.0 → adam_cli-0.2.2}/.gitignore +0 -0
  8. {adam_cli-0.2.0 → adam_cli-0.2.2}/CLAUDE.md +0 -0
  9. {adam_cli-0.2.0 → adam_cli-0.2.2}/README.md +0 -0
  10. {adam_cli-0.2.0 → adam_cli-0.2.2}/alembic.ini +0 -0
  11. {adam_cli-0.2.0 → adam_cli-0.2.2}/docker-compose.yml +0 -0
  12. {adam_cli-0.2.0 → adam_cli-0.2.2}/examples/balagan-tower-defense/README.md +0 -0
  13. {adam_cli-0.2.0 → adam_cli-0.2.2}/examples/balagan-tower-defense/spec.md +0 -0
  14. {adam_cli-0.2.0 → adam_cli-0.2.2}/examples/balagan-tower-defense/tech-stack.md +0 -0
  15. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/__init__.py +0 -0
  16. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/__main__.py +0 -0
  17. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/__init__.py +0 -0
  18. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/architect.py +0 -0
  19. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/base.py +0 -0
  20. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/change_planner.py +0 -0
  21. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/diagnostician.py +0 -0
  22. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/file_implementer.py +0 -0
  23. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/integration_auditor.py +0 -0
  24. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/module_planner.py +0 -0
  25. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/repair_agent.py +0 -0
  26. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/route_discoverer.py +0 -0
  27. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/scaffolder.py +0 -0
  28. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/spec_differ.py +0 -0
  29. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/supervisor.py +0 -0
  30. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/agents/test_writer.py +0 -0
  31. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/cli/__init__.py +0 -0
  32. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/cli/app.py +0 -0
  33. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/cli/checkpoints.py +0 -0
  34. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/cli/display.py +0 -0
  35. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/config.py +0 -0
  36. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/context/__init__.py +0 -0
  37. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/context/condenser.py +0 -0
  38. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/context/fingerprint.py +0 -0
  39. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/__init__.py +0 -0
  40. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/migrations/__init__.py +0 -0
  41. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/migrations/env.py +0 -0
  42. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/migrations/script.py.mako +0 -0
  43. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/migrations/versions/001_initial_schema.py +0 -0
  44. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/migrations/versions/__init__.py +0 -0
  45. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/db/session.py +0 -0
  46. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/errors.py +0 -0
  47. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/execution/__init__.py +0 -0
  48. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/execution/dependencies.py +0 -0
  49. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/execution/dev_server.py +0 -0
  50. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/execution/runner.py +0 -0
  51. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/git/__init__.py +0 -0
  52. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/git/manager.py +0 -0
  53. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/inspection/__init__.py +0 -0
  54. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/inspection/api_smoke.py +0 -0
  55. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/inspection/cli_verify.py +0 -0
  56. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/inspection/evaluator.py +0 -0
  57. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/inspection/screenshotter.py +0 -0
  58. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/llm/__init__.py +0 -0
  59. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/llm/client.py +0 -0
  60. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/llm/json_extract.py +0 -0
  61. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/logging_config.py +0 -0
  62. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/__init__.py +0 -0
  63. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/analytics.py +0 -0
  64. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/base.py +0 -0
  65. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/core.py +0 -0
  66. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/events.py +0 -0
  67. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/obligations.py +0 -0
  68. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/models/testing.py +0 -0
  69. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/__init__.py +0 -0
  70. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/checkpoint.py +0 -0
  71. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/engine.py +0 -0
  72. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/file_loop.py +0 -0
  73. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/monitor.py +0 -0
  74. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/obligations.py +0 -0
  75. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/planner.py +0 -0
  76. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/policies.py +0 -0
  77. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/orchestrator/stop_conditions.py +0 -0
  78. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/pipeline/__init__.py +0 -0
  79. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/pipeline/iterate.py +0 -0
  80. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/pipeline/stages.py +0 -0
  81. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/profiles.py +0 -0
  82. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/project.py +0 -0
  83. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/__init__.py +0 -0
  84. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/loader.py +0 -0
  85. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/architect.j2 +0 -0
  86. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/change_planner.j2 +0 -0
  87. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/code_quality.j2 +0 -0
  88. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/diagnostician.j2 +0 -0
  89. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/file_implementer.j2 +0 -0
  90. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/integration_auditor.j2 +0 -0
  91. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/module_planner.j2 +0 -0
  92. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/performance.j2 +0 -0
  93. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/repair_agent.j2 +0 -0
  94. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/route_discoverer.j2 +0 -0
  95. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/security.j2 +0 -0
  96. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/spec_differ.j2 +0 -0
  97. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/supervisor.j2 +0 -0
  98. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/prompts/templates/test_writer.j2 +0 -0
  99. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/refinement/__init__.py +0 -0
  100. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/refinement/observe.py +0 -0
  101. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/refinement/refiner.py +0 -0
  102. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/refinement/snapshot.py +0 -0
  103. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/repair/__init__.py +0 -0
  104. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/repair/planner.py +0 -0
  105. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/store/__init__.py +0 -0
  106. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/store/events.py +0 -0
  107. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/store/slicer.py +0 -0
  108. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/store/store.py +0 -0
  109. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/types.py +0 -0
  110. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/__init__.py +0 -0
  111. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/base.py +0 -0
  112. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/file_classifier.py +0 -0
  113. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/hard/__init__.py +0 -0
  114. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/hard/build_checker.py +0 -0
  115. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/hard/lint_runner.py +0 -0
  116. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/hard/test_runner.py +0 -0
  117. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/hard/type_checker.py +0 -0
  118. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/soft/__init__.py +0 -0
  119. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/soft/code_quality.py +0 -0
  120. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/soft/performance.py +0 -0
  121. {adam_cli-0.2.0 → adam_cli-0.2.2}/src/adam/validation/soft/security.py +0 -0
  122. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/__init__.py +0 -0
  123. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_bootstrap.py +0 -0
  124. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_checkpoints.py +0 -0
  125. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_context_loader.py +0 -0
  126. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_dependencies.py +0 -0
  127. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_dev_server.py +0 -0
  128. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_display.py +0 -0
  129. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_e2e.py +0 -0
  130. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_execution.py +0 -0
  131. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_file_classifier.py +0 -0
  132. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_file_loop_extras.py +0 -0
  133. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_git_manager.py +0 -0
  134. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_inspection.py +0 -0
  135. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_integration.py +0 -0
  136. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_json_extract.py +0 -0
  137. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_llm_client.py +0 -0
  138. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_obligations.py +0 -0
  139. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_observation.py +0 -0
  140. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_profiles.py +0 -0
  141. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_project.py +0 -0
  142. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_prompts.py +0 -0
  143. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_repair_planner.py +0 -0
  144. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_stop_conditions.py +0 -0
  145. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_types.py +0 -0
  146. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_validation.py +0 -0
  147. {adam_cli-0.2.0 → adam_cli-0.2.2}/tests/test_visual_pipeline.py +0 -0
@@ -72,7 +72,12 @@
72
72
  "Bash(uv publish:*)",
73
73
  "Bash(rsync -avz --delete --exclude='play/' dist/ root@204.168.219.211:/var/www/meetadam/)",
74
74
  "Bash(rsync -avz --delete dist/ root@204.168.181.165:/var/www/postwriter/)",
75
- "Bash(python:*)"
75
+ "Bash(python:*)",
76
+ "Bash(echo $PYPI_TOKEN)",
77
+ "Bash(export PYPI_TOKEN=\"pypi-AgEIcHlwaS5vcmcCJGZlMWViZmI1LTEwMmEtNGNjMC1iY2Q4LTkyN2ViZTM5M2I5ZgACKlszLCI3M2IzNzgyMS1hOTJjLTQ5MGItOGQxZi0zMTllODgyMjkyMDEiXQAABiCkA9Nm-K48TBkI--GGewUGZ83UYTV8RrxlpiH6dGvuAA\")",
78
+ "Bash(set -a)",
79
+ "Bash(source ~/.adam/config)",
80
+ "Bash(set +a)"
76
81
  ]
77
82
  }
78
83
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adam-cli
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Orchestrated long-form software engineering system
5
5
  Author-email: Avram Score <ascore@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adam-cli"
3
- version = "0.2.0"
3
+ version = "0.2.2"
4
4
  description = "Orchestrated long-form software engineering system"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -174,10 +174,22 @@ def _extract_prefilled(
174
174
  prefilled["title"] = fm["title"]
175
175
  if "features" in fm:
176
176
  raw = fm["features"]
177
- if isinstance(raw, str):
177
+ if isinstance(raw, list):
178
178
  prefilled["features"] = [
179
- f.strip() for f in raw.split(",") if f.strip()
179
+ str(f).strip() for f in raw if str(f).strip()
180
180
  ]
181
+ elif isinstance(raw, str):
182
+ # Handle both comma-separated and "- item" list format
183
+ if "\n" in raw or raw.strip().startswith("-"):
184
+ prefilled["features"] = [
185
+ line.strip().lstrip("- ").strip()
186
+ for line in raw.split("\n")
187
+ if line.strip() and line.strip() != "-"
188
+ ]
189
+ else:
190
+ prefilled["features"] = [
191
+ f.strip() for f in raw.split(",") if f.strip()
192
+ ]
181
193
 
182
194
  # Tech stack files → tech_stack dict
183
195
  elif cf.context_type == ContextType.TECH_STACK:
@@ -323,11 +323,40 @@ class ContextLoader:
323
323
  content = parts[2].strip()
324
324
 
325
325
  frontmatter: dict[str, Any] = {}
326
+ current_key: str | None = None
327
+ current_list: list[str] | None = None
328
+
326
329
  for line in fm_text.split("\n"):
327
- line = line.strip()
328
- if ":" in line:
329
- key, _, val = line.partition(":")
330
- frontmatter[key.strip()] = val.strip()
330
+ stripped = line.strip()
331
+
332
+ # YAML list item (e.g., " - foo")
333
+ if stripped.startswith("- ") and current_key is not None:
334
+ if current_list is None:
335
+ current_list = []
336
+ current_list.append(stripped[2:].strip())
337
+ continue
338
+
339
+ # Flush any accumulated list
340
+ if current_list is not None and current_key is not None:
341
+ frontmatter[current_key] = current_list
342
+ current_list = None
343
+ current_key = None
344
+
345
+ # Key: value line
346
+ if ":" in stripped:
347
+ key, _, val = stripped.partition(":")
348
+ key = key.strip()
349
+ val = val.strip()
350
+ if val:
351
+ frontmatter[key] = val
352
+ current_key = None
353
+ else:
354
+ # Value is empty — next lines may be a YAML list
355
+ current_key = key
356
+
357
+ # Flush final list
358
+ if current_list is not None and current_key is not None:
359
+ frontmatter[current_key] = current_list
331
360
 
332
361
  return content, frontmatter
333
362
 
@@ -4,7 +4,7 @@ requires-python = ">=3.12"
4
4
 
5
5
  [[package]]
6
6
  name = "adam-cli"
7
- version = "0.1.0"
7
+ version = "0.2.1"
8
8
  source = { editable = "." }
9
9
  dependencies = [
10
10
  { name = "aiosqlite" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes