sqrlly 0.1.0__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 (181) hide show
  1. sqrlly-0.1.0/.env.example +44 -0
  2. sqrlly-0.1.0/.gitignore +20 -0
  3. sqrlly-0.1.0/CHANGELOG.md +865 -0
  4. sqrlly-0.1.0/LICENSE +201 -0
  5. sqrlly-0.1.0/PKG-INFO +182 -0
  6. sqrlly-0.1.0/README.md +142 -0
  7. sqrlly-0.1.0/SKILLS.md +108 -0
  8. sqrlly-0.1.0/TECHNICAL.md +668 -0
  9. sqrlly-0.1.0/docs/backlog-adapter-inspiration.md +117 -0
  10. sqrlly-0.1.0/docs/plans/stage-5a-route-node.md +330 -0
  11. sqrlly-0.1.0/docs/plans/stage-5b-execute-url.md +429 -0
  12. sqrlly-0.1.0/docs/schema-reference.md +453 -0
  13. sqrlly-0.1.0/docs/test-audit-verification.md +168 -0
  14. sqrlly-0.1.0/docs/test-audit.md +98 -0
  15. sqrlly-0.1.0/examples/absurd-paper/gates/abstract_multi_dim.md +25 -0
  16. sqrlly-0.1.0/examples/absurd-paper/gates/choose_topic_eval.md +29 -0
  17. sqrlly-0.1.0/examples/absurd-paper/gates/outline_json.py +83 -0
  18. sqrlly-0.1.0/examples/absurd-paper/gates/publish_verdict.md +21 -0
  19. sqrlly-0.1.0/examples/absurd-paper/gates/review_quality.py +55 -0
  20. sqrlly-0.1.0/examples/absurd-paper/gates/submission_check.py +89 -0
  21. sqrlly-0.1.0/examples/absurd-paper/preamble.md +12 -0
  22. sqrlly-0.1.0/examples/absurd-paper/prompts/abstract.md +27 -0
  23. sqrlly-0.1.0/examples/absurd-paper/prompts/choose_topic.md +36 -0
  24. sqrlly-0.1.0/examples/absurd-paper/prompts/critique_review.md +50 -0
  25. sqrlly-0.1.0/examples/absurd-paper/prompts/discussion.md +29 -0
  26. sqrlly-0.1.0/examples/absurd-paper/prompts/intro.md +28 -0
  27. sqrlly-0.1.0/examples/absurd-paper/prompts/methods.md +29 -0
  28. sqrlly-0.1.0/examples/absurd-paper/prompts/outline.md +28 -0
  29. sqrlly-0.1.0/examples/absurd-paper/prompts/publish_verdict.md +25 -0
  30. sqrlly-0.1.0/examples/absurd-paper/prompts/reconcile.md +75 -0
  31. sqrlly-0.1.0/examples/absurd-paper/prompts/results.md +29 -0
  32. sqrlly-0.1.0/examples/absurd-paper/prompts/reviewer_pool.md +46 -0
  33. sqrlly-0.1.0/examples/absurd-paper/prompts/reviewer_review.md +21 -0
  34. sqrlly-0.1.0/examples/absurd-paper/reference-output/paper.md +114 -0
  35. sqrlly-0.1.0/examples/absurd-paper/reference-output/paper.pdf +0 -0
  36. sqrlly-0.1.0/examples/absurd-paper/reference-output/run.jsonl +24 -0
  37. sqrlly-0.1.0/examples/absurd-paper/scripts/persist_paper.py +28 -0
  38. sqrlly-0.1.0/examples/absurd-paper/scripts/pick_topic.py +92 -0
  39. sqrlly-0.1.0/examples/absurd-paper/scripts/render_pdf.py +105 -0
  40. sqrlly-0.1.0/examples/absurd-paper/subgraphs/compose_and_validate.yaml +49 -0
  41. sqrlly-0.1.0/examples/absurd-paper/subgraphs/single_review.yaml +36 -0
  42. sqrlly-0.1.0/examples/absurd-paper/view.html +673 -0
  43. sqrlly-0.1.0/examples/absurd-paper/workflow.yaml +179 -0
  44. sqrlly-0.1.0/examples/command_preset/scripts/report.py +5 -0
  45. sqrlly-0.1.0/examples/command_preset/workflow.yaml +24 -0
  46. sqrlly-0.1.0/examples/explicit_join.yaml +46 -0
  47. sqrlly-0.1.0/examples/jokes/gates/validate_jokes.py +27 -0
  48. sqrlly-0.1.0/examples/jokes/generate.md +5 -0
  49. sqrlly-0.1.0/examples/jokes/run.py +52 -0
  50. sqrlly-0.1.0/examples/jokes/select.md +5 -0
  51. sqrlly-0.1.0/examples/jokes/view.html +355 -0
  52. sqrlly-0.1.0/examples/jokes/workflow.yaml +27 -0
  53. sqrlly-0.1.0/examples/pipeline_style/reference-run.jsonl +5 -0
  54. sqrlly-0.1.0/examples/pipeline_style/view-debug.html +406 -0
  55. sqrlly-0.1.0/examples/pipeline_style/view.html +388 -0
  56. sqrlly-0.1.0/examples/pipeline_style/workflow.yaml +44 -0
  57. sqrlly-0.1.0/examples/prompts/hello.md +1 -0
  58. sqrlly-0.1.0/examples/regenerate_views.sh +88 -0
  59. sqrlly-0.1.0/examples/route_classify/reference-run.jsonl +4 -0
  60. sqrlly-0.1.0/examples/route_classify/scripts/triage.py +39 -0
  61. sqrlly-0.1.0/examples/route_classify/view-debug.html +496 -0
  62. sqrlly-0.1.0/examples/route_classify/view.html +484 -0
  63. sqrlly-0.1.0/examples/route_classify/workflow.yaml +73 -0
  64. sqrlly-0.1.0/examples/run_all_examples.yaml +59 -0
  65. sqrlly-0.1.0/examples/smoke_test.yaml +15 -0
  66. sqrlly-0.1.0/examples/wave_planner/README.md +119 -0
  67. sqrlly-0.1.0/examples/wave_planner/reference-run.jsonl +10 -0
  68. sqrlly-0.1.0/examples/wave_planner/scripts/dispatcher.py +24 -0
  69. sqrlly-0.1.0/examples/wave_planner/scripts/planner.py +33 -0
  70. sqrlly-0.1.0/examples/wave_planner/scripts/reconcile.py +39 -0
  71. sqrlly-0.1.0/examples/wave_planner/scripts/worker.py +40 -0
  72. sqrlly-0.1.0/examples/wave_planner/view-debug.html +479 -0
  73. sqrlly-0.1.0/examples/wave_planner/view.html +412 -0
  74. sqrlly-0.1.0/examples/wave_planner/workflow.yaml +112 -0
  75. sqrlly-0.1.0/pyproject.toml +99 -0
  76. sqrlly-0.1.0/scripts/migrate_legacy_executor_to_presets.py +341 -0
  77. sqrlly-0.1.0/src/sqrlly/__init__.py +0 -0
  78. sqrlly-0.1.0/src/sqrlly/cli/__init__.py +0 -0
  79. sqrlly-0.1.0/src/sqrlly/cli/main.py +440 -0
  80. sqrlly-0.1.0/src/sqrlly/cli/migrate.py +455 -0
  81. sqrlly-0.1.0/src/sqrlly/cli/templates/view.html.j2 +263 -0
  82. sqrlly-0.1.0/src/sqrlly/cli/view.py +474 -0
  83. sqrlly-0.1.0/src/sqrlly/compile/__init__.py +0 -0
  84. sqrlly-0.1.0/src/sqrlly/compile/_manifest.py +67 -0
  85. sqrlly-0.1.0/src/sqrlly/compile/dynamic.py +350 -0
  86. sqrlly-0.1.0/src/sqrlly/compile/evaluation.py +180 -0
  87. sqrlly-0.1.0/src/sqrlly/compile/graph.py +617 -0
  88. sqrlly-0.1.0/src/sqrlly/compile/lint.py +47 -0
  89. sqrlly-0.1.0/src/sqrlly/compile/nodes.py +898 -0
  90. sqrlly-0.1.0/src/sqrlly/compile/route.py +117 -0
  91. sqrlly-0.1.0/src/sqrlly/compile/subgraph.py +333 -0
  92. sqrlly-0.1.0/src/sqrlly/py.typed +0 -0
  93. sqrlly-0.1.0/src/sqrlly/runtime/__init__.py +0 -0
  94. sqrlly-0.1.0/src/sqrlly/runtime/executor/__init__.py +0 -0
  95. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/__init__.py +0 -0
  96. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/_lazy_client.py +64 -0
  97. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/_overload.py +79 -0
  98. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/acp.py +213 -0
  99. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/anthropic.py +135 -0
  100. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/factory.py +108 -0
  101. sqrlly-0.1.0/src/sqrlly/runtime/executor/backends/openai.py +83 -0
  102. sqrlly-0.1.0/src/sqrlly/runtime/executor/dispatch.py +415 -0
  103. sqrlly-0.1.0/src/sqrlly/runtime/executor/preset.py +166 -0
  104. sqrlly-0.1.0/src/sqrlly/runtime/executor/prompt.py +150 -0
  105. sqrlly-0.1.0/src/sqrlly/runtime/foreman.py +219 -0
  106. sqrlly-0.1.0/src/sqrlly/runtime/gates.py +439 -0
  107. sqrlly-0.1.0/src/sqrlly/runtime/logging.py +121 -0
  108. sqrlly-0.1.0/src/sqrlly/runtime/result.py +46 -0
  109. sqrlly-0.1.0/src/sqrlly/runtime/runner.py +81 -0
  110. sqrlly-0.1.0/src/sqrlly/runtime/secrets.py +108 -0
  111. sqrlly-0.1.0/src/sqrlly/runtime/settings_merge.py +49 -0
  112. sqrlly-0.1.0/src/sqrlly/runtime/state.py +114 -0
  113. sqrlly-0.1.0/src/sqrlly/runtime/url.py +215 -0
  114. sqrlly-0.1.0/src/sqrlly/schema/__init__.py +0 -0
  115. sqrlly-0.1.0/src/sqrlly/schema/models.py +575 -0
  116. sqrlly-0.1.0/src/sqrlly/schema/params.py +107 -0
  117. sqrlly-0.1.0/tests/acp/test_acp_backend.py +185 -0
  118. sqrlly-0.1.0/tests/acp/test_acp_cleanup.py +125 -0
  119. sqrlly-0.1.0/tests/acp/test_concurrency.py +45 -0
  120. sqrlly-0.1.0/tests/acp/test_gates_llm.py +60 -0
  121. sqrlly-0.1.0/tests/acp/test_joke_workflow.py +102 -0
  122. sqrlly-0.1.0/tests/architecture/test_layers.py +160 -0
  123. sqrlly-0.1.0/tests/builder/test_graph_shape.py +404 -0
  124. sqrlly-0.1.0/tests/conftest.py +125 -0
  125. sqrlly-0.1.0/tests/e2e/test_dynamic.py +656 -0
  126. sqrlly-0.1.0/tests/e2e/test_fan_out_subgraph.py +228 -0
  127. sqrlly-0.1.0/tests/e2e/test_gates_dep_access.py +86 -0
  128. sqrlly-0.1.0/tests/e2e/test_inline_route_with_eval.py +170 -0
  129. sqrlly-0.1.0/tests/e2e/test_join_node.py +167 -0
  130. sqrlly-0.1.0/tests/e2e/test_live_backend_roundtrip.py +161 -0
  131. sqrlly-0.1.0/tests/e2e/test_orchestrator.py +776 -0
  132. sqrlly-0.1.0/tests/e2e/test_recursive_subgraph.py +349 -0
  133. sqrlly-0.1.0/tests/e2e/test_resume_fan_out.py +197 -0
  134. sqrlly-0.1.0/tests/e2e/test_route_node.py +242 -0
  135. sqrlly-0.1.0/tests/e2e/test_subgraph_settings_inheritance.py +267 -0
  136. sqrlly-0.1.0/tests/e2e/test_timeout.py +232 -0
  137. sqrlly-0.1.0/tests/e2e/test_wave_pattern.py +238 -0
  138. sqrlly-0.1.0/tests/fixtures/route/flow_a_score.yaml +43 -0
  139. sqrlly-0.1.0/tests/fixtures/route/score_by_attempt.py +16 -0
  140. sqrlly-0.1.0/tests/fixtures/route/score_high.py +10 -0
  141. sqrlly-0.1.0/tests/fixtures/route/score_low.py +7 -0
  142. sqrlly-0.1.0/tests/helpers.py +57 -0
  143. sqrlly-0.1.0/tests/mock_executor.py +39 -0
  144. sqrlly-0.1.0/tests/scripts/test_migrate_legacy_executor_to_presets.py +162 -0
  145. sqrlly-0.1.0/tests/unit/cli/test_cli.py +343 -0
  146. sqrlly-0.1.0/tests/unit/cli/test_migrate.py +517 -0
  147. sqrlly-0.1.0/tests/unit/cli/test_view.py +460 -0
  148. sqrlly-0.1.0/tests/unit/compile/test_decision_node.py +273 -0
  149. sqrlly-0.1.0/tests/unit/compile/test_evaluation.py +225 -0
  150. sqrlly-0.1.0/tests/unit/compile/test_evaluation_node.py +280 -0
  151. sqrlly-0.1.0/tests/unit/compile/test_execute_dispatch.py +232 -0
  152. sqrlly-0.1.0/tests/unit/compile/test_execution_node.py +189 -0
  153. sqrlly-0.1.0/tests/unit/compile/test_lint.py +56 -0
  154. sqrlly-0.1.0/tests/unit/compile/test_manifest.py +117 -0
  155. sqrlly-0.1.0/tests/unit/compile/test_node_helpers.py +666 -0
  156. sqrlly-0.1.0/tests/unit/compile/test_route.py +233 -0
  157. sqrlly-0.1.0/tests/unit/compile/test_subgraph.py +132 -0
  158. sqrlly-0.1.0/tests/unit/runtime/test_acp_helpers.py +102 -0
  159. sqrlly-0.1.0/tests/unit/runtime/test_anthropic_backend.py +373 -0
  160. sqrlly-0.1.0/tests/unit/runtime/test_command_preset.py +197 -0
  161. sqrlly-0.1.0/tests/unit/runtime/test_contracts.py +56 -0
  162. sqrlly-0.1.0/tests/unit/runtime/test_dispatch.py +269 -0
  163. sqrlly-0.1.0/tests/unit/runtime/test_dispatch_presets.py +149 -0
  164. sqrlly-0.1.0/tests/unit/runtime/test_factory.py +61 -0
  165. sqrlly-0.1.0/tests/unit/runtime/test_foreman.py +652 -0
  166. sqrlly-0.1.0/tests/unit/runtime/test_gates.py +1186 -0
  167. sqrlly-0.1.0/tests/unit/runtime/test_openai_backend.py +230 -0
  168. sqrlly-0.1.0/tests/unit/runtime/test_preset.py +234 -0
  169. sqrlly-0.1.0/tests/unit/runtime/test_prompt.py +774 -0
  170. sqrlly-0.1.0/tests/unit/runtime/test_scaffolding.py +123 -0
  171. sqrlly-0.1.0/tests/unit/runtime/test_secrets.py +151 -0
  172. sqrlly-0.1.0/tests/unit/runtime/test_settings_merge.py +159 -0
  173. sqrlly-0.1.0/tests/unit/runtime/test_state.py +70 -0
  174. sqrlly-0.1.0/tests/unit/runtime/test_url.py +293 -0
  175. sqrlly-0.1.0/tests/unit/schema/test_execute_schema.py +176 -0
  176. sqrlly-0.1.0/tests/unit/schema/test_join_execution.py +110 -0
  177. sqrlly-0.1.0/tests/unit/schema/test_params.py +143 -0
  178. sqrlly-0.1.0/tests/unit/schema/test_route_schema.py +173 -0
  179. sqrlly-0.1.0/tests/unit/schema/test_schema.py +776 -0
  180. sqrlly-0.1.0/tests/unit/workflow/test_logging.py +435 -0
  181. sqrlly-0.1.0/uv.lock +1310 -0
