nooa 0.0.7__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 (1320) hide show
  1. nooa-0.0.7/.dockerignore +119 -0
  2. nooa-0.0.7/.env.example +6 -0
  3. nooa-0.0.7/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
  4. nooa-0.0.7/.github/ISSUE_TEMPLATE/feature_request.md +18 -0
  5. nooa-0.0.7/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  6. nooa-0.0.7/.github/workflows/ci.yml +117 -0
  7. nooa-0.0.7/.github/workflows/publish.yml +224 -0
  8. nooa-0.0.7/.gitignore +407 -0
  9. nooa-0.0.7/.gitleaks.toml +11 -0
  10. nooa-0.0.7/.pre-commit-config.yaml +103 -0
  11. nooa-0.0.7/AGENTS.md +207 -0
  12. nooa-0.0.7/CHANGELOG.md +9 -0
  13. nooa-0.0.7/CONTRIBUTING.md +92 -0
  14. nooa-0.0.7/LICENSE +184 -0
  15. nooa-0.0.7/PKG-INFO +271 -0
  16. nooa-0.0.7/README.md +218 -0
  17. nooa-0.0.7/RELEASING.md +153 -0
  18. nooa-0.0.7/SECURITY.md +25 -0
  19. nooa-0.0.7/THIRD_PARTY_NOTICES.md +749 -0
  20. nooa-0.0.7/assets/nvidia-labs-object-oriented-agents-dark.svg +24 -0
  21. nooa-0.0.7/assets/nvidia-labs-object-oriented-agents-light.svg +24 -0
  22. nooa-0.0.7/assets/nvidia-labs-object-oriented-agents.svg +37 -0
  23. nooa-0.0.7/conftest.py +18 -0
  24. nooa-0.0.7/examples/README.md +581 -0
  25. nooa-0.0.7/examples/advanced/__init__.py +0 -0
  26. nooa-0.0.7/examples/advanced/codeact_event_sequence.py +106 -0
  27. nooa-0.0.7/examples/advanced/memory.py +30 -0
  28. nooa-0.0.7/examples/advanced/prefill.py +128 -0
  29. nooa-0.0.7/examples/advanced/swappable_execution_engines.py +145 -0
  30. nooa-0.0.7/examples/advanced/tracing_langfuse.py +101 -0
  31. nooa-0.0.7/examples/advanced/tracing_otlp.py +51 -0
  32. nooa-0.0.7/examples/advanced/tracing_phoenix.py +110 -0
  33. nooa-0.0.7/examples/arc_agi_3/README.md +166 -0
  34. nooa-0.0.7/examples/arc_agi_3/analysis/README.md +49 -0
  35. nooa-0.0.7/examples/arc_agi_3/analysis/analysis/build_comparison.py +285 -0
  36. nooa-0.0.7/examples/arc_agi_3/analysis/memory/analyze_memory.py +159 -0
  37. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/digest_escape.py +189 -0
  38. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/first_violation.py +153 -0
  39. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/rt_common.py +264 -0
  40. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/run_scan.sh +22 -0
  41. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_agent_actions.py +165 -0
  42. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_escape.py +163 -0
  43. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_harness_exposure.py +118 -0
  44. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_internet.py +134 -0
  45. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_memstore_xref.py +101 -0
  46. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_name_leak.py +136 -0
  47. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/scan_returned_data.py +162 -0
  48. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/test_guard_evasion.py +91 -0
  49. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/test_harness_log_exposure.py +196 -0
  50. nooa-0.0.7/examples/arc_agi_3/analysis/red_team/test_memstore_residual.py +84 -0
  51. nooa-0.0.7/examples/arc_agi_3/analysis/world_model/analyze_world_models.py +221 -0
  52. nooa-0.0.7/examples/arc_agi_3/analyze_knowledge.py +135 -0
  53. nooa-0.0.7/examples/arc_agi_3/arc_agi_3/__init__.py +9 -0
  54. nooa-0.0.7/examples/arc_agi_3/arc_agi_3/containers.py +118 -0
  55. nooa-0.0.7/examples/arc_agi_3/arc_agi_3/environment.py +3061 -0
  56. nooa-0.0.7/examples/arc_agi_3/arc_agi_3/grid.py +541 -0
  57. nooa-0.0.7/examples/arc_agi_3/arc_agi_3/rhae.py +136 -0
  58. nooa-0.0.7/examples/arc_agi_3/arc_llm.py +126 -0
  59. nooa-0.0.7/examples/arc_agi_3/backfill_messages.py +115 -0
  60. nooa-0.0.7/examples/arc_agi_3/compare.py +116 -0
  61. nooa-0.0.7/examples/arc_agi_3/configs/competition.yaml +87 -0
  62. nooa-0.0.7/examples/arc_agi_3/configs/offline.yaml +60 -0
  63. nooa-0.0.7/examples/arc_agi_3/cost_report.py +100 -0
  64. nooa-0.0.7/examples/arc_agi_3/dump_llm_messages.py +188 -0
  65. nooa-0.0.7/examples/arc_agi_3/experiment.py +180 -0
  66. nooa-0.0.7/examples/arc_agi_3/harness.py +722 -0
  67. nooa-0.0.7/examples/arc_agi_3/launcher.py +357 -0
  68. nooa-0.0.7/examples/arc_agi_3/recorder.py +274 -0
  69. nooa-0.0.7/examples/arc_agi_3/run_multi.py +762 -0
  70. nooa-0.0.7/examples/arc_agi_3/run_solver.py +570 -0
  71. nooa-0.0.7/examples/arc_agi_3/sandbox.py +200 -0
  72. nooa-0.0.7/examples/arc_agi_3/sandbox_mount_helper.py +102 -0
  73. nooa-0.0.7/examples/arc_agi_3/scorecard_broker.py +132 -0
  74. nooa-0.0.7/examples/arc_agi_3/skills/grid-game-solver/SKILL.md +93 -0
  75. nooa-0.0.7/examples/arc_agi_3/skills/interactive-game-solver/SKILL.md +51 -0
  76. nooa-0.0.7/examples/arc_agi_3/solver_agent.py +1175 -0
  77. nooa-0.0.7/examples/arc_agi_3/tests/test_guardrails_and_autoyield.py +118 -0
  78. nooa-0.0.7/examples/arc_agi_3/tests/test_llm_routing_and_pricing.py +86 -0
  79. nooa-0.0.7/examples/arc_agi_3/tests/test_name_leak_regression.py +100 -0
  80. nooa-0.0.7/examples/arc_agi_3/tests/test_no_action_cap.py +219 -0
  81. nooa-0.0.7/examples/arc_agi_3/tests/test_offline_e2e.py +133 -0
  82. nooa-0.0.7/examples/arc_agi_3/tests/test_run_solver_fixes.py +155 -0
  83. nooa-0.0.7/examples/arc_agi_3/tests/test_wait_guard_and_helpers.py +191 -0
  84. nooa-0.0.7/examples/arc_agi_3/tui_multi_game_viewer.py +116 -0
  85. nooa-0.0.7/examples/arc_agi_3/uid_sandbox.py +131 -0
  86. nooa-0.0.7/examples/arc_agi_3/viewer.py +639 -0
  87. nooa-0.0.7/examples/arc_agi_3/viewer_event_exporter.py +453 -0
  88. nooa-0.0.7/examples/arc_agi_3/viewer_trace_exporter.py +118 -0
  89. nooa-0.0.7/examples/assets/frontend-design/LICENSE.txt +177 -0
  90. nooa-0.0.7/examples/assets/frontend-design/SKILL.md +42 -0
  91. nooa-0.0.7/examples/assets/test_image.png +0 -0
  92. nooa-0.0.7/examples/assets/test_text.png +0 -0
  93. nooa-0.0.7/examples/assets/wiki_mcp_server.py +87 -0
  94. nooa-0.0.7/examples/benchmarks/README.md +38 -0
  95. nooa-0.0.7/examples/benchmarks/__init__.py +0 -0
  96. nooa-0.0.7/examples/benchmarks/bench_agent.py +35 -0
  97. nooa-0.0.7/examples/benchmarks/harbor_adapter.py +141 -0
  98. nooa-0.0.7/examples/benchmarks/harbor_minimal.yaml +23 -0
  99. nooa-0.0.7/examples/cybergym/.dockerignore +11 -0
  100. nooa-0.0.7/examples/cybergym/.gitignore +9 -0
  101. nooa-0.0.7/examples/cybergym/Dockerfile +30 -0
  102. nooa-0.0.7/examples/cybergym/README.md +234 -0
  103. nooa-0.0.7/examples/cybergym/Technical_Report.md +134 -0
  104. nooa-0.0.7/examples/cybergym/nooa_cybergym/__init__.py +7 -0
  105. nooa-0.0.7/examples/cybergym/nooa_cybergym/llm_config.yaml +13 -0
  106. nooa-0.0.7/examples/cybergym/nooa_cybergym/main.py +623 -0
  107. nooa-0.0.7/examples/cybergym/nooa_cybergym/run.py +322 -0
  108. nooa-0.0.7/examples/cybergym/pyproject.toml +26 -0
  109. nooa-0.0.7/examples/cybergym/scripts/run_10_tasks.sh +131 -0
  110. nooa-0.0.7/examples/cybergym/task_artifacts/.gitattributes +10 -0
  111. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/output.txt +15 -0
  112. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/result.txt +15 -0
  113. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_001 +9 -0
  114. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_002 +0 -0
  115. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_003 +27 -0
  116. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_004 +27 -0
  117. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_005 +27 -0
  118. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_006 +27 -0
  119. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_007 +1023 -0
  120. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_008 +1103 -0
  121. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_009 +5023 -0
  122. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_010 +5103 -0
  123. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_011 +20103 -0
  124. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_012 +27 -0
  125. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_013 +27 -0
  126. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_014 +27 -0
  127. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_015 +27 -0
  128. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_016 +27 -0
  129. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_017 +27 -0
  130. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_018 +27 -0
  131. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_019 +27 -0
  132. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_020 +27 -0
  133. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/submissions/poc_021 +27 -0
  134. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_11248/trajectory.json +1173 -0
  135. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/output.txt +15 -0
  136. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/result.txt +19 -0
  137. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/submissions/poc_001 +0 -0
  138. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/submissions/poc_002 +0 -0
  139. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/submissions/poc_003 +0 -0
  140. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/submissions/poc_004 +0 -0
  141. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/submissions/poc_005 +0 -0
  142. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14537/trajectory.json +835 -0
  143. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/output.txt +15 -0
  144. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/result.txt +23 -0
  145. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_001 +0 -0
  146. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_002 +1 -0
  147. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_003 +0 -0
  148. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_004 +1 -0
  149. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_005 +1 -0
  150. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_006 +1 -0
  151. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/submissions/poc_007 +1 -0
  152. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_14912/trajectory.json +2779 -0
  153. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/output.txt +15 -0
  154. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/result.txt +27 -0
  155. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_001 +0 -0
  156. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_002 +0 -0
  157. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_003 +0 -0
  158. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_004 +0 -0
  159. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_005 +0 -0
  160. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_006 +0 -0
  161. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/submissions/poc_007 +0 -0
  162. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_1513/trajectory.json +1069 -0
  163. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/output.txt +15 -0
  164. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/result.txt +15 -0
  165. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/submissions/poc_001 +2 -0
  166. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/submissions/poc_002 +2 -0
  167. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/submissions/poc_003 +2 -0
  168. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/submissions/poc_004 +2 -0
  169. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_16969/trajectory.json +1069 -0
  170. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/output.txt +15 -0
  171. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/result.txt +15 -0
  172. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/submissions/poc_001 +0 -0
  173. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/submissions/poc_002 +0 -0
  174. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/submissions/poc_003 +0 -0
  175. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/submissions/poc_004 +0 -0
  176. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/submissions/poc_005 +0 -0
  177. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_17006/trajectory.json +1199 -0
  178. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/output.txt +15 -0
  179. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/result.txt +15 -0
  180. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/submissions/poc_001 +0 -0
  181. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/submissions/poc_002 +0 -0
  182. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/submissions/poc_003 +0 -0
  183. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/submissions/poc_004 +0 -0
  184. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_arvo_18615/trajectory.json +419 -0
  185. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/output.txt +15 -0
  186. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/result.txt +15 -0
  187. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/submissions/poc_001 +0 -0
  188. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/submissions/poc_002 +0 -0
  189. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/submissions/poc_003 +0 -0
  190. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/submissions/poc_004 +0 -0
  191. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_372994344/trajectory.json +939 -0
  192. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/output.txt +15 -0
  193. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/result.txt +15 -0
  194. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/submissions/poc_001 +0 -0
  195. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/submissions/poc_002 +0 -0
  196. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/submissions/poc_003 +0 -0
  197. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/submissions/poc_004 +0 -0
  198. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_386128948/trajectory.json +471 -0
  199. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/output.txt +15 -0
  200. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/result.txt +15 -0
  201. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/submissions/poc_001 +3 -0
  202. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/submissions/poc_002 +3 -0
  203. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/submissions/poc_003 +3 -0
  204. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/submissions/poc_004 +3 -0
  205. nooa-0.0.7/examples/cybergym/task_artifacts/cybergym_oss-fuzz_42536107/trajectory.json +783 -0
  206. nooa-0.0.7/examples/nooa-slides-prototype.ipynb +831 -0
  207. nooa-0.0.7/examples/quickstart/.mcp.json +9 -0
  208. nooa-0.0.7/examples/quickstart/01_first_generation_method.py +24 -0
  209. nooa-0.0.7/examples/quickstart/02_structured_outputs.py +34 -0
  210. nooa-0.0.7/examples/quickstart/03_codeact_tools.py +52 -0
  211. nooa-0.0.7/examples/quickstart/04_strategies.py +53 -0
  212. nooa-0.0.7/examples/quickstart/05_progressive_disclosure.py +47 -0
  213. nooa-0.0.7/examples/quickstart/06_tracing.py +60 -0
  214. nooa-0.0.7/examples/quickstart/07_dynamic_prompts.py +52 -0
  215. nooa-0.0.7/examples/quickstart/08_context_blocks.py +67 -0
  216. nooa-0.0.7/examples/quickstart/09_summarization.py +57 -0
  217. nooa-0.0.7/examples/quickstart/10_skills.py +51 -0
  218. nooa-0.0.7/examples/quickstart/11_mcp.py +51 -0
  219. nooa-0.0.7/examples/quickstart/12_memory.py +107 -0
  220. nooa-0.0.7/examples/quickstart/13_multimodal.py +102 -0
  221. nooa-0.0.7/examples/quickstart/14_atif_trajectory.py +71 -0
  222. nooa-0.0.7/examples/quickstart/15_nemo_relay.py +362 -0
  223. nooa-0.0.7/examples/quickstart/__init__.py +12 -0
  224. nooa-0.0.7/examples/util/__init__.py +0 -0
  225. nooa-0.0.7/examples/util/example_llm.py +36 -0
  226. nooa-0.0.7/examples/util/presentation_utils.py +87 -0
  227. nooa-0.0.7/packages/nooa-bench/README.md +15 -0
  228. nooa-0.0.7/packages/nooa-bench/pyproject.toml +46 -0
  229. nooa-0.0.7/packages/nooa-bench/src/nooa_bench/__init__.py +19 -0
  230. nooa-0.0.7/packages/nooa-bench/src/nooa_bench/bench_agent.py +256 -0
  231. nooa-0.0.7/packages/nooa-bench/src/nooa_bench/protocol.py +191 -0
  232. nooa-0.0.7/packages/nooa-bench/src/nooa_bench/runner.py +235 -0
  233. nooa-0.0.7/packages/nooa-bench/src/nooa_bench/trace_analyzer.py +186 -0
  234. nooa-0.0.7/packages/nooa-bench/tests/test_bench_agent.py +277 -0
  235. nooa-0.0.7/packages/nooa-cli/README.md +25 -0
  236. nooa-0.0.7/packages/nooa-cli/docs/activity-introspection-design.md +75 -0
  237. nooa-0.0.7/packages/nooa-cli/pyproject.toml +71 -0
  238. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/AGENTS.md +162 -0
  239. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/__init__.py +70 -0
  240. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/__main__.py +8 -0
  241. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/_common.py +45 -0
  242. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/__init__.py +106 -0
  243. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/_otlp_helpers.py +122 -0
  244. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/_template.py +89 -0
  245. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/config.py +356 -0
  246. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/delete_traces.py +63 -0
  247. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/eval.py +68 -0
  248. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/import_harbor.py +512 -0
  249. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/import_traces.py +189 -0
  250. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/start_dev.py +145 -0
  251. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/commands/traces.py +316 -0
  252. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/completion.py +253 -0
  253. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/__init__.py +0 -0
  254. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/_tree_sitter_backend.py +351 -0
  255. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/__init__.py +71 -0
  256. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/errors.py +92 -0
  257. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/sources.py +458 -0
  258. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/stream.py +527 -0
  259. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/tests/__init__.py +0 -0
  260. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/pyp/tests/test_pyp.py +394 -0
  261. nooa-0.0.7/packages/nooa-cli/src/nooa_cli/tools/repo_tools.py +902 -0
  262. nooa-0.0.7/packages/nooa-cli/tests/__init__.py +0 -0
  263. nooa-0.0.7/packages/nooa-cli/tests/test_cli_smoke.py +20 -0
  264. nooa-0.0.7/packages/nooa-memory/README.md +17 -0
  265. nooa-0.0.7/packages/nooa-memory/pyproject.toml +46 -0
  266. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/README.md +450 -0
  267. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/__init__.py +144 -0
  268. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/config.py +202 -0
  269. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/descriptors.py +58 -0
  270. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/embeddings.py +145 -0
  271. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/forgetting.py +98 -0
  272. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/generative.py +205 -0
  273. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/manager.py +933 -0
  274. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/memory_skill/__init__.py +88 -0
  275. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/monitoring.py +120 -0
  276. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/observability.py +174 -0
  277. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/references.py +163 -0
  278. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/reflection.py +348 -0
  279. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/retrieval.py +369 -0
  280. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/schema.py +372 -0
  281. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/store.py +487 -0
  282. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/tracing_bridge.py +90 -0
  283. nooa-0.0.7/packages/nooa-memory/src/nooa_memory/vector_backends.py +225 -0
  284. nooa-0.0.7/packages/nooa-memory/tests/memory/test_background_reflect_and_hygiene.py +196 -0
  285. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_authoring.py +112 -0
  286. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_contract.py +161 -0
  287. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_embeddings.py +75 -0
  288. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_embeddings_integration.py +44 -0
  289. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_forgetting.py +137 -0
  290. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_generative.py +306 -0
  291. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_manager.py +268 -0
  292. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_monitoring.py +108 -0
  293. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_observability.py +298 -0
  294. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_owner.py +156 -0
  295. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_owner_roles.py +166 -0
  296. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_references.py +177 -0
  297. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_reflection.py +155 -0
  298. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_reflection_interrupt.py +219 -0
  299. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_retrieval.py +101 -0
  300. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_routes.py +396 -0
  301. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_schema.py +110 -0
  302. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_skill.py +78 -0
  303. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_store.py +134 -0
  304. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_store_v2.py +219 -0
  305. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_todo.py +226 -0
  306. nooa-0.0.7/packages/nooa-memory/tests/memory/test_memory_vector_backends.py +166 -0
  307. nooa-0.0.7/pyproject.toml +316 -0
  308. nooa-0.0.7/scripts/check_license_headers.py +82 -0
  309. nooa-0.0.7/scripts/hooks/check_large_files.py +34 -0
  310. nooa-0.0.7/scripts/hooks/check_merge_conflict.py +20 -0
  311. nooa-0.0.7/scripts/hooks/check_spdx.py +43 -0
  312. nooa-0.0.7/scripts/hooks/check_yaml.py +19 -0
  313. nooa-0.0.7/scripts/hooks/end_of_file_fixer.py +25 -0
  314. nooa-0.0.7/scripts/hooks/trailing_whitespace.py +48 -0
  315. nooa-0.0.7/scripts/rename_imports.py +146 -0
  316. nooa-0.0.7/skills/README.md +53 -0
  317. nooa-0.0.7/skills/context-blocks/SKILL.md +144 -0
  318. nooa-0.0.7/skills/nooa-agent-authoring/SKILL.md +232 -0
  319. nooa-0.0.7/skills/nooa-agentdoc/SKILL.md +156 -0
  320. nooa-0.0.7/skills/nooa-capturing-traces/SKILL.md +127 -0
  321. nooa-0.0.7/skills/nooa-channels/SKILL.md +86 -0
  322. nooa-0.0.7/skills/nooa-codeact-advanced/SKILL.md +129 -0
  323. nooa-0.0.7/skills/nooa-context-and-state/SKILL.md +136 -0
  324. nooa-0.0.7/skills/nooa-middleware-hooks/SKILL.md +102 -0
  325. nooa-0.0.7/skills/nooa-self-extending/SKILL.md +91 -0
  326. nooa-0.0.7/skills/nooa-tools-and-skills/SKILL.md +124 -0
  327. nooa-0.0.7/skills/nooa-trace-explorer/SKILL.md +106 -0
  328. nooa-0.0.7/skills/nooa-trace-viewer/SKILL.md +106 -0
  329. nooa-0.0.7/skills/refine-agent-prompt/SKILL.md +311 -0
  330. nooa-0.0.7/src/nooa/__init__.py +180 -0
  331. nooa-0.0.7/src/nooa/_logging.py +94 -0
  332. nooa-0.0.7/src/nooa/_version.py +22 -0
  333. nooa-0.0.7/src/nooa/_visible.py +26 -0
  334. nooa-0.0.7/src/nooa/agent.py +630 -0
  335. nooa-0.0.7/src/nooa/agentdoc/__init__.py +183 -0
  336. nooa-0.0.7/src/nooa/agentdoc/_discover.py +361 -0
  337. nooa-0.0.7/src/nooa/agentdoc/_docs.py +270 -0
  338. nooa-0.0.7/src/nooa/agentdoc/_info.py +70 -0
  339. nooa-0.0.7/src/nooa/agentdoc/_metadata.py +63 -0
  340. nooa-0.0.7/src/nooa/agentdoc/_pformat.py +1977 -0
  341. nooa-0.0.7/src/nooa/agentdoc/_structured.py +1685 -0
  342. nooa-0.0.7/src/nooa/agentdoc/_truncating_stream.py +261 -0
  343. nooa-0.0.7/src/nooa/agentdoc/_visibility.py +304 -0
  344. nooa-0.0.7/src/nooa/agentdoc/_visibility.pyi +31 -0
  345. nooa-0.0.7/src/nooa/agentdoc/adapters/__init__.py +51 -0
  346. nooa-0.0.7/src/nooa/agentdoc/adapters/pandas.py +79 -0
  347. nooa-0.0.7/src/nooa/agentdoc/adapters/plotly.py +363 -0
  348. nooa-0.0.7/src/nooa/agentdoc/core.py +478 -0
  349. nooa-0.0.7/src/nooa/agentdoc/doc_config.py +38 -0
  350. nooa-0.0.7/src/nooa/agentdoc/ext.py +88 -0
  351. nooa-0.0.7/src/nooa/agentdoc/format.py +60 -0
  352. nooa-0.0.7/src/nooa/agentdoc/introspect.py +31 -0
  353. nooa-0.0.7/src/nooa/agentdoc/protocols.py +107 -0
  354. nooa-0.0.7/src/nooa/agentdoc/py.typed +0 -0
  355. nooa-0.0.7/src/nooa/agentdoc/registry.py +192 -0
  356. nooa-0.0.7/src/nooa/agentdoc/tests/test_builtins_structured_instance.py +88 -0
  357. nooa-0.0.7/src/nooa/agentdoc/tests/test_event_max_string_override.py +77 -0
  358. nooa-0.0.7/src/nooa/agentdoc/visibility.py +41 -0
  359. nooa-0.0.7/src/nooa/agents/__init__.py +17 -0
  360. nooa-0.0.7/src/nooa/agents/summarization.py +729 -0
  361. nooa-0.0.7/src/nooa/atif/__init__.py +49 -0
  362. nooa-0.0.7/src/nooa/atif/exporter.py +1397 -0
  363. nooa-0.0.7/src/nooa/atif/install.py +339 -0
  364. nooa-0.0.7/src/nooa/atif/schema.py +388 -0
  365. nooa-0.0.7/src/nooa/config/__init__.py +65 -0
  366. nooa-0.0.7/src/nooa/config/execution_config.py +24 -0
  367. nooa-0.0.7/src/nooa/config/model_config.py +59 -0
  368. nooa-0.0.7/src/nooa/config/resolved.py +128 -0
  369. nooa-0.0.7/src/nooa/config/strategy_config.py +198 -0
  370. nooa-0.0.7/src/nooa/config/summarizer_config.py +49 -0
  371. nooa-0.0.7/src/nooa/config/truncation_config.py +274 -0
  372. nooa-0.0.7/src/nooa/context_blocks/__init__.py +108 -0
  373. nooa-0.0.7/src/nooa/context_blocks/events.py +282 -0
  374. nooa-0.0.7/src/nooa/context_blocks/exceptions.py +88 -0
  375. nooa-0.0.7/src/nooa/context_blocks/formatter.py +591 -0
  376. nooa-0.0.7/src/nooa/context_blocks/models.py +508 -0
  377. nooa-0.0.7/src/nooa/context_blocks/render_config.py +23 -0
  378. nooa-0.0.7/src/nooa/context_blocks/renderer.py +224 -0
  379. nooa-0.0.7/src/nooa/context_blocks/renderers/__init__.py +7 -0
  380. nooa-0.0.7/src/nooa/context_blocks/renderers/cached.py +154 -0
  381. nooa-0.0.7/src/nooa/context_blocks/roles.py +27 -0
  382. nooa-0.0.7/src/nooa/context_blocks/scoped.py +134 -0
  383. nooa-0.0.7/src/nooa/context_blocks/utils.py +12 -0
  384. nooa-0.0.7/src/nooa/decorators.py +146 -0
  385. nooa-0.0.7/src/nooa/ellipsis_detection.py +152 -0
  386. nooa-0.0.7/src/nooa/errors/__init__.py +120 -0
  387. nooa-0.0.7/src/nooa/errors/formatting.py +418 -0
  388. nooa-0.0.7/src/nooa/errors/storage.py +50 -0
  389. nooa-0.0.7/src/nooa/events.py +728 -0
  390. nooa-0.0.7/src/nooa/experimental.py +55 -0
  391. nooa-0.0.7/src/nooa/interactive.py +531 -0
  392. nooa-0.0.7/src/nooa/layered_config.py +198 -0
  393. nooa-0.0.7/src/nooa/library_manager.py +129 -0
  394. nooa-0.0.7/src/nooa/llm_config.py +131 -0
  395. nooa-0.0.7/src/nooa/mcp/__init__.py +35 -0
  396. nooa-0.0.7/src/nooa/mcp/client.py +365 -0
  397. nooa-0.0.7/src/nooa/mcp/oauth.py +1010 -0
  398. nooa-0.0.7/src/nooa/mcp/tool.py +953 -0
  399. nooa-0.0.7/src/nooa/media.py +200 -0
  400. nooa-0.0.7/src/nooa/metaclass.py +274 -0
  401. nooa-0.0.7/src/nooa/nemo_flow_middleware.py +370 -0
  402. nooa-0.0.7/src/nooa/paths.py +82 -0
  403. nooa-0.0.7/src/nooa/plain_formatter.py +71 -0
  404. nooa-0.0.7/src/nooa/prompts.py +262 -0
  405. nooa-0.0.7/src/nooa/runtime/__init__.py +39 -0
  406. nooa-0.0.7/src/nooa/runtime/actor.py +3041 -0
  407. nooa-0.0.7/src/nooa/runtime/async_safety.py +122 -0
  408. nooa-0.0.7/src/nooa/runtime/channels.py +1082 -0
  409. nooa-0.0.7/src/nooa/runtime/code_validator.py +1684 -0
  410. nooa-0.0.7/src/nooa/runtime/context.py +248 -0
  411. nooa-0.0.7/src/nooa/runtime/context_builder.py +478 -0
  412. nooa-0.0.7/src/nooa/runtime/context_manager.py +462 -0
  413. nooa-0.0.7/src/nooa/runtime/context_vars.py +87 -0
  414. nooa-0.0.7/src/nooa/runtime/debug_handler.py +495 -0
  415. nooa-0.0.7/src/nooa/runtime/event_backend.py +330 -0
  416. nooa-0.0.7/src/nooa/runtime/event_manager.py +724 -0
  417. nooa-0.0.7/src/nooa/runtime/event_query.py +127 -0
  418. nooa-0.0.7/src/nooa/runtime/events.py +234 -0
  419. nooa-0.0.7/src/nooa/runtime/harness_metrics.py +1076 -0
  420. nooa-0.0.7/src/nooa/runtime/hooks.py +421 -0
  421. nooa-0.0.7/src/nooa/runtime/media_capture.py +185 -0
  422. nooa-0.0.7/src/nooa/runtime/method_guard.py +56 -0
  423. nooa-0.0.7/src/nooa/runtime/method_wrapper.py +542 -0
  424. nooa-0.0.7/src/nooa/runtime/middleware.py +148 -0
  425. nooa-0.0.7/src/nooa/runtime/out_accessor.py +153 -0
  426. nooa-0.0.7/src/nooa/runtime/pprint.py +61 -0
  427. nooa-0.0.7/src/nooa/runtime/producers.py +98 -0
  428. nooa-0.0.7/src/nooa/runtime/producers_skill.py +42 -0
  429. nooa-0.0.7/src/nooa/runtime/response_cleanup.py +77 -0
  430. nooa-0.0.7/src/nooa/runtime/restrictions.py +224 -0
  431. nooa-0.0.7/src/nooa/runtime/sandbox/__init__.py +34 -0
  432. nooa-0.0.7/src/nooa/runtime/sandbox/cell_core.py +230 -0
  433. nooa-0.0.7/src/nooa/runtime/sandbox/config.py +243 -0
  434. nooa-0.0.7/src/nooa/runtime/sandbox/context_block.py +67 -0
  435. nooa-0.0.7/src/nooa/runtime/sandbox/errors.py +40 -0
  436. nooa-0.0.7/src/nooa/runtime/sandbox/executor.py +459 -0
  437. nooa-0.0.7/src/nooa/runtime/sandbox/guards.py +369 -0
  438. nooa-0.0.7/src/nooa/runtime/sandbox/readonly.py +170 -0
  439. nooa-0.0.7/src/nooa/runtime/sandbox/serialization.py +218 -0
  440. nooa-0.0.7/src/nooa/runtime/sandbox/worker.py +459 -0
  441. nooa-0.0.7/src/nooa/runtime/stream_wrappers.py +201 -0
  442. nooa-0.0.7/src/nooa/runtime/tests/__init__.py +3 -0
  443. nooa-0.0.7/src/nooa/runtime/tests/test_channel_notify_wakeup.py +149 -0
  444. nooa-0.0.7/src/nooa/runtime/tests/test_channels.py +612 -0
  445. nooa-0.0.7/src/nooa/runtime/tests/test_channels_cross_thread.py +609 -0
  446. nooa-0.0.7/src/nooa/runtime/tests/test_channels_public_apis.py +149 -0
  447. nooa-0.0.7/src/nooa/runtime/tests/test_context_error_archival.py +41 -0
  448. nooa-0.0.7/src/nooa/runtime/tests/test_gl212_lock_loop.py +173 -0
  449. nooa-0.0.7/src/nooa/runtime/tests/test_gl89_token_counter_fallback.py +113 -0
  450. nooa-0.0.7/src/nooa/runtime/tests/test_producers.py +186 -0
  451. nooa-0.0.7/src/nooa/runtime/tests/test_spawn.py +349 -0
  452. nooa-0.0.7/src/nooa/runtime/tests/test_stack_isolation.py +260 -0
  453. nooa-0.0.7/src/nooa/runtime/tests/test_truncation_config_validation.py +83 -0
  454. nooa-0.0.7/src/nooa/runtime/tests/test_value_formatting.py +99 -0
  455. nooa-0.0.7/src/nooa/runtime/token_usage.py +50 -0
  456. nooa-0.0.7/src/nooa/secrets.py +71 -0
  457. nooa-0.0.7/src/nooa/skill.py +433 -0
  458. nooa-0.0.7/src/nooa/skill_registry.py +966 -0
  459. nooa-0.0.7/src/nooa/slash_dispatch.py +219 -0
  460. nooa-0.0.7/src/nooa/standalone.py +234 -0
  461. nooa-0.0.7/src/nooa/storage/__init__.py +25 -0
  462. nooa-0.0.7/src/nooa/storage/in_memory.py +45 -0
  463. nooa-0.0.7/src/nooa/storage/json_snapshot.py +54 -0
  464. nooa-0.0.7/src/nooa/storage/manager.py +107 -0
  465. nooa-0.0.7/src/nooa/storage/markers.py +124 -0
  466. nooa-0.0.7/src/nooa/storage/serialization.py +304 -0
  467. nooa-0.0.7/src/nooa/storage/snapshot.py +179 -0
  468. nooa-0.0.7/src/nooa/storage/snapshot_vars.py +84 -0
  469. nooa-0.0.7/src/nooa/storage/sqlite.py +843 -0
  470. nooa-0.0.7/src/nooa/strategies/__init__.py +103 -0
  471. nooa-0.0.7/src/nooa/strategies/base.py +364 -0
  472. nooa-0.0.7/src/nooa/strategies/codeact.py +2943 -0
  473. nooa-0.0.7/src/nooa/strategies/codeact_errors.py +421 -0
  474. nooa-0.0.7/src/nooa/strategies/codeact_lite.py +288 -0
  475. nooa-0.0.7/src/nooa/strategies/composite.py +49 -0
  476. nooa-0.0.7/src/nooa/strategies/current_call.py +351 -0
  477. nooa-0.0.7/src/nooa/strategies/experimental/__init__.py +17 -0
  478. nooa-0.0.7/src/nooa/strategies/generated_code.py +797 -0
  479. nooa-0.0.7/src/nooa/strategies/predict.py +933 -0
  480. nooa-0.0.7/src/nooa/strategies/prefill.py +186 -0
  481. nooa-0.0.7/src/nooa/strategies/pure_python.py +1060 -0
  482. nooa-0.0.7/src/nooa/strategies/reflexion.py +352 -0
  483. nooa-0.0.7/src/nooa/strategies/template.py +120 -0
  484. nooa-0.0.7/src/nooa/strategies/tests/test_gl44_value_formatter.py +148 -0
  485. nooa-0.0.7/src/nooa/strategies/tests/test_predict_output_serialization.py +66 -0
  486. nooa-0.0.7/src/nooa/strategies/tests/test_predict_param_guard.py +213 -0
  487. nooa-0.0.7/src/nooa/strategy_validation.py +66 -0
  488. nooa-0.0.7/src/nooa/token_counter.py +32 -0
  489. nooa-0.0.7/src/nooa/tools/__init__.py +16 -0
  490. nooa-0.0.7/src/nooa/tools/_bash_session.py +670 -0
  491. nooa-0.0.7/src/nooa/tools/_results.py +160 -0
  492. nooa-0.0.7/src/nooa/tools/library_writing_lib.py +397 -0
  493. nooa-0.0.7/src/nooa/tools/method_writing_lib.py +62 -0
  494. nooa-0.0.7/src/nooa/tools/shell_tools.py +782 -0
  495. nooa-0.0.7/src/nooa/tools/tests/test_bash_lock_loop.py +123 -0
  496. nooa-0.0.7/src/nooa/tools/tests/test_todo_vars.py +80 -0
  497. nooa-0.0.7/src/nooa/tools/todo.py +328 -0
  498. nooa-0.0.7/src/nooa/tools/web_publisher.py +233 -0
  499. nooa-0.0.7/src/nooa/trace_explorer/__init__.py +65 -0
  500. nooa-0.0.7/src/nooa/trace_explorer/__main__.py +8 -0
  501. nooa-0.0.7/src/nooa/trace_explorer/client.py +315 -0
  502. nooa-0.0.7/src/nooa/trace_explorer/explorer.py +6194 -0
  503. nooa-0.0.7/src/nooa/trace_explorer/skill/SKILL.md +121 -0
  504. nooa-0.0.7/src/nooa/tracing/__init__.py +515 -0
  505. nooa-0.0.7/src/nooa/tracing/_context_sideband.py +66 -0
  506. nooa-0.0.7/src/nooa/tracing/_hooks_impl.py +1062 -0
  507. nooa-0.0.7/src/nooa/tracing/_journal_builder.py +132 -0
  508. nooa-0.0.7/src/nooa/tracing/_journal_exporter.py +139 -0
  509. nooa-0.0.7/src/nooa/tracing/_litellm_journal.py +634 -0
  510. nooa-0.0.7/src/nooa/tracing/_litellm_patch.py +292 -0
  511. nooa-0.0.7/src/nooa/tracing/_metadata.py +89 -0
  512. nooa-0.0.7/src/nooa/tracing/_otlp_file_exporter.py +120 -0
  513. nooa-0.0.7/src/nooa/tracing/_otlp_http_exporter.py +158 -0
  514. nooa-0.0.7/src/nooa/tracing/_otlp_serialize.py +204 -0
  515. nooa-0.0.7/src/nooa/tracing/_secret_scrubber.py +306 -0
  516. nooa-0.0.7/src/nooa/tracing/_session.py +54 -0
  517. nooa-0.0.7/src/nooa/tracing/_session_processor.py +37 -0
  518. nooa-0.0.7/src/nooa/tracing/exporters.py +153 -0
  519. nooa-0.0.7/src/nooa/unifiedllm/__init__.py +63 -0
  520. nooa-0.0.7/src/nooa/unifiedllm/fake.py +256 -0
  521. nooa-0.0.7/src/nooa/unifiedllm/http_config.py +56 -0
  522. nooa-0.0.7/src/nooa/unifiedllm/http_logging.py +430 -0
  523. nooa-0.0.7/src/nooa/unifiedllm/py.typed +0 -0
  524. nooa-0.0.7/src/nooa/unifiedllm/registry.py +415 -0
  525. nooa-0.0.7/src/nooa/unifiedllm/replay_requests.py +245 -0
  526. nooa-0.0.7/src/nooa/unifiedllm/retry.py +384 -0
  527. nooa-0.0.7/src/nooa/unifiedllm/retry_config.py +29 -0
  528. nooa-0.0.7/src/nooa/unifiedllm/unifiedllm.py +2662 -0
  529. nooa-0.0.7/src/nooa/util/__init__.py +9 -0
  530. nooa-0.0.7/src/nooa/util/_context.py +35 -0
  531. nooa-0.0.7/src/nooa/util/quickstart.py +146 -0
  532. nooa-0.0.7/src/nooa/viewer/__init__.py +39 -0
  533. nooa-0.0.7/src/nooa/viewer/__main__.py +18 -0
  534. nooa-0.0.7/src/nooa/viewer/annotation_routes.py +70 -0
  535. nooa-0.0.7/src/nooa/viewer/eval_routes.py +615 -0
  536. nooa-0.0.7/src/nooa/viewer/explorer_routes.py +441 -0
  537. nooa-0.0.7/src/nooa/viewer/frontend-react/.gitignore +2 -0
  538. nooa-0.0.7/src/nooa/viewer/frontend-react/dist/assets/index-BN0Wf3Y-.css +1 -0
  539. nooa-0.0.7/src/nooa/viewer/frontend-react/dist/assets/index-Bf6CiCw-.js +35 -0
  540. nooa-0.0.7/src/nooa/viewer/frontend-react/dist/index.html +13 -0
  541. nooa-0.0.7/src/nooa/viewer/frontend-react/index.html +12 -0
  542. nooa-0.0.7/src/nooa/viewer/frontend-react/package-lock.json +2221 -0
  543. nooa-0.0.7/src/nooa/viewer/frontend-react/package.json +32 -0
  544. nooa-0.0.7/src/nooa/viewer/frontend-react/postcss.config.js +5 -0
  545. nooa-0.0.7/src/nooa/viewer/frontend-react/src/App.tsx +80 -0
  546. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/annotations.ts +84 -0
  547. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/eval.ts +142 -0
  548. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/memory.ts +209 -0
  549. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/playground.ts +88 -0
  550. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/traces.ts +208 -0
  551. nooa-0.0.7/src/nooa/viewer/frontend-react/src/api/types.ts +110 -0
  552. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/DataTable.tsx +231 -0
  553. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/annotations/AnnotationForm.tsx +311 -0
  554. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/annotations/AnnotationIndicator.tsx +98 -0
  555. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/playground/Playground.tsx +585 -0
  556. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/playground/PlaygroundContext.tsx +44 -0
  557. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/AgentMessagePlugin.tsx +74 -0
  558. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/AgentReasoningPlugin.tsx +66 -0
  559. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/CodeExecutionPlugin.tsx +207 -0
  560. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/DefaultPlugin.tsx +33 -0
  561. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/EvalPlugin.tsx +331 -0
  562. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/GenerationPlugin.tsx +235 -0
  563. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/LLMCallPlugin.tsx +457 -0
  564. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/MethodPlugin.tsx +231 -0
  565. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/RuntimeErrorPlugin.tsx +96 -0
  566. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/SpanPlugin.tsx +156 -0
  567. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/ToolExecutionPlugin.tsx +256 -0
  568. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/UserMessagePlugin.tsx +46 -0
  569. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/index.ts +42 -0
  570. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/plugins/registry.ts +43 -0
  571. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/CodeBox.tsx +295 -0
  572. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/ColumnConfigButton.tsx +37 -0
  573. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/ColumnConfigModal.tsx +129 -0
  574. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/ContextBlockRenderer.tsx +182 -0
  575. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/CopyButton.tsx +49 -0
  576. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/shared/KeyboardShortcutsHelp.tsx +109 -0
  577. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/trace/EventItem.tsx +148 -0
  578. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/trace/EventList.tsx +106 -0
  579. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/trace/FilterSidebar.tsx +414 -0
  580. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/trace/TraceView.tsx +404 -0
  581. nooa-0.0.7/src/nooa/viewer/frontend-react/src/components/trace/tree_order.ts +105 -0
  582. nooa-0.0.7/src/nooa/viewer/frontend-react/src/hooks/useColumnConfig.ts +204 -0
  583. nooa-0.0.7/src/nooa/viewer/frontend-react/src/hooks/useKeyboardNav.ts +179 -0
  584. nooa-0.0.7/src/nooa/viewer/frontend-react/src/hooks/useLiveUpdater.ts +47 -0
  585. nooa-0.0.7/src/nooa/viewer/frontend-react/src/hooks/useLocalStorage.ts +32 -0
  586. nooa-0.0.7/src/nooa/viewer/frontend-react/src/index.css +7 -0
  587. nooa-0.0.7/src/nooa/viewer/frontend-react/src/main.tsx +13 -0
  588. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/EvalExperimentDetail.tsx +723 -0
  589. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/EvalExperimentList.tsx +208 -0
  590. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/EvalTraceDetail.tsx +153 -0
  591. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/MemoryPage.tsx +624 -0
  592. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/MemoryRecordDetail.tsx +290 -0
  593. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/PlaygroundPage.tsx +58 -0
  594. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/TraceDetail.tsx +85 -0
  595. nooa-0.0.7/src/nooa/viewer/frontend-react/src/pages/TraceList.tsx +296 -0
  596. nooa-0.0.7/src/nooa/viewer/frontend-react/src/utils/evalFilters.ts +54 -0
  597. nooa-0.0.7/src/nooa/viewer/frontend-react/src/utils/time.ts +48 -0
  598. nooa-0.0.7/src/nooa/viewer/frontend-react/src/vite-env.d.ts +1 -0
  599. nooa-0.0.7/src/nooa/viewer/frontend-react/tsconfig.json +24 -0
  600. nooa-0.0.7/src/nooa/viewer/frontend-react/vite.config.ts +26 -0
  601. nooa-0.0.7/src/nooa/viewer/main.py +477 -0
  602. nooa-0.0.7/src/nooa/viewer/memory_routes.py +287 -0
  603. nooa-0.0.7/src/nooa/viewer/otlp_store.py +2115 -0
  604. nooa-0.0.7/src/nooa/viewer/trace_models.py +206 -0
  605. nooa-0.0.7/src/nooa/viewer/trace_routes.py +727 -0
  606. nooa-0.0.7/tests/README.md +99 -0
  607. nooa-0.0.7/tests/__init__.py +0 -0
  608. nooa-0.0.7/tests/agentdoc/__init__.py +3 -0
  609. nooa-0.0.7/tests/agentdoc/fixtures/__init__.py +3 -0
  610. nooa-0.0.7/tests/agentdoc/fixtures/agent_asyncio_alias.py +16 -0
  611. nooa-0.0.7/tests/agentdoc/fixtures/agent_hide_comment_before.py +18 -0
  612. nooa-0.0.7/tests/agentdoc/fixtures/agent_hide_from_import.py +17 -0
  613. nooa-0.0.7/tests/agentdoc/fixtures/agent_hide_inline_comment.py +16 -0
  614. nooa-0.0.7/tests/agentdoc/fixtures/agent_hide_multiple.py +20 -0
  615. nooa-0.0.7/tests/agentdoc/fixtures/agent_multiple_imports.py +16 -0
  616. nooa-0.0.7/tests/agentdoc/fixtures/agent_no_asyncio_import.py +13 -0
  617. nooa-0.0.7/tests/agentdoc/fixtures/agent_with_from_asyncio.py +16 -0
  618. nooa-0.0.7/tests/agentdoc/fixtures/agent_with_import_asyncio.py +16 -0
  619. nooa-0.0.7/tests/agentdoc/fixtures/init_field_classes.py +79 -0
  620. nooa-0.0.7/tests/agentdoc/test_annotated_params.py +638 -0
  621. nooa-0.0.7/tests/agentdoc/test_annotated_types.py +381 -0
  622. nooa-0.0.7/tests/agentdoc/test_classmethod_rendering.py +80 -0
  623. nooa-0.0.7/tests/agentdoc/test_contracts.py +1163 -0
  624. nooa-0.0.7/tests/agentdoc/test_core.py +1401 -0
  625. nooa-0.0.7/tests/agentdoc/test_dataclass_properties.py +103 -0
  626. nooa-0.0.7/tests/agentdoc/test_discover_pep563.py +142 -0
  627. nooa-0.0.7/tests/agentdoc/test_discover_pydantic_forward_refs.py +69 -0
  628. nooa-0.0.7/tests/agentdoc/test_doc_config.py +51 -0
  629. nooa-0.0.7/tests/agentdoc/test_doc_instance_agents.py +170 -0
  630. nooa-0.0.7/tests/agentdoc/test_docs.py +468 -0
  631. nooa-0.0.7/tests/agentdoc/test_field_type_docstring.py +161 -0
  632. nooa-0.0.7/tests/agentdoc/test_file_backed_truncating_stream.py +284 -0
  633. nooa-0.0.7/tests/agentdoc/test_function_default_rendering.py +74 -0
  634. nooa-0.0.7/tests/agentdoc/test_inherited_fields.py +408 -0
  635. nooa-0.0.7/tests/agentdoc/test_metadata.py +167 -0
  636. nooa-0.0.7/tests/agentdoc/test_multi_type_doc.py +302 -0
  637. nooa-0.0.7/tests/agentdoc/test_namedtuple_future_annotations.py +39 -0
  638. nooa-0.0.7/tests/agentdoc/test_pandas_adapter.py +39 -0
  639. nooa-0.0.7/tests/agentdoc/test_pformat_cycles.py +139 -0
  640. nooa-0.0.7/tests/agentdoc/test_pformat_head_tail.py +174 -0
  641. nooa-0.0.7/tests/agentdoc/test_pformat_remove_budget.py +47 -0
  642. nooa-0.0.7/tests/agentdoc/test_pprint_respects_hidden.py +246 -0
  643. nooa-0.0.7/tests/agentdoc/test_protocols.py +236 -0
  644. nooa-0.0.7/tests/agentdoc/test_referenced_types.py +280 -0
  645. nooa-0.0.7/tests/agentdoc/test_referenced_types_demo.py +98 -0
  646. nooa-0.0.7/tests/agentdoc/test_registry.py +328 -0
  647. nooa-0.0.7/tests/agentdoc/test_structured.py +878 -0
  648. nooa-0.0.7/tests/agentdoc/test_truncating_pformat.py +65 -0
  649. nooa-0.0.7/tests/agentdoc/test_truncating_stream.py +156 -0
  650. nooa-0.0.7/tests/agentdoc/test_typeddict_future_annotations.py +47 -0
  651. nooa-0.0.7/tests/agentdoc/test_visibility.py +360 -0
  652. nooa-0.0.7/tests/agentdoc/test_visibility_public.py +105 -0
  653. nooa-0.0.7/tests/agents/test_agent_imports.py +65 -0
  654. nooa-0.0.7/tests/agents/test_agent_render_config.py +36 -0
  655. nooa-0.0.7/tests/agents/test_method_summarizer_call_id.py +466 -0
  656. nooa-0.0.7/tests/agents/test_summarization_agents.py +1159 -0
  657. nooa-0.0.7/tests/agents/test_summarization_large_input.py +156 -0
  658. nooa-0.0.7/tests/atif/__init__.py +0 -0
  659. nooa-0.0.7/tests/atif/normative.py +292 -0
  660. nooa-0.0.7/tests/atif/test_custom_event_types.py +289 -0
  661. nooa-0.0.7/tests/atif/test_enable_atif_isolation.py +367 -0
  662. nooa-0.0.7/tests/atif/test_end_to_end_codeact.py +312 -0
  663. nooa-0.0.7/tests/atif/test_exporter_state_machine.py +619 -0
  664. nooa-0.0.7/tests/atif/test_multi_agent_embedding.py +237 -0
  665. nooa-0.0.7/tests/atif/test_normative_rules.py +444 -0
  666. nooa-0.0.7/tests/atif/test_phase4_nesting.py +381 -0
  667. nooa-0.0.7/tests/atif/test_schema_validation.py +409 -0
  668. nooa-0.0.7/tests/atif/test_standalone_entrypoint_cascade.py +511 -0
  669. nooa-0.0.7/tests/atif/test_structural_scenarios.py +643 -0
  670. nooa-0.0.7/tests/capability/EXPERIMENT_truncation_markers.md +417 -0
  671. nooa-0.0.7/tests/capability/RUN_TRUNCATION_EXPERIMENTS.md +283 -0
  672. nooa-0.0.7/tests/capability/__init__.py +8 -0
  673. nooa-0.0.7/tests/capability/agents/__init__.py +49 -0
  674. nooa-0.0.7/tests/capability/agents/calculate_batch.py +28 -0
  675. nooa-0.0.7/tests/capability/agents/calculate_single.py +22 -0
  676. nooa-0.0.7/tests/capability/agents/construction.py +108 -0
  677. nooa-0.0.7/tests/capability/agents/context_notes.py +108 -0
  678. nooa-0.0.7/tests/capability/agents/employee_lookup.py +125 -0
  679. nooa-0.0.7/tests/capability/agents/error_recovery.py +67 -0
  680. nooa-0.0.7/tests/capability/agents/fast_agent_help.py +82 -0
  681. nooa-0.0.7/tests/capability/agents/json_extract.py +28 -0
  682. nooa-0.0.7/tests/capability/agents/json_qa.py +20 -0
  683. nooa-0.0.7/tests/capability/agents/large_data.py +56 -0
  684. nooa-0.0.7/tests/capability/agents/large_data_wrapper.py +101 -0
  685. nooa-0.0.7/tests/capability/agents/needle.py +36 -0
  686. nooa-0.0.7/tests/capability/agents/order.py +549 -0
  687. nooa-0.0.7/tests/capability/agents/realfmt_codeact.py +68 -0
  688. nooa-0.0.7/tests/capability/agents/realfmt_predict.py +69 -0
  689. nooa-0.0.7/tests/capability/agents/realfmt_predict_no_prompt.py +63 -0
  690. nooa-0.0.7/tests/capability/agents/refinement.py +122 -0
  691. nooa-0.0.7/tests/capability/agents/repl_exploration.py +46 -0
  692. nooa-0.0.7/tests/capability/agents/router.py +146 -0
  693. nooa-0.0.7/tests/capability/agents/sentiment.py +31 -0
  694. nooa-0.0.7/tests/capability/agents/sentiment_batch.py +22 -0
  695. nooa-0.0.7/tests/capability/agents/sentiment_single.py +17 -0
  696. nooa-0.0.7/tests/capability/agents/structured_output.py +246 -0
  697. nooa-0.0.7/tests/capability/agents/summarize.py +35 -0
  698. nooa-0.0.7/tests/capability/agents/task_decomposition.py +185 -0
  699. nooa-0.0.7/tests/capability/agents/truncation_comprehension.py +139 -0
  700. nooa-0.0.7/tests/capability/agents/truncation_formats.py +409 -0
  701. nooa-0.0.7/tests/capability/analyze_fmt_matrix.py +261 -0
  702. nooa-0.0.7/tests/capability/config.yaml +813 -0
  703. nooa-0.0.7/tests/capability/config_inline.yaml +91 -0
  704. nooa-0.0.7/tests/capability/config_openai.yaml +603 -0
  705. nooa-0.0.7/tests/capability/config_phase1.yaml +197 -0
  706. nooa-0.0.7/tests/capability/config_phase2.yaml +204 -0
  707. nooa-0.0.7/tests/capability/config_phase3.yaml +102 -0
  708. nooa-0.0.7/tests/capability/config_truncation.yaml +2659 -0
  709. nooa-0.0.7/tests/capability/data/calculate_batch.jsonl +1 -0
  710. nooa-0.0.7/tests/capability/data/calculate_complex.jsonl +2 -0
  711. nooa-0.0.7/tests/capability/data/calculate_simple.jsonl +2 -0
  712. nooa-0.0.7/tests/capability/data/construction_dataframe.jsonl +2 -0
  713. nooa-0.0.7/tests/capability/data/construction_widget.jsonl +2 -0
  714. nooa-0.0.7/tests/capability/data/context_notes.jsonl +1 -0
  715. nooa-0.0.7/tests/capability/data/employee_lookup.jsonl +1 -0
  716. nooa-0.0.7/tests/capability/data/error_recovery.jsonl +1 -0
  717. nooa-0.0.7/tests/capability/data/fast_agent_help.jsonl +3 -0
  718. nooa-0.0.7/tests/capability/data/fast_agent_no_help.jsonl +3 -0
  719. nooa-0.0.7/tests/capability/data/fast_food_cancel.jsonl +2 -0
  720. nooa-0.0.7/tests/capability/data/fast_food_order.jsonl +6 -0
  721. nooa-0.0.7/tests/capability/data/fmt_lower_dataclass.jsonl +7 -0
  722. nooa-0.0.7/tests/capability/data/fmt_lower_dict.jsonl +7 -0
  723. nooa-0.0.7/tests/capability/data/fmt_lower_json.jsonl +7 -0
  724. nooa-0.0.7/tests/capability/data/fmt_lower_list.jsonl +7 -0
  725. nooa-0.0.7/tests/capability/data/fmt_lower_pydantic.jsonl +7 -0
  726. nooa-0.0.7/tests/capability/data/fmt_lower_records.jsonl +7 -0
  727. nooa-0.0.7/tests/capability/data/fmt_lower_set.jsonl +7 -0
  728. nooa-0.0.7/tests/capability/data/fmt_lower_tuple.jsonl +7 -0
  729. nooa-0.0.7/tests/capability/data/fmt_slice_keys_list.jsonl +7 -0
  730. nooa-0.0.7/tests/capability/data/fmt_slice_keys_records.jsonl +7 -0
  731. nooa-0.0.7/tests/capability/data/fmt_slice_keys_tuple.jsonl +7 -0
  732. nooa-0.0.7/tests/capability/data/fmt_today_verbose_dataclass.jsonl +7 -0
  733. nooa-0.0.7/tests/capability/data/fmt_today_verbose_dict.jsonl +7 -0
  734. nooa-0.0.7/tests/capability/data/fmt_today_verbose_json.jsonl +7 -0
  735. nooa-0.0.7/tests/capability/data/fmt_today_verbose_list.jsonl +7 -0
  736. nooa-0.0.7/tests/capability/data/fmt_today_verbose_pydantic.jsonl +7 -0
  737. nooa-0.0.7/tests/capability/data/fmt_today_verbose_records.jsonl +7 -0
  738. nooa-0.0.7/tests/capability/data/fmt_today_verbose_set.jsonl +7 -0
  739. nooa-0.0.7/tests/capability/data/fmt_today_verbose_tuple.jsonl +7 -0
  740. nooa-0.0.7/tests/capability/data/fmt_xml_dataclass.jsonl +7 -0
  741. nooa-0.0.7/tests/capability/data/fmt_xml_dict.jsonl +7 -0
  742. nooa-0.0.7/tests/capability/data/fmt_xml_json.jsonl +7 -0
  743. nooa-0.0.7/tests/capability/data/fmt_xml_list.jsonl +7 -0
  744. nooa-0.0.7/tests/capability/data/fmt_xml_pydantic.jsonl +7 -0
  745. nooa-0.0.7/tests/capability/data/fmt_xml_records.jsonl +7 -0
  746. nooa-0.0.7/tests/capability/data/fmt_xml_set.jsonl +7 -0
  747. nooa-0.0.7/tests/capability/data/fmt_xml_tuple.jsonl +7 -0
  748. nooa-0.0.7/tests/capability/data/json_extract.jsonl +1 -0
  749. nooa-0.0.7/tests/capability/data/json_qa_lookup.jsonl +2 -0
  750. nooa-0.0.7/tests/capability/data/json_qa_reasoning.jsonl +2 -0
  751. nooa-0.0.7/tests/capability/data/large_data_count_generated.jsonl +1 -0
  752. nooa-0.0.7/tests/capability/data/large_data_extract_generated.jsonl +1 -0
  753. nooa-0.0.7/tests/capability/data/large_data_find_generated.jsonl +2 -0
  754. nooa-0.0.7/tests/capability/data/needle_in_haystack.jsonl +1 -0
  755. nooa-0.0.7/tests/capability/data/realfmt_lower_bare_dict_predict.jsonl +7 -0
  756. nooa-0.0.7/tests/capability/data/realfmt_lower_bare_set_predict.jsonl +7 -0
  757. nooa-0.0.7/tests/capability/data/realfmt_lower_dataclass_codeact.jsonl +7 -0
  758. nooa-0.0.7/tests/capability/data/realfmt_lower_dataclass_predict.jsonl +7 -0
  759. nooa-0.0.7/tests/capability/data/realfmt_lower_dict_codeact.jsonl +7 -0
  760. nooa-0.0.7/tests/capability/data/realfmt_lower_dict_predict.jsonl +7 -0
  761. nooa-0.0.7/tests/capability/data/realfmt_lower_dots_dict_predict.jsonl +7 -0
  762. nooa-0.0.7/tests/capability/data/realfmt_lower_dots_set_predict.jsonl +7 -0
  763. nooa-0.0.7/tests/capability/data/realfmt_lower_json_codeact.jsonl +7 -0
  764. nooa-0.0.7/tests/capability/data/realfmt_lower_json_predict.jsonl +7 -0
  765. nooa-0.0.7/tests/capability/data/realfmt_lower_list_codeact.jsonl +7 -0
  766. nooa-0.0.7/tests/capability/data/realfmt_lower_list_predict.jsonl +7 -0
  767. nooa-0.0.7/tests/capability/data/realfmt_lower_plus_n_dict_predict.jsonl +7 -0
  768. nooa-0.0.7/tests/capability/data/realfmt_lower_plus_n_set_predict.jsonl +7 -0
  769. nooa-0.0.7/tests/capability/data/realfmt_lower_pydantic_codeact.jsonl +7 -0
  770. nooa-0.0.7/tests/capability/data/realfmt_lower_pydantic_predict.jsonl +7 -0
  771. nooa-0.0.7/tests/capability/data/realfmt_lower_records_codeact.jsonl +7 -0
  772. nooa-0.0.7/tests/capability/data/realfmt_lower_records_predict.jsonl +7 -0
  773. nooa-0.0.7/tests/capability/data/realfmt_lower_set_codeact.jsonl +7 -0
  774. nooa-0.0.7/tests/capability/data/realfmt_lower_set_predict.jsonl +7 -0
  775. nooa-0.0.7/tests/capability/data/realfmt_lower_tuple_codeact.jsonl +7 -0
  776. nooa-0.0.7/tests/capability/data/realfmt_lower_tuple_predict.jsonl +7 -0
  777. nooa-0.0.7/tests/capability/data/realfmt_nested_codeact.jsonl +7 -0
  778. nooa-0.0.7/tests/capability/data/realfmt_nested_predict.jsonl +7 -0
  779. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_dataclass_codeact.jsonl +7 -0
  780. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_dataclass_predict.jsonl +7 -0
  781. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_list_codeact.jsonl +7 -0
  782. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_list_predict.jsonl +7 -0
  783. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_pydantic_codeact.jsonl +7 -0
  784. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_pydantic_predict.jsonl +7 -0
  785. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_records_codeact.jsonl +7 -0
  786. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_records_predict.jsonl +7 -0
  787. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_tuple_codeact.jsonl +7 -0
  788. nooa-0.0.7/tests/capability/data/realfmt_slice_keys_tuple_predict.jsonl +7 -0
  789. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_dataclass_codeact.jsonl +7 -0
  790. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_dataclass_predict.jsonl +7 -0
  791. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_dict_codeact.jsonl +7 -0
  792. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_dict_predict.jsonl +7 -0
  793. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_json_codeact.jsonl +7 -0
  794. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_json_predict.jsonl +7 -0
  795. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_list_codeact.jsonl +7 -0
  796. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_list_predict.jsonl +7 -0
  797. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_pydantic_codeact.jsonl +7 -0
  798. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_pydantic_predict.jsonl +7 -0
  799. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_records_codeact.jsonl +7 -0
  800. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_records_predict.jsonl +7 -0
  801. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_set_codeact.jsonl +7 -0
  802. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_set_predict.jsonl +7 -0
  803. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_tuple_codeact.jsonl +7 -0
  804. nooa-0.0.7/tests/capability/data/realfmt_today_verbose_tuple_predict.jsonl +7 -0
  805. nooa-0.0.7/tests/capability/data/realfmt_xml_dataclass_codeact.jsonl +7 -0
  806. nooa-0.0.7/tests/capability/data/realfmt_xml_dataclass_predict.jsonl +7 -0
  807. nooa-0.0.7/tests/capability/data/realfmt_xml_dict_codeact.jsonl +7 -0
  808. nooa-0.0.7/tests/capability/data/realfmt_xml_dict_predict.jsonl +7 -0
  809. nooa-0.0.7/tests/capability/data/realfmt_xml_json_codeact.jsonl +7 -0
  810. nooa-0.0.7/tests/capability/data/realfmt_xml_json_predict.jsonl +7 -0
  811. nooa-0.0.7/tests/capability/data/realfmt_xml_list_codeact.jsonl +7 -0
  812. nooa-0.0.7/tests/capability/data/realfmt_xml_list_predict.jsonl +7 -0
  813. nooa-0.0.7/tests/capability/data/realfmt_xml_pydantic_codeact.jsonl +7 -0
  814. nooa-0.0.7/tests/capability/data/realfmt_xml_pydantic_predict.jsonl +7 -0
  815. nooa-0.0.7/tests/capability/data/realfmt_xml_records_codeact.jsonl +7 -0
  816. nooa-0.0.7/tests/capability/data/realfmt_xml_records_predict.jsonl +7 -0
  817. nooa-0.0.7/tests/capability/data/realfmt_xml_set_codeact.jsonl +7 -0
  818. nooa-0.0.7/tests/capability/data/realfmt_xml_set_predict.jsonl +7 -0
  819. nooa-0.0.7/tests/capability/data/realfmt_xml_tuple_codeact.jsonl +7 -0
  820. nooa-0.0.7/tests/capability/data/realfmt_xml_tuple_predict.jsonl +7 -0
  821. nooa-0.0.7/tests/capability/data/refinement.jsonl +1 -0
  822. nooa-0.0.7/tests/capability/data/repl_exploration.jsonl +1 -0
  823. nooa-0.0.7/tests/capability/data/router_analyze.jsonl +2 -0
  824. nooa-0.0.7/tests/capability/data/router_multi_analyze_validate.jsonl +1 -0
  825. nooa-0.0.7/tests/capability/data/router_multi_transform_validate.jsonl +1 -0
  826. nooa-0.0.7/tests/capability/data/router_transform.jsonl +2 -0
  827. nooa-0.0.7/tests/capability/data/router_validate.jsonl +2 -0
  828. nooa-0.0.7/tests/capability/data/sentiment_batch.jsonl +1 -0
  829. nooa-0.0.7/tests/capability/data/sentiment_single.jsonl +3 -0
  830. nooa-0.0.7/tests/capability/data/structured_combined_extraction.jsonl +3 -0
  831. nooa-0.0.7/tests/capability/data/summarize_batch.jsonl +1 -0
  832. nooa-0.0.7/tests/capability/data/summarize_single.jsonl +1 -0
  833. nooa-0.0.7/tests/capability/data/task_decomposition.jsonl +1 -0
  834. nooa-0.0.7/tests/capability/data/truncation_aware_cycle.jsonl +5 -0
  835. nooa-0.0.7/tests/capability/data/truncation_aware_depth.jsonl +7 -0
  836. nooa-0.0.7/tests/capability/data/truncation_aware_generator.jsonl +5 -0
  837. nooa-0.0.7/tests/capability/data/truncation_aware_lower.jsonl +7 -0
  838. nooa-0.0.7/tests/capability/data/truncation_aware_lower_dataclass.jsonl +7 -0
  839. nooa-0.0.7/tests/capability/data/truncation_aware_lower_dict.jsonl +7 -0
  840. nooa-0.0.7/tests/capability/data/truncation_aware_lower_json.jsonl +7 -0
  841. nooa-0.0.7/tests/capability/data/truncation_aware_lower_pydantic.jsonl +7 -0
  842. nooa-0.0.7/tests/capability/data/truncation_aware_lower_tuple.jsonl +7 -0
  843. nooa-0.0.7/tests/capability/data/truncation_aware_pascal.jsonl +7 -0
  844. nooa-0.0.7/tests/capability/data/truncation_aware_records.jsonl +7 -0
  845. nooa-0.0.7/tests/capability/data/truncation_aware_string_slice.jsonl +7 -0
  846. nooa-0.0.7/tests/capability/data/truncation_aware_today_verbose.jsonl +7 -0
  847. nooa-0.0.7/tests/capability/data/truncation_aware_xml.jsonl +7 -0
  848. nooa-0.0.7/tests/capability/data/truncation_depth_marker.jsonl +4 -0
  849. nooa-0.0.7/tests/capability/data/truncation_error_after.jsonl +2 -0
  850. nooa-0.0.7/tests/capability/data/truncation_error_before.jsonl +2 -0
  851. nooa-0.0.7/tests/capability/data/truncation_marker_after.jsonl +2 -0
  852. nooa-0.0.7/tests/capability/data/truncation_marker_before.jsonl +2 -0
  853. nooa-0.0.7/tests/capability/data/truncation_marker_consolidated.jsonl +2 -0
  854. nooa-0.0.7/tests/capability/data/truncation_nested_partial_after.jsonl +2 -0
  855. nooa-0.0.7/tests/capability/data/truncation_nested_partial_before.jsonl +2 -0
  856. nooa-0.0.7/tests/capability/data/truncation_nested_partial_consolidated.jsonl +2 -0
  857. nooa-0.0.7/tests/capability/data/truncation_nested_value_after.jsonl +2 -0
  858. nooa-0.0.7/tests/capability/data/truncation_nested_value_before.jsonl +2 -0
  859. nooa-0.0.7/tests/capability/data/truncation_partial_after.jsonl +2 -0
  860. nooa-0.0.7/tests/capability/data/truncation_partial_before.jsonl +2 -0
  861. nooa-0.0.7/tests/capability/data/truncation_partial_consolidated.jsonl +2 -0
  862. nooa-0.0.7/tests/capability/data/truncation_pydantic_field_after.jsonl +3 -0
  863. nooa-0.0.7/tests/capability/data/truncation_pydantic_field_before.jsonl +3 -0
  864. nooa-0.0.7/tests/capability/data/truncation_pydantic_shallow_after.jsonl +2 -0
  865. nooa-0.0.7/tests/capability/data/truncation_pydantic_shallow_before.jsonl +2 -0
  866. nooa-0.0.7/tests/capability/data/truncation_realdata.jsonl +7 -0
  867. nooa-0.0.7/tests/capability/data/truncation_realdata_codeact.jsonl +7 -0
  868. nooa-0.0.7/tests/capability/data/truncation_realdata_predict.jsonl +7 -0
  869. nooa-0.0.7/tests/capability/data/truncation_size_after.jsonl +2 -0
  870. nooa-0.0.7/tests/capability/data/truncation_size_before.jsonl +2 -0
  871. nooa-0.0.7/tests/capability/data/truncation_size_consolidated.jsonl +2 -0
  872. nooa-0.0.7/tests/capability/data/truncation_size_v1_total_prefix.jsonl +2 -0
  873. nooa-0.0.7/tests/capability/data/truncation_size_v2_natural_prose.jsonl +2 -0
  874. nooa-0.0.7/tests/capability/data/truncation_size_v3_dict.jsonl +2 -0
  875. nooa-0.0.7/tests/capability/data/truncation_size_v3_json.jsonl +2 -0
  876. nooa-0.0.7/tests/capability/data/truncation_size_v3_nested.jsonl +2 -0
  877. nooa-0.0.7/tests/capability/data/truncation_size_v3_pydantic.jsonl +2 -0
  878. nooa-0.0.7/tests/capability/data/truncation_size_v3_xml_4q.jsonl +4 -0
  879. nooa-0.0.7/tests/capability/data/truncation_size_v3_xml_len.jsonl +2 -0
  880. nooa-0.0.7/tests/capability/data/truncation_size_v4_total_with_marker.jsonl +2 -0
  881. nooa-0.0.7/tests/capability/data/truncation_size_v5_python_comment.jsonl +2 -0
  882. nooa-0.0.7/tests/capability/data/truncation_size_v6_total_comment_first.jsonl +2 -0
  883. nooa-0.0.7/tests/capability/data/truncation_size_v7_len_attr.jsonl +2 -0
  884. nooa-0.0.7/tests/capability/data/truncation_size_v8_pydantic_capital.jsonl +4 -0
  885. nooa-0.0.7/tests/capability/data/truncation_size_v9_python_lower.jsonl +4 -0
  886. nooa-0.0.7/tests/capability/data/truncation_str_v1_plus_n.jsonl +4 -0
  887. nooa-0.0.7/tests/capability/data/truncation_str_v2_str_len.jsonl +4 -0
  888. nooa-0.0.7/tests/capability/data/truncation_str_v3_head_tail.jsonl +4 -0
  889. nooa-0.0.7/tests/capability/data/truncation_str_v4_start_end.jsonl +4 -0
  890. nooa-0.0.7/tests/capability/data/truncation_str_v5_prefix_suffix.jsonl +4 -0
  891. nooa-0.0.7/tests/capability/data/truncation_str_v6_slice_keys.jsonl +4 -0
  892. nooa-0.0.7/tests/capability/data/truncation_string_head_after.jsonl +2 -0
  893. nooa-0.0.7/tests/capability/data/truncation_string_head_before.jsonl +2 -0
  894. nooa-0.0.7/tests/capability/data/truncation_string_partial_after.jsonl +2 -0
  895. nooa-0.0.7/tests/capability/data/truncation_string_partial_before.jsonl +2 -0
  896. nooa-0.0.7/tests/capability/data/truncation_string_slice_legacy.jsonl +3 -0
  897. nooa-0.0.7/tests/capability/test_class_method_replacement_bug.py +180 -0
  898. nooa-0.0.7/tests/capability/test_fast_food_order_scorer.py +164 -0
  899. nooa-0.0.7/tests/capability/test_router_repeated_runs.py +395 -0
  900. nooa-0.0.7/tests/capability/test_structured_output_scorer.py +95 -0
  901. nooa-0.0.7/tests/config/__init__.py +0 -0
  902. nooa-0.0.7/tests/config/test_blocked_config.py +73 -0
  903. nooa-0.0.7/tests/config/test_execution_config.py +67 -0
  904. nooa-0.0.7/tests/config/test_resolved_config.py +118 -0
  905. nooa-0.0.7/tests/config/test_strategy_configs.py +99 -0
  906. nooa-0.0.7/tests/config/test_summarizer_configs.py +61 -0
  907. nooa-0.0.7/tests/context_blocks/test_cached_renderer.py +275 -0
  908. nooa-0.0.7/tests/context_blocks/test_context_stats.py +511 -0
  909. nooa-0.0.7/tests/context_blocks/test_events.py +390 -0
  910. nooa-0.0.7/tests/context_blocks/test_format_event_bounded.py +68 -0
  911. nooa-0.0.7/tests/context_blocks/test_formatters.py +432 -0
  912. nooa-0.0.7/tests/context_blocks/test_models.py +194 -0
  913. nooa-0.0.7/tests/context_blocks/test_render_config.py +33 -0
  914. nooa-0.0.7/tests/context_blocks/test_renderer.py +665 -0
  915. nooa-0.0.7/tests/context_blocks/test_scoped.py +91 -0
  916. nooa-0.0.7/tests/context_blocks/test_truncating_pformat.py +93 -0
  917. nooa-0.0.7/tests/context_blocks/test_truncation.py +23 -0
  918. nooa-0.0.7/tests/coordinator/__init__.py +10 -0
  919. nooa-0.0.7/tests/coordinator/test_validation.py +59 -0
  920. nooa-0.0.7/tests/core_runtime/__init__.py +12 -0
  921. nooa-0.0.7/tests/core_runtime/test_code_caching.py +108 -0
  922. nooa-0.0.7/tests/core_runtime/test_execution.py +126 -0
  923. nooa-0.0.7/tests/core_runtime/test_implemented_plan.py +105 -0
  924. nooa-0.0.7/tests/core_runtime/test_llm_client_reuse.py +117 -0
  925. nooa-0.0.7/tests/core_runtime/test_task_queuing.py +80 -0
  926. nooa-0.0.7/tests/core_runtime/test_task_queuing_edge_cases.py +140 -0
  927. nooa-0.0.7/tests/edge_cases/__init__.py +14 -0
  928. nooa-0.0.7/tests/edge_cases/test_agent_initialization.py +168 -0
  929. nooa-0.0.7/tests/edge_cases/test_builtin_shadowing.py +158 -0
  930. nooa-0.0.7/tests/edge_cases/test_child_agent_edge_cases.py +308 -0
  931. nooa-0.0.7/tests/edge_cases/test_generation_lock_edge_cases.py +95 -0
  932. nooa-0.0.7/tests/edge_cases/test_missing_await.py +239 -0
  933. nooa-0.0.7/tests/edge_cases/test_nested_generation_edge_cases.py +241 -0
  934. nooa-0.0.7/tests/edge_cases/test_sandbox_edge_cases.py +11 -0
  935. nooa-0.0.7/tests/edge_cases/test_signal_edge_cases.py +11 -0
  936. nooa-0.0.7/tests/edge_cases/test_task_wrapper_edge_cases.py +11 -0
  937. nooa-0.0.7/tests/external/__init__.py +9 -0
  938. nooa-0.0.7/tests/external/test_agent_method_requirements.py +317 -0
  939. nooa-0.0.7/tests/external/test_decorators.py +121 -0
  940. nooa-0.0.7/tests/external/test_notebook_scenarios.py +555 -0
  941. nooa-0.0.7/tests/external/test_providers.py +276 -0
  942. nooa-0.0.7/tests/external/test_stub_layer.py +74 -0
  943. nooa-0.0.7/tests/helpers/__init__.py +3 -0
  944. nooa-0.0.7/tests/helpers/cross_module_child.py +26 -0
  945. nooa-0.0.7/tests/helpers/cross_module_parent.py +56 -0
  946. nooa-0.0.7/tests/helpers/otel_assertions.py +73 -0
  947. nooa-0.0.7/tests/helpers/signature_utils.py +25 -0
  948. nooa-0.0.7/tests/integration/__init__.py +0 -0
  949. nooa-0.0.7/tests/integration/conftest.py +74 -0
  950. nooa-0.0.7/tests/integration/fixtures/archival_95pct.json.gz +0 -0
  951. nooa-0.0.7/tests/integration/generate_archival_fixture.py +150 -0
  952. nooa-0.0.7/tests/integration/nested_bug/__init__.py +3 -0
  953. nooa-0.0.7/tests/integration/nested_bug/agents.py +44 -0
  954. nooa-0.0.7/tests/integration/nested_bug/config.yaml +85 -0
  955. nooa-0.0.7/tests/integration/nested_bug/data.jsonl +3 -0
  956. nooa-0.0.7/tests/integration/nested_bug/test_message_ordering.py +233 -0
  957. nooa-0.0.7/tests/integration/reproduce_nested_history_bug.py +286 -0
  958. nooa-0.0.7/tests/integration/test_archival_on_error_e2e.py +181 -0
  959. nooa-0.0.7/tests/integration/test_codeact_dynamic_structured_output.py +215 -0
  960. nooa-0.0.7/tests/integration/test_codeact_nested_structured_output.py +190 -0
  961. nooa-0.0.7/tests/integration/test_concurrent_traces.py +330 -0
  962. nooa-0.0.7/tests/integration/test_conftest_reset.py +100 -0
  963. nooa-0.0.7/tests/integration/test_file_viewer_equivalence.py +280 -0
  964. nooa-0.0.7/tests/integration/test_hook_failure_traces.py +166 -0
  965. nooa-0.0.7/tests/integration/test_import_roundtrip.py +189 -0
  966. nooa-0.0.7/tests/integration/test_journal_multi_destination.py +178 -0
  967. nooa-0.0.7/tests/integration/test_l4_eviction_e2e.py +431 -0
  968. nooa-0.0.7/tests/integration/test_nested_agent_history_bug.py +277 -0
  969. nooa-0.0.7/tests/integration/test_nested_generation.py +248 -0
  970. nooa-0.0.7/tests/integration/test_predict_return_types_live.py +498 -0
  971. nooa-0.0.7/tests/integration/test_real_dispatch_fanout.py +305 -0
  972. nooa-0.0.7/tests/integration/test_truncation_e2e.py +804 -0
  973. nooa-0.0.7/tests/onboarding/README.md +92 -0
  974. nooa-0.0.7/tests/onboarding/__init__.py +3 -0
  975. nooa-0.0.7/tests/onboarding/test_code_generation.py +110 -0
  976. nooa-0.0.7/tests/onboarding/test_data/README.md +170 -0
  977. nooa-0.0.7/tests/onboarding/test_data/error_recovery.json +73 -0
  978. nooa-0.0.7/tests/onboarding/test_data/repl_exploration.json +55 -0
  979. nooa-0.0.7/tests/onboarding/test_data/simple_tasks.json +69 -0
  980. nooa-0.0.7/tests/onboarding/test_message_streams.py +90 -0
  981. nooa-0.0.7/tests/onboarding/test_repl_behavior.py +88 -0
  982. nooa-0.0.7/tests/onboarding/test_validation_retry.py +93 -0
  983. nooa-0.0.7/tests/onboarding/test_working_context.py +87 -0
  984. nooa-0.0.7/tests/performance/test_client_creation_overhead.py +146 -0
  985. nooa-0.0.7/tests/provider_compat/test_provider_compat.py +194 -0
  986. nooa-0.0.7/tests/runtime/__init__.py +3 -0
  987. nooa-0.0.7/tests/runtime/sandbox/__init__.py +2 -0
  988. nooa-0.0.7/tests/runtime/sandbox/test_broker_deadline.py +116 -0
  989. nooa-0.0.7/tests/runtime/sandbox/test_cell_core_implicit_return.py +70 -0
  990. nooa-0.0.7/tests/runtime/sandbox/test_codeact_sandbox.py +147 -0
  991. nooa-0.0.7/tests/runtime/sandbox/test_config.py +110 -0
  992. nooa-0.0.7/tests/runtime/sandbox/test_executor.py +478 -0
  993. nooa-0.0.7/tests/runtime/sandbox/test_guards.py +171 -0
  994. nooa-0.0.7/tests/runtime/sandbox/test_nested_async_proxy.py +82 -0
  995. nooa-0.0.7/tests/runtime/sandbox/test_readonly_module_state.py +163 -0
  996. nooa-0.0.7/tests/runtime/sandbox/test_teardown_nonblocking.py +97 -0
  997. nooa-0.0.7/tests/runtime/test_actor_generation_ids.py +133 -0
  998. nooa-0.0.7/tests/runtime/test_actor_implicit_return.py +69 -0
  999. nooa-0.0.7/tests/runtime/test_adaptive_archival.py +147 -0
  1000. nooa-0.0.7/tests/runtime/test_agent_call_events.py +124 -0
  1001. nooa-0.0.7/tests/runtime/test_async_deadlock_prevention.py +322 -0
  1002. nooa-0.0.7/tests/runtime/test_async_output_capture.py +381 -0
  1003. nooa-0.0.7/tests/runtime/test_blocking_call_validator.py +260 -0
  1004. nooa-0.0.7/tests/runtime/test_channels_queue_ergonomics.py +427 -0
  1005. nooa-0.0.7/tests/runtime/test_code_validator.py +2791 -0
  1006. nooa-0.0.7/tests/runtime/test_codeexec_method_parenting.py +177 -0
  1007. nooa-0.0.7/tests/runtime/test_context_api.py +205 -0
  1008. nooa-0.0.7/tests/runtime/test_context_builder.py +1088 -0
  1009. nooa-0.0.7/tests/runtime/test_context_error_recovery_bugs.py +432 -0
  1010. nooa-0.0.7/tests/runtime/test_context_integration.py +717 -0
  1011. nooa-0.0.7/tests/runtime/test_context_window_safety_net.py +531 -0
  1012. nooa-0.0.7/tests/runtime/test_debug_handler.py +843 -0
  1013. nooa-0.0.7/tests/runtime/test_event_manager_events.py +415 -0
  1014. nooa-0.0.7/tests/runtime/test_event_query.py +78 -0
  1015. nooa-0.0.7/tests/runtime/test_events_api.py +121 -0
  1016. nooa-0.0.7/tests/runtime/test_exec_globals_stripping.py +85 -0
  1017. nooa-0.0.7/tests/runtime/test_execute_code.py +235 -0
  1018. nooa-0.0.7/tests/runtime/test_hooks.py +471 -0
  1019. nooa-0.0.7/tests/runtime/test_issue_144_pandas_scope.py +185 -0
  1020. nooa-0.0.7/tests/runtime/test_journal_payload.py +292 -0
  1021. nooa-0.0.7/tests/runtime/test_llm_complete_event.py +306 -0
  1022. nooa-0.0.7/tests/runtime/test_llmcall_lifecycle_events.py +127 -0
  1023. nooa-0.0.7/tests/runtime/test_out_accessor.py +258 -0
  1024. nooa-0.0.7/tests/runtime/test_pformat_excluded_fields.py +168 -0
  1025. nooa-0.0.7/tests/runtime/test_pprint.py +282 -0
  1026. nooa-0.0.7/tests/runtime/test_producers.py +132 -0
  1027. nooa-0.0.7/tests/runtime/test_pure_python_executor.py +309 -0
  1028. nooa-0.0.7/tests/runtime/test_pure_python_repl.py +203 -0
  1029. nooa-0.0.7/tests/runtime/test_queue_status_cheat_sheet.py +97 -0
  1030. nooa-0.0.7/tests/runtime/test_response_cleanup.py +194 -0
  1031. nooa-0.0.7/tests/runtime/test_restricted_imports.py +350 -0
  1032. nooa-0.0.7/tests/runtime/test_restrictions.py +113 -0
  1033. nooa-0.0.7/tests/runtime/test_runtime_evaluation.py +541 -0
  1034. nooa-0.0.7/tests/runtime/test_snapshot.py +268 -0
  1035. nooa-0.0.7/tests/runtime/test_span_parent_relationship.py +578 -0
  1036. nooa-0.0.7/tests/runtime/test_stream_wrappers.py +435 -0
  1037. nooa-0.0.7/tests/runtime/test_structured_output_executor.py +496 -0
  1038. nooa-0.0.7/tests/runtime/test_systemexit_no_escape.py +157 -0
  1039. nooa-0.0.7/tests/runtime/test_token_calibration.py +278 -0
  1040. nooa-0.0.7/tests/runtime/test_truncating_stream.py +198 -0
  1041. nooa-0.0.7/tests/runtime/test_truncation_config.py +274 -0
  1042. nooa-0.0.7/tests/runtime/test_truncation_config_integration.py +1063 -0
  1043. nooa-0.0.7/tests/runtime/test_truncation_integration.py +116 -0
  1044. nooa-0.0.7/tests/runtime/test_validation_context.py +14 -0
  1045. nooa-0.0.7/tests/storage/__init__.py +0 -0
  1046. nooa-0.0.7/tests/storage/test_in_memory.py +22 -0
  1047. nooa-0.0.7/tests/storage/test_markers.py +60 -0
  1048. nooa-0.0.7/tests/storage/test_serialization.py +872 -0
  1049. nooa-0.0.7/tests/storage/test_snapshot.py +100 -0
  1050. nooa-0.0.7/tests/storage/test_snapshot_vars.py +138 -0
  1051. nooa-0.0.7/tests/strategies/conftest.py +86 -0
  1052. nooa-0.0.7/tests/strategies/test_advanced_type_validation.py +288 -0
  1053. nooa-0.0.7/tests/strategies/test_argument_validator.py +388 -0
  1054. nooa-0.0.7/tests/strategies/test_codeact_annotated_return.py +131 -0
  1055. nooa-0.0.7/tests/strategies/test_codeact_future_annotations.py +443 -0
  1056. nooa-0.0.7/tests/strategies/test_codeact_max_tokens_error.py +100 -0
  1057. nooa-0.0.7/tests/strategies/test_codeact_prefill_config.py +108 -0
  1058. nooa-0.0.7/tests/strategies/test_codeact_pure_python_coverage.py +4688 -0
  1059. nooa-0.0.7/tests/strategies/test_codeact_strategy.py +3477 -0
  1060. nooa-0.0.7/tests/strategies/test_codeact_text_only_reply.py +188 -0
  1061. nooa-0.0.7/tests/strategies/test_complex_return_types.py +229 -0
  1062. nooa-0.0.7/tests/strategies/test_current_call.py +405 -0
  1063. nooa-0.0.7/tests/strategies/test_default_strategy.py +196 -0
  1064. nooa-0.0.7/tests/strategies/test_error_recovery_gl106.py +759 -0
  1065. nooa-0.0.7/tests/strategies/test_execution_context_leaks.py +346 -0
  1066. nooa-0.0.7/tests/strategies/test_generation_strategy.py +139 -0
  1067. nooa-0.0.7/tests/strategies/test_helper_function_manager.py +205 -0
  1068. nooa-0.0.7/tests/strategies/test_non_pydantic_return_types.py +434 -0
  1069. nooa-0.0.7/tests/strategies/test_param_spec_override.py +172 -0
  1070. nooa-0.0.7/tests/strategies/test_predict_list_root_schema.py +131 -0
  1071. nooa-0.0.7/tests/strategies/test_predict_media_dedup.py +75 -0
  1072. nooa-0.0.7/tests/strategies/test_pure_python_class_definitions.py +118 -0
  1073. nooa-0.0.7/tests/strategies/test_pure_python_helper_namespace.py +94 -0
  1074. nooa-0.0.7/tests/strategies/test_pure_python_nested_structured_output.py +138 -0
  1075. nooa-0.0.7/tests/strategies/test_pure_python_return_validation.py +206 -0
  1076. nooa-0.0.7/tests/strategies/test_pure_python_strategy.py +931 -0
  1077. nooa-0.0.7/tests/strategies/test_pure_python_wrappers.py +66 -0
  1078. nooa-0.0.7/tests/strategies/test_reflexion_strategy.py +718 -0
  1079. nooa-0.0.7/tests/strategies/test_return_type_mismatch.py +468 -0
  1080. nooa-0.0.7/tests/strategies/test_runtime_services.py +243 -0
  1081. nooa-0.0.7/tests/strategies/test_sampling_params_forwarded.py +87 -0
  1082. nooa-0.0.7/tests/strategies/test_session_locals_injection.py +223 -0
  1083. nooa-0.0.7/tests/strategies/test_skills_section_context_events.py +170 -0
  1084. nooa-0.0.7/tests/strategies/test_strategies_coverage.py +1866 -0
  1085. nooa-0.0.7/tests/strategies/test_strategy_validators.py +173 -0
  1086. nooa-0.0.7/tests/strategies/test_template_strategy.py +500 -0
  1087. nooa-0.0.7/tests/strategies/test_toolcall_result_none_regression.py +690 -0
  1088. nooa-0.0.7/tests/test_actor.py +198 -0
  1089. nooa-0.0.7/tests/test_agent_llm_accessor.py +42 -0
  1090. nooa-0.0.7/tests/test_archived_events_excluded_from_context.py +201 -0
  1091. nooa-0.0.7/tests/test_cross_module_inheritance.py +131 -0
  1092. nooa-0.0.7/tests/test_cross_session_tool_call_visibility.py +195 -0
  1093. nooa-0.0.7/tests/test_decorator_strategy.py +69 -0
  1094. nooa-0.0.7/tests/test_dynamic_method_guard.py +490 -0
  1095. nooa-0.0.7/tests/test_ellipsis_detection_exec.py +214 -0
  1096. nooa-0.0.7/tests/test_error_formatting.py +797 -0
  1097. nooa-0.0.7/tests/test_error_line_numbers.py +664 -0
  1098. nooa-0.0.7/tests/test_event_auto_registration.py +393 -0
  1099. nooa-0.0.7/tests/test_event_backend_protocol.py +401 -0
  1100. nooa-0.0.7/tests/test_event_backend_roundtrip.py +372 -0
  1101. nooa-0.0.7/tests/test_event_filtering.py +194 -0
  1102. nooa-0.0.7/tests/test_event_manager.py +1167 -0
  1103. nooa-0.0.7/tests/test_event_manager_integration.py +93 -0
  1104. nooa-0.0.7/tests/test_event_middleware.py +409 -0
  1105. nooa-0.0.7/tests/test_event_types.py +220 -0
  1106. nooa-0.0.7/tests/test_events.py +355 -0
  1107. nooa-0.0.7/tests/test_execute_code_error_recovery.py +335 -0
  1108. nooa-0.0.7/tests/test_generate_tools_forwarding.py +68 -0
  1109. nooa-0.0.7/tests/test_harness_metrics.py +1030 -0
  1110. nooa-0.0.7/tests/test_history_removed_api.py +48 -0
  1111. nooa-0.0.7/tests/test_initial_llm_messages_no_errors.py +136 -0
  1112. nooa-0.0.7/tests/test_interactive_agent.py +83 -0
  1113. nooa-0.0.7/tests/test_layered_config.py +155 -0
  1114. nooa-0.0.7/tests/test_list_methods.py +82 -0
  1115. nooa-0.0.7/tests/test_llm.py +157 -0
  1116. nooa-0.0.7/tests/test_llm_config_chain.py +222 -0
  1117. nooa-0.0.7/tests/test_llm_generated_plan_methods.py +166 -0
  1118. nooa-0.0.7/tests/test_logging.py +152 -0
  1119. nooa-0.0.7/tests/test_mcp/__init__.py +3 -0
  1120. nooa-0.0.7/tests/test_mcp/test_browser_detection.py +51 -0
  1121. nooa-0.0.7/tests/test_mcp/test_call_tool_refresh.py +90 -0
  1122. nooa-0.0.7/tests/test_mcp/test_client.py +640 -0
  1123. nooa-0.0.7/tests/test_mcp/test_describe_exception.py +55 -0
  1124. nooa-0.0.7/tests/test_mcp/test_oauth_discovery.py +674 -0
  1125. nooa-0.0.7/tests/test_mcp/test_tool.py +573 -0
  1126. nooa-0.0.7/tests/test_media.py +141 -0
  1127. nooa-0.0.7/tests/test_media_capture.py +289 -0
  1128. nooa-0.0.7/tests/test_metaclass.py +1429 -0
  1129. nooa-0.0.7/tests/test_method_call_permutations.py +268 -0
  1130. nooa-0.0.7/tests/test_middleware_integration.py +932 -0
  1131. nooa-0.0.7/tests/test_module_imports.py +80 -0
  1132. nooa-0.0.7/tests/test_nemo_flow_middleware.py +1139 -0
  1133. nooa-0.0.7/tests/test_nemo_flow_middleware_no_dep.py +43 -0
  1134. nooa-0.0.7/tests/test_nested_debug.py +92 -0
  1135. nooa-0.0.7/tests/test_paths.py +11 -0
  1136. nooa-0.0.7/tests/test_plain_formatter.py +170 -0
  1137. nooa-0.0.7/tests/test_plan_with_body.py +83 -0
  1138. nooa-0.0.7/tests/test_pre_ellipsis_code.py +568 -0
  1139. nooa-0.0.7/tests/test_print_prompt.py +42 -0
  1140. nooa-0.0.7/tests/test_provider_image_rendering.py +130 -0
  1141. nooa-0.0.7/tests/test_pure_functions_gl105.py +413 -0
  1142. nooa-0.0.7/tests/test_pure_python_method_rejection.py +345 -0
  1143. nooa-0.0.7/tests/test_python_output_no_repr_truncation.py +59 -0
  1144. nooa-0.0.7/tests/test_sandbox.py +821 -0
  1145. nooa-0.0.7/tests/test_secrets.py +110 -0
  1146. nooa-0.0.7/tests/test_session_resume_tag_collision.py +195 -0
  1147. nooa-0.0.7/tests/test_skill_frontmatter.py +139 -0
  1148. nooa-0.0.7/tests/test_skill_registry.py +294 -0
  1149. nooa-0.0.7/tests/test_skill_registry_extended.py +292 -0
  1150. nooa-0.0.7/tests/test_slash_command_to_agent.py +37 -0
  1151. nooa-0.0.7/tests/test_sqlite_close_commit.py +139 -0
  1152. nooa-0.0.7/tests/test_sqlite_corruption_resilience.py +362 -0
  1153. nooa-0.0.7/tests/test_sqlite_reconnect.py +152 -0
  1154. nooa-0.0.7/tests/test_sqlite_specific.py +153 -0
  1155. nooa-0.0.7/tests/test_sqlite_storage_latest.py +59 -0
  1156. nooa-0.0.7/tests/test_standalone.py +827 -0
  1157. nooa-0.0.7/tests/test_token_calibration.py +132 -0
  1158. nooa-0.0.7/tests/test_version.py +56 -0
  1159. nooa-0.0.7/tests/test_visibility.py +283 -0
  1160. nooa-0.0.7/tests/test_visibility_type_consistency.py +289 -0
  1161. nooa-0.0.7/tests/tools/test_bash_concurrency.py +81 -0
  1162. nooa-0.0.7/tests/tools/test_bash_cross_loop.py +190 -0
  1163. nooa-0.0.7/tests/tools/test_bash_session.py +101 -0
  1164. nooa-0.0.7/tests/tools/test_bash_session_cross_loop.py +119 -0
  1165. nooa-0.0.7/tests/tools/test_bash_session_recovery.py +145 -0
  1166. nooa-0.0.7/tests/tools/test_builtin_libs.py +66 -0
  1167. nooa-0.0.7/tests/tools/test_library_writing_lib.py +401 -0
  1168. nooa-0.0.7/tests/tools/test_results.py +116 -0
  1169. nooa-0.0.7/tests/tools/test_shell_tools_modern.py +453 -0
  1170. nooa-0.0.7/tests/tools/test_shell_tools_modern_behavior.py +107 -0
  1171. nooa-0.0.7/tests/tools/test_sigint_recovery.py +144 -0
  1172. nooa-0.0.7/tests/tools/test_single_module_skill_reload.py +721 -0
  1173. nooa-0.0.7/tests/tools/test_skill.py +80 -0
  1174. nooa-0.0.7/tests/trace_explorer/__init__.py +3 -0
  1175. nooa-0.0.7/tests/trace_explorer/test_cache.py +109 -0
  1176. nooa-0.0.7/tests/trace_explorer/test_client.py +367 -0
  1177. nooa-0.0.7/tests/trace_explorer/test_db_queries.py +192 -0
  1178. nooa-0.0.7/tests/trace_explorer/test_explorer.py +1649 -0
  1179. nooa-0.0.7/tests/trace_explorer/test_fast_path.py +204 -0
  1180. nooa-0.0.7/tests/trace_explorer/test_filtered_loading.py +159 -0
  1181. nooa-0.0.7/tests/trace_explorer/test_from_otlp_spans.py +81 -0
  1182. nooa-0.0.7/tests/trace_explorer/test_oi_only_backcompat.py +231 -0
  1183. nooa-0.0.7/tests/tracing/__init__.py +3 -0
  1184. nooa-0.0.7/tests/tracing/conftest.py +95 -0
  1185. nooa-0.0.7/tests/tracing/otlp_test_helpers.py +63 -0
  1186. nooa-0.0.7/tests/tracing/test_concurrent_spans.py +310 -0
  1187. nooa-0.0.7/tests/tracing/test_context_isolation.py +246 -0
  1188. nooa-0.0.7/tests/tracing/test_context_snapshot.py +332 -0
  1189. nooa-0.0.7/tests/tracing/test_exception_stacktrace.py +162 -0
  1190. nooa-0.0.7/tests/tracing/test_exporter_isolation.py +78 -0
  1191. nooa-0.0.7/tests/tracing/test_exporters.py +89 -0
  1192. nooa-0.0.7/tests/tracing/test_flush_pending.py +157 -0
  1193. nooa-0.0.7/tests/tracing/test_gl74_returned_value_cap.py +68 -0
  1194. nooa-0.0.7/tests/tracing/test_http_exporter_drops.py +219 -0
  1195. nooa-0.0.7/tests/tracing/test_idempotent_tracing.py +124 -0
  1196. nooa-0.0.7/tests/tracing/test_journal.py +222 -0
  1197. nooa-0.0.7/tests/tracing/test_journal_exporter_refcount.py +79 -0
  1198. nooa-0.0.7/tests/tracing/test_journal_exporter_shutdown_flushes.py +88 -0
  1199. nooa-0.0.7/tests/tracing/test_journal_invariants.py +295 -0
  1200. nooa-0.0.7/tests/tracing/test_journal_routes_match.py +85 -0
  1201. nooa-0.0.7/tests/tracing/test_jsonl_messages_present.py +92 -0
  1202. nooa-0.0.7/tests/tracing/test_litellm_patch.py +137 -0
  1203. nooa-0.0.7/tests/tracing/test_metadata.py +116 -0
  1204. nooa-0.0.7/tests/tracing/test_openinference_conformance.py +436 -0
  1205. nooa-0.0.7/tests/tracing/test_probe_otlp_endpoint.py +105 -0
  1206. nooa-0.0.7/tests/tracing/test_processor_assignment.py +91 -0
  1207. nooa-0.0.7/tests/tracing/test_safe_serialize.py +99 -0
  1208. nooa-0.0.7/tests/tracing/test_secret_scrubber.py +249 -0
  1209. nooa-0.0.7/tests/tracing/test_session_processor.py +140 -0
  1210. nooa-0.0.7/tests/tracing/test_span_id_rng_isolation.py +64 -0
  1211. nooa-0.0.7/tests/tracing/test_subprocess_hooks.py +102 -0
  1212. nooa-0.0.7/tests/tracing/test_tracing_integration.py +106 -0
  1213. nooa-0.0.7/tests/tracing/test_viewer_plugin_attr.py +211 -0
  1214. nooa-0.0.7/tests/tracing/test_wire_strip_framework_io.py +107 -0
  1215. nooa-0.0.7/tests/unifiedllm/test_annotated_return_types.py +138 -0
  1216. nooa-0.0.7/tests/unifiedllm/test_anthropic_detection.py +126 -0
  1217. nooa-0.0.7/tests/unifiedllm/test_bedrock_schema_sanitization.py +318 -0
  1218. nooa-0.0.7/tests/unifiedllm/test_cache_control.py +464 -0
  1219. nooa-0.0.7/tests/unifiedllm/test_context_window.py +17 -0
  1220. nooa-0.0.7/tests/unifiedllm/test_empty_content_retry.py +421 -0
  1221. nooa-0.0.7/tests/unifiedllm/test_finish_reason_propagation.py +227 -0
  1222. nooa-0.0.7/tests/unifiedllm/test_http_config.py +319 -0
  1223. nooa-0.0.7/tests/unifiedllm/test_http_logging.py +125 -0
  1224. nooa-0.0.7/tests/unifiedllm/test_json_parsing.py +62 -0
  1225. nooa-0.0.7/tests/unifiedllm/test_litellm_cancellation.py +38 -0
  1226. nooa-0.0.7/tests/unifiedllm/test_model_registry.py +709 -0
  1227. nooa-0.0.7/tests/unifiedllm/test_output_model_instantiation.py +258 -0
  1228. nooa-0.0.7/tests/unifiedllm/test_response_format_strict_fallback.py +357 -0
  1229. nooa-0.0.7/tests/unifiedllm/test_responses_cache_control.py +357 -0
  1230. nooa-0.0.7/tests/unifiedllm/test_responses_client.py +150 -0
  1231. nooa-0.0.7/tests/unifiedllm/test_responses_client_retry.py +147 -0
  1232. nooa-0.0.7/tests/unifiedllm/test_responses_formatter.py +197 -0
  1233. nooa-0.0.7/tests/unifiedllm/test_retry.py +443 -0
  1234. nooa-0.0.7/tests/unifiedllm/test_retry_config.py +53 -0
  1235. nooa-0.0.7/tests/unifiedllm/test_strict_schema_review_fixes.py +87 -0
  1236. nooa-0.0.7/tests/unifiedllm/test_tool_schema_clean.py +206 -0
  1237. nooa-0.0.7/tests/unit/test_actor_full_coverage.py +783 -0
  1238. nooa-0.0.7/tests/unit/test_context_vars_comprehensive.py +847 -0
  1239. nooa-0.0.7/tests/unit/test_context_vars_subagent_concurrency.py +720 -0
  1240. nooa-0.0.7/tests/unit/test_coverage_gaps_v2.py +2691 -0
  1241. nooa-0.0.7/tests/unit/test_library_as_skill.py +197 -0
  1242. nooa-0.0.7/tests/unit/test_pragma_replacements.py +723 -0
  1243. nooa-0.0.7/tests/unit/test_prompts.py +366 -0
  1244. nooa-0.0.7/tests/unit/test_quick_wins.py +320 -0
  1245. nooa-0.0.7/tests/unit/test_remaining_full_coverage.py +1148 -0
  1246. nooa-0.0.7/tests/unit/test_remaining_gaps.py +1275 -0
  1247. nooa-0.0.7/tests/unit/test_skill.py +206 -0
  1248. nooa-0.0.7/tests/unit/test_strategy_full_coverage.py +1113 -0
  1249. nooa-0.0.7/tests/unit/test_todo_comments.py +118 -0
  1250. nooa-0.0.7/tests/unit/test_util_and_sqlite.py +665 -0
  1251. nooa-0.0.7/tests/utils/__init__.py +10 -0
  1252. nooa-0.0.7/tests/utils/test_doc_utility.py +549 -0
  1253. nooa-0.0.7/tests/utils/test_logger_utility.py +10 -0
  1254. nooa-0.0.7/tests/utils/test_message_utility.py +188 -0
  1255. nooa-0.0.7/tests/utils/test_task_utility.py +11 -0
  1256. nooa-0.0.7/tests/viewer/__init__.py +2 -0
  1257. nooa-0.0.7/tests/viewer/test_journal_blocks_export.py +247 -0
  1258. nooa-0.0.7/tests/viewer/test_journal_store.py +816 -0
  1259. nooa-0.0.7/tests/viewer/test_main.py +359 -0
  1260. nooa-0.0.7/tests/viewer/test_otlp_ingest.py +262 -0
  1261. nooa-0.0.7/tests/viewer/test_otlp_store.py +1123 -0
  1262. nooa-0.0.7/tests/viewer/test_otlp_stress.py +218 -0
  1263. nooa-0.0.7/tests/viewer/test_resolve_image.py +97 -0
  1264. nooa-0.0.7/tests/viewer/test_resolve_message.py +150 -0
  1265. nooa-0.0.7/util/eval_pipeline/README.md +373 -0
  1266. nooa-0.0.7/util/eval_pipeline/pyproject.toml +40 -0
  1267. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/__init__.py +122 -0
  1268. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/__main__.py +19 -0
  1269. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/_memory_monitor.py +389 -0
  1270. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/_test_fixtures.py +49 -0
  1271. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/_utils.py +100 -0
  1272. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/agents.py +76 -0
  1273. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/cli.py +771 -0
  1274. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/concurrency.py +289 -0
  1275. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/config.py +733 -0
  1276. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/config.yaml +68 -0
  1277. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/eval_parser.py +190 -0
  1278. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/eval_types.py +290 -0
  1279. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/evaluator.py +639 -0
  1280. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/execute.py +73 -0
  1281. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/experiment_writer.py +239 -0
  1282. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/headless_backend.py +267 -0
  1283. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/model_factory.py +210 -0
  1284. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/models.py +145 -0
  1285. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/models.yaml +170 -0
  1286. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/pipeline.py +660 -0
  1287. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/protocol.py +191 -0
  1288. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/scoring.py +1385 -0
  1289. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/subprocess_worker.py +652 -0
  1290. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/test_agents/__init__.py +3 -0
  1291. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/test_agents/capability_tests.py +61 -0
  1292. nooa-0.0.7/util/eval_pipeline/src/eval_pipeline/trace_eval_span.py +295 -0
  1293. nooa-0.0.7/util/eval_pipeline/tb1_monitor.sh +145 -0
  1294. nooa-0.0.7/util/eval_pipeline/test_parallel_timing.py +142 -0
  1295. nooa-0.0.7/util/eval_pipeline/test_parallel_verify.py +109 -0
  1296. nooa-0.0.7/util/eval_pipeline/tests/__init__.py +3 -0
  1297. nooa-0.0.7/util/eval_pipeline/tests/otlp_helpers.py +35 -0
  1298. nooa-0.0.7/util/eval_pipeline/tests/test_346_wiring.py +215 -0
  1299. nooa-0.0.7/util/eval_pipeline/tests/test_config_adapter.py +227 -0
  1300. nooa-0.0.7/util/eval_pipeline/tests/test_config_loader.py +254 -0
  1301. nooa-0.0.7/util/eval_pipeline/tests/test_custom_scorers.py +358 -0
  1302. nooa-0.0.7/util/eval_pipeline/tests/test_eval_metadata.py +409 -0
  1303. nooa-0.0.7/util/eval_pipeline/tests/test_eval_types.py +597 -0
  1304. nooa-0.0.7/util/eval_pipeline/tests/test_evaluator.py +868 -0
  1305. nooa-0.0.7/util/eval_pipeline/tests/test_execute.py +110 -0
  1306. nooa-0.0.7/util/eval_pipeline/tests/test_fast_agent_help_scorer.py +100 -0
  1307. nooa-0.0.7/util/eval_pipeline/tests/test_memory_monitor.py +233 -0
  1308. nooa-0.0.7/util/eval_pipeline/tests/test_models.py +89 -0
  1309. nooa-0.0.7/util/eval_pipeline/tests/test_modelspec.py +192 -0
  1310. nooa-0.0.7/util/eval_pipeline/tests/test_pipeline.py +470 -0
  1311. nooa-0.0.7/util/eval_pipeline/tests/test_pipeline_eval_span.py +149 -0
  1312. nooa-0.0.7/util/eval_pipeline/tests/test_runid.py +78 -0
  1313. nooa-0.0.7/util/eval_pipeline/tests/test_scorers_without_trace.py +78 -0
  1314. nooa-0.0.7/util/eval_pipeline/tests/test_scoring.py +813 -0
  1315. nooa-0.0.7/util/eval_pipeline/tests/test_subprocess_worker.py +399 -0
  1316. nooa-0.0.7/util/eval_pipeline/tests/test_timeout_span_flush.py +117 -0
  1317. nooa-0.0.7/util/eval_pipeline/tests/test_trace_eval_span.py +166 -0
  1318. nooa-0.0.7/util/eval_pipeline/tests/test_types.py +108 -0
  1319. nooa-0.0.7/util/install_docker.sh +40 -0
  1320. nooa-0.0.7/uv.lock +3012 -0