@@ -0,0 +1,44 @@
1
+ # Load via:
2
+ # uv run --env-file .env abe-froman run <config.yaml>
3
+ # Or in shell:
4
+ # set -a; source .env; set +a
5
+ #
6
+ # Auto-detect order when `--executor` flag and `settings.executor`
7
+ # are both absent: Anthropic key → DeepSeek key → ACP via `npx`.
8
+ # `custom` and `openai` never auto-detect — they require explicit
9
+ # `--executor` selection.
10
+
11
+ # --- Anthropic (native AnthropicBackend) ----------------------------
12
+ # Used by `--executor anthropic`. Auto-detect picks this first when set.
13
+ # ANTHROPIC_API_KEY=sk-ant-...
14
+
15
+ # --- DeepSeek (OpenAIBackend with DeepSeek base_url baked in) -------
16
+ # Used by `--executor deepseek`. Auto-detect picks this second.
17
+ # DEEPSEEK_API_KEY=sk-...
18
+
19
+ # --- OpenAI (real openai.com) ---------------------------------------
20
+ # Used by `--executor openai`. Reserved for the actual OpenAI service.
21
+ # OPENAI_API_KEY=sk-...
22
+
23
+ # --- Custom OpenAI-compatible providers -----------------------------
24
+ # Used by `--executor custom`. Catch-all for the OpenAI-protocol
25
+ # ecosystem: any service that speaks the chat-completions API at a
26
+ # configurable endpoint. Both vars are required when this executor
27
+ # is selected.
28
+ #
29
+ # Example endpoints:
30
+ # OpenRouter: https://openrouter.ai/api/v1
31
+ # Ollama: http://localhost:11434/v1
32
+ # LM Studio: http://localhost:1234/v1
33
+ # LiteLLM: http://localhost:4000
34
+ # Azure OAI: https://<resource>.openai.azure.com/openai/deployments/<deployment>
35
+ # vLLM: http://localhost:8000/v1
36
+ #
37
+ # CUSTOM_API_KEY=sk-or-v1-...
38
+ # CUSTOM_API_BASE_URL=https://openrouter.ai/api/v1
39
+
40
+ # --- Resolution order ------------------------------------------------
41
+ # 1. workflow YAML setting (when a binding for a particular key exists)
42
+ # 2. process env (`os.environ`) — set by your shell or `uv run --env-file`
43
+ # 3. this `.env` file, auto-discovered by walking up from CWD
44
+ # abe-froman does NOT read from machine-global keystores.
@@ -0,0 +1,20 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.pyo
4
+ .venv/
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .ruff_cache/
11
+ .sqrlly/
12
+ *-checkpoint.db
13
+ *.db-shm
14
+ *.db-wal
15
+ .claude/
16
+ output/
17
+ .temp/
18
+ .env
19
+ .env.*
20
+ !.env.example