@@ -0,0 +1,119 @@
1
+ # .dockerignore - Exclude files not needed in Docker images
2
+
3
+ # Version control
4
+ .git/
5
+ .gitignore
6
+ .gitattributes
7
+
8
+ # CI/CD
9
+ .gitlab-ci.yml
10
+ .github/
11
+
12
+ # Development and IDE
13
+ .vscode/
14
+ .idea/
15
+ .cursor/
16
+ .cursorrules
17
+ .claude/
18
+ *.swp
19
+ *.swo
20
+ CLAUDE.md
21
+
22
+ # Python cache and build artifacts
23
+ __pycache__/
24
+ *.py[cod]
25
+ *$py.class
26
+ *.so
27
+ .Python
28
+ build/
29
+ develop-eggs/
30
+ dist/
31
+ downloads/
32
+ eggs/
33
+ .eggs/
34
+ *.egg-info/
35
+ .installed.cfg
36
+ *.egg
37
+ MANIFEST
38
+
39
+ # Testing and coverage
40
+ .pytest_cache/
41
+ .coverage
42
+ .coverage.*
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ .hypothesis/
50
+ tests/
51
+ test_*.py
52
+ *_test.py
53
+
54
+ # Documentation
55
+ docs/
56
+ *.md
57
+ !README.md
58
+ !**/README.md
59
+ *.pdf
60
+ journal/
61
+
62
+ # Examples and experiments
63
+ examples/
64
+ experiments/
65
+ scratch/
66
+
67
+ # Results and traces
68
+ results/
69
+ traces/
70
+ trace/
71
+ tmp/
72
+ *.jsonl
73
+ *.noo-eval.jsonl
74
+ *.006summary.json
75
+
76
+ # Virtual environments and caches
77
+ .venv/
78
+ venv/
79
+ env/
80
+ ENV/
81
+ .uv-cache/
82
+ .ruff_cache/
83
+ .mypy_cache/
84
+
85
+ # Environment files (may contain secrets!)
86
+ .env
87
+ .env.*
88
+ !.env.example
89
+ !.env.template
90
+ secrets.env
91
+ local_config.yaml
92
+ *.local.json
93
+
94
+ # OS files
95
+ .DS_Store
96
+ Thumbs.db
97
+
98
+ # Logs
99
+ *.log
100
+
101
+ # Jupyter
102
+ .ipynb_checkpoints
103
+ *.ipynb
104
+
105
+ # Temporal
106
+ temporal/
107
+ .temporal/
108
+
109
+ # Specific large/unnecessary directories
110
+ util/prompt-optimization/
111
+ 3P/
112
+ 3p/
113
+ trash/
114
+ debug_http_logs/
115
+
116
+ # Keep important files (override any wildcards above)
117
+ !pyproject.toml
118
+ !uv.lock
119
+ !requirements.txt
@@ -0,0 +1,6 @@
1
+ # LLM provider API key (set one or more)
2
+ # OPENAI_API_KEY=<your key>
3
+ # ANTHROPIC_API_KEY=<your key>
4
+
5
+ # Prevent litellm from fetching model costs from GitHub (uses bundled local data)
6
+ LITELLM_LOCAL_MODEL_COST_MAP=True
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a problem to help us improve
4
+ title: "[Bug] "
5
+ labels: bug
6
+ ---
7
+
8
+ **Describe the bug**
9
+ A clear and concise description of what the bug is.
10
+
11
+ **To reproduce**
12
+ Minimal steps or code to reproduce the behavior.
13
+
14
+ **Expected behavior**
15
+ What you expected to happen.
16
+
17
+ **Environment**
18
+ - OS:
19
+ - Python version:
20
+ - NOOA version (`nooa --version` or `python -c "import nooa; print(nooa.__version__)"`):
21
+ - Model / provider:
22
+
23
+ **Additional context**
24
+ Logs, traces, or anything else relevant.
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea or enhancement
4
+ title: "[Feature] "
5
+ labels: enhancement
6
+ ---
7
+
8
+ **What problem are you trying to solve?**
9
+ A clear description of the use case or limitation.
10
+
11
+ **Proposed solution**
12
+ What you'd like to happen.
13
+
14
+ **Alternatives considered**
15
+ Other approaches you've thought about.
16
+
17
+ **Additional context**
18
+ Anything else that helps explain the request.
@@ -0,0 +1,14 @@
1
+ ## What does this PR do?
2
+
3
+ <!-- A clear, concise description of the change. -->
4
+
5
+ ## Related issues
6
+
7
+ <!-- e.g. Closes #123 -->
8
+
9
+ ## Checklist
10
+
11
+ - [ ] Code follows the project style (`uv run ruff check .` and `uv run ruff format --check .` pass)
12
+ - [ ] Tests added/updated and passing (`uv run pytest`)
13
+ - [ ] Docs updated if behavior or public APIs changed
14
+ - [ ] New source files carry an SPDX license header
@@ -0,0 +1,117 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Install uv
15
+ uses: astral-sh/setup-uv@v5
16
+ with:
17
+ python-version: "3.12"
18
+ - name: Sync
19
+ run: uv sync --all-extras --no-extra sandbox
20
+ - name: Ruff lint
21
+ run: uv run ruff check .
22
+ - name: Ruff format check
23
+ run: uv run ruff format --check .
24
+ - name: SPDX license headers
25
+ run: uv run python scripts/check_license_headers.py
26
+
27
+ test:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v5
33
+ with:
34
+ python-version: "3.12"
35
+ - name: Sync
36
+ run: uv sync --all-extras --no-extra sandbox
37
+ - name: Unit tests (no live API calls)
38
+ run: uv run pytest -q -m "not integration and not stress"
39
+
40
+ build:
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+ with:
45
+ fetch-depth: 0 # tags needed for uv-dynamic-versioning
46
+ - name: Install uv
47
+ uses: astral-sh/setup-uv@v5
48
+ with:
49
+ python-version: "3.12"
50
+ # Mirrors the publish workflow's build exactly (--no-sources included) so
51
+ # this job stays a real canary for release-build breakage.
52
+ - name: Build all packages
53
+ run: |
54
+ rm -rf dist
55
+ for pkg in nooa nooa-cli nooa-memory nooa-bench; do
56
+ uv build --no-sources --package "$pkg" --out-dir dist
57
+ done
58
+ - name: Upload wheels
59
+ uses: actions/upload-artifact@v4
60
+ with:
61
+ name: dist
62
+ path: dist/
63
+ retention-days: 7
64
+
65
+ frontend-build:
66
+ runs-on: ubuntu-latest
67
+ steps:
68
+ - uses: actions/checkout@v4
69
+ - name: Setup Node
70
+ uses: actions/setup-node@v4
71
+ with:
72
+ node-version: "20"
73
+ - name: Build the trace viewer
74
+ working-directory: src/nooa/viewer/frontend-react
75
+ run: |
76
+ npm ci --ignore-scripts
77
+ npm run build
78
+ - name: Fail if dist/ is stale
79
+ run: |
80
+ if ! git diff --quiet src/nooa/viewer/frontend-react/dist/; then
81
+ echo "ERROR: frontend-react/dist/ is stale. Run 'npm run build' and commit dist/."
82
+ git diff --stat src/nooa/viewer/frontend-react/dist/
83
+ exit 1
84
+ fi
85
+
86
+ secret-scan:
87
+ runs-on: ubuntu-latest
88
+ steps:
89
+ - uses: actions/checkout@v4
90
+ with:
91
+ fetch-depth: 0 # full history so the scan covers all commits
92
+ # Invokes the gitleaks binary directly rather than gitleaks/gitleaks-action.
93
+ # That action is not on this org's GitHub Actions allowlist, and a
94
+ # disallowed action fails the *entire workflow* at startup — which is why
95
+ # every CI run since 2026-07-21 was a 0-second `startup_failure` and no
96
+ # lint, test, or build job ran at all.
97
+ #
98
+ # Pinned to an exact version and checksum-verified: the binary is fetched
99
+ # at runtime, so an unpinned tag would be an unreviewed remote dependency.
100
+ - name: Gitleaks
101
+ env:
102
+ GITLEAKS_VERSION: 8.30.1
103
+ GITLEAKS_SHA256: 551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb
104
+ run: |
105
+ set -euo pipefail
106
+ curl -sSLo gitleaks.tar.gz \
107
+ "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz"
108
+ echo "${GITLEAKS_SHA256} gitleaks.tar.gz" | sha256sum -c -
109
+ tar xzf gitleaks.tar.gz gitleaks
110
+ # `gitleaks git` exits 0 with "no leaks found" when it has no history
111
+ # to read — a shallow clone scans 1 commit and passes vacuously, and a
112
+ # non-repo scans 0. Fail loudly instead of reporting a clean scan.
113
+ test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" \
114
+ || { echo "::error::not a git checkout — gitleaks would pass vacuously"; exit 1; }
115
+ test "$(git rev-parse --is-shallow-repository)" = "false" \
116
+ || { echo "::error::shallow clone — gitleaks would miss history (need fetch-depth: 0)"; exit 1; }
117
+ ./gitleaks git --config .gitleaks.toml --redact --no-banner .
@@ -0,0 +1,224 @@
1
+ # Publishes the four workspace packages to PyPI.
2
+ #
3
+ # Trigger: a GitHub Release is *published* (the release's tag `vX.Y.Z` is what
4
+ # uv-dynamic-versioning turns into the package version — see RELEASING.md).
5
+ # Auth: PyPI Trusted Publishing (OIDC). No API tokens, no repo secrets.
6
+ #
7
+ # `workflow_dispatch` runs the same build against TestPyPI for a dry run.
8
+ #
9
+ # Every `uses:` here is an `actions/*` action, i.e. GitHub-created. That is
10
+ # deliberate: this org enforces an Actions allowlist, and a disallowed action
11
+ # fails the *entire workflow* at startup (see PR #50 — one blocked action left
12
+ # CI dead for 8 days). A publish workflow that cannot start is a publish
13
+ # workflow that silently never ships. uv is installed from a pinned, versioned
14
+ # install script and does the upload itself via `uv publish`.
15
+ name: Publish
16
+
17
+ on:
18
+ release:
19
+ types: [published]
20
+ # Manual runs are ALWAYS a TestPyPI dry run. There is deliberately no input
21
+ # to select the index: real PyPI is reachable only by publishing a GitHub
22
+ # Release, so a mis-click here cannot burn a version number on PyPI.
23
+ workflow_dispatch:
24
+
25
+ permissions: {}
26
+
27
+ env:
28
+ # Pinned: the install script is fetched at runtime, so an unversioned URL
29
+ # would make every run depend on whatever uv ships that day.
30
+ UV_VERSION: "0.11.4"
31
+
32
+ jobs:
33
+ build:
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ with:
38
+ fetch-depth: 0 # tags needed for uv-dynamic-versioning
39
+
40
+ - name: Install uv
41
+ run: |
42
+ set -euo pipefail
43
+ curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
44
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
45
+
46
+ # --no-sources: build with `tool.uv.sources` disabled, so the build is
47
+ # exercised the way a non-uv consumer's build backend would see it. Without
48
+ # it, a workspace source could paper over a dependency that is unresolvable
49
+ # off this machine. Recommended by
50
+ # https://docs.astral.sh/uv/guides/package/
51
+ - name: Build all packages
52
+ run: |
53
+ rm -rf dist
54
+ for pkg in nooa nooa-cli nooa-memory nooa-bench; do
55
+ uv build --no-sources --package "$pkg" --out-dir dist
56
+ done
57
+ ls -l dist
58
+
59
+ # Guards the two ways a release can silently ship the wrong version:
60
+ # a shallow checkout (no tag reachable -> `.devN`), or a Release created
61
+ # from a commit that is not the tagged one.
62
+ - name: Check built version matches the release tag
63
+ if: github.event_name == 'release'
64
+ env:
65
+ TAG: ${{ github.event.release.tag_name }}
66
+ run: |
67
+ uv run --no-project --with packaging python - <<'PY'
68
+ import os, pathlib, sys
69
+ from packaging.utils import parse_wheel_filename
70
+ from packaging.version import Version
71
+
72
+ expected = Version(os.environ["TAG"].removeprefix("v"))
73
+ wheels = sorted(pathlib.Path("dist").glob("*.whl"))
74
+ assert len(wheels) == 4, f"expected 4 wheels, got {[w.name for w in wheels]}"
75
+ for whl in wheels:
76
+ _, version, _, _ = parse_wheel_filename(whl.name)
77
+ if version.is_devrelease:
78
+ sys.exit(f"{whl.name}: dev version — the tag is not reachable from HEAD")
79
+ if version != expected:
80
+ sys.exit(f"{whl.name}: built {version}, but the tag says {expected}")
81
+ print(f"OK — all four packages built as {expected}")
82
+ PY
83
+
84
+ # Catches a broken wheel before it is on PyPI forever.
85
+ - name: Smoke-test the wheels in a clean environment
86
+ run: |
87
+ uv venv /tmp/smoke --python 3.12
88
+ VIRTUAL_ENV=/tmp/smoke uv pip install \
89
+ dist/nooa-*.whl dist/nooa_cli-*.whl dist/nooa_memory-*.whl dist/nooa_bench-*.whl
90
+ /tmp/smoke/bin/python -c "import nooa, nooa_cli, nooa_memory, nooa_bench; print(nooa.__version__)"
91
+ /tmp/smoke/bin/nooa --version
92
+
93
+ - uses: actions/upload-artifact@v4
94
+ with:
95
+ name: dist
96
+ path: dist/
97
+
98
+ # One job per package, each in its OWN environment (`pypi-<package>`).
99
+ #
100
+ # PyPI keys a *pending* trusted publisher on
101
+ # (owner, repo, workflow filename, environment). Four packages sharing one
102
+ # environment collide: PyPI rejects the 2nd registration with "a pending
103
+ # trusted publisher matching this configuration has already been registered
104
+ # for a different project name", because it cannot tell which project to
105
+ # create on first upload. A distinct environment per package makes each
106
+ # tuple unique. (The constraint applies only while a publisher is pending —
107
+ # but a distinct environment is also what gives per-package approval gates.)
108
+ publish-testpypi:
109
+ needs: build
110
+ if: github.event_name == 'workflow_dispatch'
111
+ runs-on: ubuntu-latest
112
+ strategy:
113
+ fail-fast: false # a partial publish is recoverable; a cancelled one is messier
114
+ matrix:
115
+ package: [nooa, nooa-cli, nooa-memory, nooa-bench]
116
+ environment:
117
+ name: testpypi-${{ matrix.package }}
118
+ url: https://test.pypi.org/p/${{ matrix.package }}
119
+ permissions:
120
+ id-token: write # required for Trusted Publishing
121
+ steps:
122
+ - uses: actions/download-artifact@v4
123
+ with:
124
+ name: dist
125
+ path: dist/
126
+ # Upload only this package's files. Distribution filenames normalise `-`
127
+ # to `_`, and the glob anchors on the `-` before the version, so
128
+ # `nooa-*` matches nooa's own files and never `nooa_cli-*`.
129
+ - name: Isolate this package's artifacts
130
+ env:
131
+ PKG: ${{ matrix.package }}
132
+ run: |
133
+ set -euo pipefail
134
+ mkdir upload
135
+ cp dist/"${PKG//-/_}"-* upload/
136
+ test "$(ls upload | wc -l)" -eq 2 # exactly one wheel + one sdist
137
+ ls -l upload
138
+ - name: Install uv
139
+ run: |
140
+ set -euo pipefail
141
+ curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
142
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
143
+ # --trusted-publishing always: never silently fall back to looking for a
144
+ # token if the OIDC exchange fails. Fail instead, so a broken publisher
145
+ # config surfaces as an error rather than an auth prompt.
146
+ - name: Publish to TestPyPI
147
+ run: |
148
+ uv publish --trusted-publishing always \
149
+ --publish-url https://test.pypi.org/legacy/ \
150
+ --check-url https://test.pypi.org/simple/ \
151
+ upload/*
152
+
153
+ publish-pypi:
154
+ needs: build
155
+ # Real PyPI is reachable ONLY from a published GitHub Release.
156
+ if: github.event_name == 'release'
157
+ runs-on: ubuntu-latest
158
+ strategy:
159
+ fail-fast: false
160
+ matrix:
161
+ package: [nooa, nooa-cli, nooa-memory, nooa-bench]
162
+ environment:
163
+ name: pypi-${{ matrix.package }}
164
+ url: https://pypi.org/p/${{ matrix.package }}
165
+ permissions:
166
+ id-token: write # required for Trusted Publishing
167
+ steps:
168
+ - uses: actions/download-artifact@v4
169
+ with:
170
+ name: dist
171
+ path: dist/
172
+ # Upload only this package's files. Distribution filenames normalise `-`
173
+ # to `_`, and the glob anchors on the `-` before the version, so
174
+ # `nooa-*` matches nooa's own files and never `nooa_cli-*`.
175
+ - name: Isolate this package's artifacts
176
+ env:
177
+ PKG: ${{ matrix.package }}
178
+ run: |
179
+ set -euo pipefail
180
+ mkdir upload
181
+ cp dist/"${PKG//-/_}"-* upload/
182
+ test "$(ls upload | wc -l)" -eq 2 # exactly one wheel + one sdist
183
+ ls -l upload
184
+ - name: Install uv
185
+ run: |
186
+ set -euo pipefail
187
+ curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
188
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
189
+ # --trusted-publishing always: never silently fall back to looking for a
190
+ # token if the OIDC exchange fails. Fail instead, so a broken publisher
191
+ # config surfaces as an error rather than an auth prompt.
192
+ #
193
+ # --check-url makes a re-run idempotent: already-uploaded files are
194
+ # skipped rather than erroring. Matters because `fail-fast: false` means
195
+ # a partial publish is a state you can land in and need to resume from.
196
+ - name: Publish to PyPI
197
+ run: |
198
+ uv publish --trusted-publishing always \
199
+ --check-url https://pypi.org/simple/ \
200
+ upload/*
201
+
202
+ # Attach the built wheels to the GitHub Release so `pip install <url>` and
203
+ # air-gapped consumers get the exact artifacts that went to PyPI.
204
+ attach-to-release:
205
+ needs: publish-pypi
206
+ if: github.event_name == 'release'
207
+ runs-on: ubuntu-latest
208
+ permissions:
209
+ contents: write
210
+ steps:
211
+ - uses: actions/download-artifact@v4
212
+ with:
213
+ name: dist
214
+ path: dist/
215
+ # The tag name goes through `env:`, not `${{ }}` inside the script.
216
+ # GitHub expands `${{ }}` textually *before* bash parses the line, so a
217
+ # tag containing `$(...)` or backticks would execute — double quotes do
218
+ # not help, because the substitution happens before quoting is applied.
219
+ # This job holds `contents: write`. Via env, bash sees the value as data.
220
+ - name: Attach artifacts to the release
221
+ env:
222
+ GH_TOKEN: ${{ github.token }}
223
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
224
+ run: gh release upload "$RELEASE_TAG" dist/* --repo "$GITHUB_REPOSITORY"