heddle-ai 0.9.1__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 (377) hide show
  1. heddle_ai-0.9.1/.github/workflows/ci.yml +68 -0
  2. heddle_ai-0.9.1/.github/workflows/docs.yml +50 -0
  3. heddle_ai-0.9.1/.github/workflows/publish.yml +41 -0
  4. heddle_ai-0.9.1/.gitignore +19 -0
  5. heddle_ai-0.9.1/.python-version +1 -0
  6. heddle_ai-0.9.1/.rumdl.toml +8 -0
  7. heddle_ai-0.9.1/CLAUDE.md +666 -0
  8. heddle_ai-0.9.1/GOVERNANCE.md +110 -0
  9. heddle_ai-0.9.1/LICENSE +379 -0
  10. heddle_ai-0.9.1/PKG-INFO +330 -0
  11. heddle_ai-0.9.1/README.md +240 -0
  12. heddle_ai-0.9.1/configs/councils/example.yaml +40 -0
  13. heddle_ai-0.9.1/configs/mcp/docman.yaml +193 -0
  14. heddle_ai-0.9.1/configs/orchestrators/default.yaml +150 -0
  15. heddle_ai-0.9.1/configs/orchestrators/rag_pipeline.yaml +160 -0
  16. heddle_ai-0.9.1/configs/router_rules.yaml +102 -0
  17. heddle_ai-0.9.1/configs/schedulers/example.yaml +120 -0
  18. heddle_ai-0.9.1/configs/workers/_template.yaml +312 -0
  19. heddle_ai-0.9.1/configs/workers/classifier.yaml +120 -0
  20. heddle_ai-0.9.1/configs/workers/extractor.yaml +132 -0
  21. heddle_ai-0.9.1/configs/workers/qa.yaml +79 -0
  22. heddle_ai-0.9.1/configs/workers/rag_chunker.yaml +118 -0
  23. heddle_ai-0.9.1/configs/workers/rag_ingestor.yaml +110 -0
  24. heddle_ai-0.9.1/configs/workers/rag_mux.yaml +118 -0
  25. heddle_ai-0.9.1/configs/workers/rag_trend_analyzer.yaml +144 -0
  26. heddle_ai-0.9.1/configs/workers/rag_vectorstore.yaml +152 -0
  27. heddle_ai-0.9.1/configs/workers/rag_vectorstore_lance.yaml +80 -0
  28. heddle_ai-0.9.1/configs/workers/reviewer.yaml +106 -0
  29. heddle_ai-0.9.1/configs/workers/summarizer.yaml +136 -0
  30. heddle_ai-0.9.1/configs/workers/translator.yaml +73 -0
  31. heddle_ai-0.9.1/deploy/macos/install.sh +195 -0
  32. heddle_ai-0.9.1/deploy/macos/uninstall.sh +20 -0
  33. heddle_ai-0.9.1/deploy/windows/install.ps1 +182 -0
  34. heddle_ai-0.9.1/deploy/windows/uninstall.ps1 +12 -0
  35. heddle_ai-0.9.1/docker/Dockerfile.orchestrator +27 -0
  36. heddle_ai-0.9.1/docker/Dockerfile.router +26 -0
  37. heddle_ai-0.9.1/docker/Dockerfile.worker +28 -0
  38. heddle_ai-0.9.1/docker/Dockerfile.workshop +21 -0
  39. heddle_ai-0.9.1/docker/entrypoint.sh +17 -0
  40. heddle_ai-0.9.1/docker-compose.yml +74 -0
  41. heddle_ai-0.9.1/docs/APP_DEPLOYMENT.md +152 -0
  42. heddle_ai-0.9.1/docs/ARCHITECTURE.md +503 -0
  43. heddle_ai-0.9.1/docs/BLIND_AUDIT.md +403 -0
  44. heddle_ai-0.9.1/docs/CLI_REFERENCE.md +417 -0
  45. heddle_ai-0.9.1/docs/CODING_GUIDE.md +539 -0
  46. heddle_ai-0.9.1/docs/CONCEPTS.md +176 -0
  47. heddle_ai-0.9.1/docs/CONFIG.md +134 -0
  48. heddle_ai-0.9.1/docs/CONTRIBUTING.md +140 -0
  49. heddle_ai-0.9.1/docs/DESIGN_INVARIANTS.md +560 -0
  50. heddle_ai-0.9.1/docs/GETTING_STARTED.md +282 -0
  51. heddle_ai-0.9.1/docs/KUBERNETES.md +241 -0
  52. heddle_ai-0.9.1/docs/LOCAL_DEPLOYMENT.md +223 -0
  53. heddle_ai-0.9.1/docs/TROUBLESHOOTING.md +551 -0
  54. heddle_ai-0.9.1/docs/WHY_HEDDLE.md +173 -0
  55. heddle_ai-0.9.1/docs/WORKSHOP_TOUR.md +175 -0
  56. heddle_ai-0.9.1/docs/api/bus.md +13 -0
  57. heddle_ai-0.9.1/docs/api/contrib.md +102 -0
  58. heddle_ai-0.9.1/docs/api/core.md +49 -0
  59. heddle_ai-0.9.1/docs/api/mcp.md +33 -0
  60. heddle_ai-0.9.1/docs/api/orchestrator.md +29 -0
  61. heddle_ai-0.9.1/docs/api/router.md +9 -0
  62. heddle_ai-0.9.1/docs/api/scheduler.md +3 -0
  63. heddle_ai-0.9.1/docs/api/tracing.md +3 -0
  64. heddle_ai-0.9.1/docs/api/worker.md +62 -0
  65. heddle_ai-0.9.1/docs/building-workflows.md +1068 -0
  66. heddle_ai-0.9.1/docs/council-howto.md +303 -0
  67. heddle_ai-0.9.1/docs/generate_diagrams.py +729 -0
  68. heddle_ai-0.9.1/docs/images/architecture-overview.svg +117 -0
  69. heddle_ai-0.9.1/docs/images/data-flow.svg +117 -0
  70. heddle_ai-0.9.1/docs/images/developer-workflow.svg +78 -0
  71. heddle_ai-0.9.1/docs/images/nats-topology.svg +53 -0
  72. heddle_ai-0.9.1/docs/images/workshop-ui.svg +280 -0
  73. heddle_ai-0.9.1/docs/index.md +93 -0
  74. heddle_ai-0.9.1/docs/rag-howto.md +594 -0
  75. heddle_ai-0.9.1/docs/tutorials/document-intake.md +471 -0
  76. heddle_ai-0.9.1/docs/tutorials/research-review.md +639 -0
  77. heddle_ai-0.9.1/docs/workers-reference.md +405 -0
  78. heddle_ai-0.9.1/docs/workshop.md +684 -0
  79. heddle_ai-0.9.1/examples/document-intake/README.md +113 -0
  80. heddle_ai-0.9.1/examples/document-intake/phase-1/eval/test_suite.json +80 -0
  81. heddle_ai-0.9.1/examples/document-intake/phase-1/workers/comment_classifier.yaml +121 -0
  82. heddle_ai-0.9.1/examples/document-intake/phase-2/orchestrators/document_intake.yaml +81 -0
  83. heddle_ai-0.9.1/examples/document-intake/phase-2/workers/batch_summarizer.yaml +157 -0
  84. heddle_ai-0.9.1/examples/document-intake/phase-2/workers/comment_classifier.yaml +129 -0
  85. heddle_ai-0.9.1/examples/document-intake/phase-2/workers/csv_reader.yaml +57 -0
  86. heddle_ai-0.9.1/examples/document-intake/phase-2/workers/entity_extractor.yaml +140 -0
  87. heddle_ai-0.9.1/examples/document-intake/phase-3/orchestrators/document_intake_audited.yaml +93 -0
  88. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/batch_summarizer.yaml +157 -0
  89. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/blind_bias_auditor.yaml +144 -0
  90. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/comment_classifier.yaml +129 -0
  91. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/csv_reader.yaml +57 -0
  92. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/entity_extractor.yaml +140 -0
  93. heddle_ai-0.9.1/examples/document-intake/phase-3/workers/fairness_reviewer.yaml +166 -0
  94. heddle_ai-0.9.1/examples/document-intake/processing/__init__.py +1 -0
  95. heddle_ai-0.9.1/examples/document-intake/processing/csv_reader.py +106 -0
  96. heddle_ai-0.9.1/examples/document-intake/sample-data/public_comments.csv +13 -0
  97. heddle_ai-0.9.1/examples/document-intake/sample-data/public_comments.json +74 -0
  98. heddle_ai-0.9.1/examples/rag_demo.py +194 -0
  99. heddle_ai-0.9.1/examples/research-review/README.md +97 -0
  100. heddle_ai-0.9.1/examples/research-review/phase-1/eval/test_suite.json +42 -0
  101. heddle_ai-0.9.1/examples/research-review/phase-1/workers/claim_extractor.yaml +98 -0
  102. heddle_ai-0.9.1/examples/research-review/phase-2/orchestrators/research_review.yaml +78 -0
  103. heddle_ai-0.9.1/examples/research-review/phase-2/workers/claim_extractor.yaml +98 -0
  104. heddle_ai-0.9.1/examples/research-review/phase-2/workers/methodology_reviewer.yaml +116 -0
  105. heddle_ai-0.9.1/examples/research-review/phase-2/workers/review_summarizer.yaml +131 -0
  106. heddle_ai-0.9.1/examples/research-review/phase-3/orchestrators/research_review_blind.yaml +85 -0
  107. heddle_ai-0.9.1/examples/research-review/phase-3/workers/blind_reviewer.yaml +129 -0
  108. heddle_ai-0.9.1/examples/research-review/phase-3/workers/claim_extractor.yaml +98 -0
  109. heddle_ai-0.9.1/examples/research-review/phase-3/workers/methodology_reviewer.yaml +116 -0
  110. heddle_ai-0.9.1/examples/research-review/phase-3/workers/review_synthesizer.yaml +163 -0
  111. heddle_ai-0.9.1/examples/research-review/phase-3/workers/terminology_neutralizer.yaml +110 -0
  112. heddle_ai-0.9.1/examples/research-review/sample-data/abstracts.json +26 -0
  113. heddle_ai-0.9.1/k8s/kustomization.yaml +31 -0
  114. heddle_ai-0.9.1/k8s/namespace.yaml +6 -0
  115. heddle_ai-0.9.1/k8s/nats-deployment.yaml +45 -0
  116. heddle_ai-0.9.1/k8s/orchestrator-deployment.yaml +50 -0
  117. heddle_ai-0.9.1/k8s/redis-deployment.yaml +39 -0
  118. heddle_ai-0.9.1/k8s/router-deployment.yaml +29 -0
  119. heddle_ai-0.9.1/k8s/worker-deployment.yaml +144 -0
  120. heddle_ai-0.9.1/k8s/workshop-deployment.yaml +52 -0
  121. heddle_ai-0.9.1/mkdocs.yml +108 -0
  122. heddle_ai-0.9.1/pyproject.toml +258 -0
  123. heddle_ai-0.9.1/src/heddle/__init__.py +5 -0
  124. heddle_ai-0.9.1/src/heddle/bus/__init__.py +0 -0
  125. heddle_ai-0.9.1/src/heddle/bus/base.py +91 -0
  126. heddle_ai-0.9.1/src/heddle/bus/memory.py +118 -0
  127. heddle_ai-0.9.1/src/heddle/bus/nats_adapter.py +180 -0
  128. heddle_ai-0.9.1/src/heddle/cli/__init__.py +0 -0
  129. heddle_ai-0.9.1/src/heddle/cli/config.py +176 -0
  130. heddle_ai-0.9.1/src/heddle/cli/council.py +249 -0
  131. heddle_ai-0.9.1/src/heddle/cli/main.py +927 -0
  132. heddle_ai-0.9.1/src/heddle/cli/new.py +369 -0
  133. heddle_ai-0.9.1/src/heddle/cli/preflight.py +103 -0
  134. heddle_ai-0.9.1/src/heddle/cli/rag.py +307 -0
  135. heddle_ai-0.9.1/src/heddle/cli/setup.py +268 -0
  136. heddle_ai-0.9.1/src/heddle/cli/validate.py +144 -0
  137. heddle_ai-0.9.1/src/heddle/contrib/__init__.py +1 -0
  138. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/__init__.py +13 -0
  139. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/anthropic.py +104 -0
  140. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/base.py +97 -0
  141. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/manual.py +103 -0
  142. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/ollama.py +102 -0
  143. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/openai.py +106 -0
  144. heddle_ai-0.9.1/src/heddle/contrib/chatbridge/worker.py +126 -0
  145. heddle_ai-0.9.1/src/heddle/contrib/council/__init__.py +34 -0
  146. heddle_ai-0.9.1/src/heddle/contrib/council/config.py +110 -0
  147. heddle_ai-0.9.1/src/heddle/contrib/council/convergence.py +264 -0
  148. heddle_ai-0.9.1/src/heddle/contrib/council/orchestrator.py +404 -0
  149. heddle_ai-0.9.1/src/heddle/contrib/council/protocol.py +254 -0
  150. heddle_ai-0.9.1/src/heddle/contrib/council/runner.py +311 -0
  151. heddle_ai-0.9.1/src/heddle/contrib/council/schemas.py +124 -0
  152. heddle_ai-0.9.1/src/heddle/contrib/council/transcript.py +149 -0
  153. heddle_ai-0.9.1/src/heddle/contrib/docproc/__init__.py +18 -0
  154. heddle_ai-0.9.1/src/heddle/contrib/docproc/contracts.py +26 -0
  155. heddle_ai-0.9.1/src/heddle/contrib/docproc/docling_backend.py +304 -0
  156. heddle_ai-0.9.1/src/heddle/contrib/docproc/markitdown_backend.py +182 -0
  157. heddle_ai-0.9.1/src/heddle/contrib/docproc/smart_extractor.py +154 -0
  158. heddle_ai-0.9.1/src/heddle/contrib/duckdb/__init__.py +17 -0
  159. heddle_ai-0.9.1/src/heddle/contrib/duckdb/query_backend.py +410 -0
  160. heddle_ai-0.9.1/src/heddle/contrib/duckdb/vector_tool.py +202 -0
  161. heddle_ai-0.9.1/src/heddle/contrib/duckdb/view_tool.py +205 -0
  162. heddle_ai-0.9.1/src/heddle/contrib/lancedb/__init__.py +14 -0
  163. heddle_ai-0.9.1/src/heddle/contrib/lancedb/store.py +371 -0
  164. heddle_ai-0.9.1/src/heddle/contrib/lancedb/tool.py +162 -0
  165. heddle_ai-0.9.1/src/heddle/contrib/rag/__init__.py +31 -0
  166. heddle_ai-0.9.1/src/heddle/contrib/rag/analysis/__init__.py +19 -0
  167. heddle_ai-0.9.1/src/heddle/contrib/rag/analysis/llm_analyzers.py +617 -0
  168. heddle_ai-0.9.1/src/heddle/contrib/rag/backends.py +270 -0
  169. heddle_ai-0.9.1/src/heddle/contrib/rag/chunker/__init__.py +9 -0
  170. heddle_ai-0.9.1/src/heddle/contrib/rag/chunker/sentence_chunker.py +220 -0
  171. heddle_ai-0.9.1/src/heddle/contrib/rag/ingestion/__init__.py +9 -0
  172. heddle_ai-0.9.1/src/heddle/contrib/rag/ingestion/base.py +52 -0
  173. heddle_ai-0.9.1/src/heddle/contrib/rag/ingestion/normalize.py +116 -0
  174. heddle_ai-0.9.1/src/heddle/contrib/rag/ingestion/telegram_ingestor.py +261 -0
  175. heddle_ai-0.9.1/src/heddle/contrib/rag/ingestion/telegram_live.py +285 -0
  176. heddle_ai-0.9.1/src/heddle/contrib/rag/mux/__init__.py +5 -0
  177. heddle_ai-0.9.1/src/heddle/contrib/rag/mux/stream_mux.py +191 -0
  178. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/__init__.py +75 -0
  179. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/analysis.py +173 -0
  180. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/chunk.py +40 -0
  181. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/embedding.py +35 -0
  182. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/mux.py +127 -0
  183. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/post.py +105 -0
  184. heddle_ai-0.9.1/src/heddle/contrib/rag/schemas/telegram.py +180 -0
  185. heddle_ai-0.9.1/src/heddle/contrib/rag/tools/__init__.py +27 -0
  186. heddle_ai-0.9.1/src/heddle/contrib/rag/tools/rtl_normalizer.py +241 -0
  187. heddle_ai-0.9.1/src/heddle/contrib/rag/tools/temporal_batcher.py +233 -0
  188. heddle_ai-0.9.1/src/heddle/contrib/rag/vectorstore/__init__.py +6 -0
  189. heddle_ai-0.9.1/src/heddle/contrib/rag/vectorstore/base.py +113 -0
  190. heddle_ai-0.9.1/src/heddle/contrib/rag/vectorstore/duckdb_store.py +357 -0
  191. heddle_ai-0.9.1/src/heddle/contrib/redis/__init__.py +7 -0
  192. heddle_ai-0.9.1/src/heddle/contrib/redis/store.py +46 -0
  193. heddle_ai-0.9.1/src/heddle/core/__init__.py +0 -0
  194. heddle_ai-0.9.1/src/heddle/core/actor.py +236 -0
  195. heddle_ai-0.9.1/src/heddle/core/config.py +696 -0
  196. heddle_ai-0.9.1/src/heddle/core/contracts.py +86 -0
  197. heddle_ai-0.9.1/src/heddle/core/manifest.py +194 -0
  198. heddle_ai-0.9.1/src/heddle/core/messages.py +151 -0
  199. heddle_ai-0.9.1/src/heddle/core/workspace.py +122 -0
  200. heddle_ai-0.9.1/src/heddle/discovery/__init__.py +1 -0
  201. heddle_ai-0.9.1/src/heddle/discovery/mdns.py +142 -0
  202. heddle_ai-0.9.1/src/heddle/mcp/__init__.py +29 -0
  203. heddle_ai-0.9.1/src/heddle/mcp/bridge.py +315 -0
  204. heddle_ai-0.9.1/src/heddle/mcp/config.py +248 -0
  205. heddle_ai-0.9.1/src/heddle/mcp/council_bridge.py +290 -0
  206. heddle_ai-0.9.1/src/heddle/mcp/council_discovery.py +155 -0
  207. heddle_ai-0.9.1/src/heddle/mcp/discovery.py +413 -0
  208. heddle_ai-0.9.1/src/heddle/mcp/resources.py +167 -0
  209. heddle_ai-0.9.1/src/heddle/mcp/server.py +609 -0
  210. heddle_ai-0.9.1/src/heddle/mcp/session_bridge.py +335 -0
  211. heddle_ai-0.9.1/src/heddle/mcp/session_registry.py +46 -0
  212. heddle_ai-0.9.1/src/heddle/mcp/workshop_bridge.py +280 -0
  213. heddle_ai-0.9.1/src/heddle/mcp/workshop_discovery.py +399 -0
  214. heddle_ai-0.9.1/src/heddle/orchestrator/__init__.py +0 -0
  215. heddle_ai-0.9.1/src/heddle/orchestrator/checkpoint.py +190 -0
  216. heddle_ai-0.9.1/src/heddle/orchestrator/decomposer.py +624 -0
  217. heddle_ai-0.9.1/src/heddle/orchestrator/pipeline.py +776 -0
  218. heddle_ai-0.9.1/src/heddle/orchestrator/runner.py +756 -0
  219. heddle_ai-0.9.1/src/heddle/orchestrator/store.py +66 -0
  220. heddle_ai-0.9.1/src/heddle/orchestrator/stream.py +342 -0
  221. heddle_ai-0.9.1/src/heddle/orchestrator/synthesizer.py +467 -0
  222. heddle_ai-0.9.1/src/heddle/router/__init__.py +0 -0
  223. heddle_ai-0.9.1/src/heddle/router/dead_letter.py +250 -0
  224. heddle_ai-0.9.1/src/heddle/router/router.py +349 -0
  225. heddle_ai-0.9.1/src/heddle/scheduler/__init__.py +0 -0
  226. heddle_ai-0.9.1/src/heddle/scheduler/config.py +116 -0
  227. heddle_ai-0.9.1/src/heddle/scheduler/scheduler.py +402 -0
  228. heddle_ai-0.9.1/src/heddle/tracing/__init__.py +45 -0
  229. heddle_ai-0.9.1/src/heddle/tracing/otel.py +222 -0
  230. heddle_ai-0.9.1/src/heddle/tui/__init__.py +10 -0
  231. heddle_ai-0.9.1/src/heddle/tui/app.py +502 -0
  232. heddle_ai-0.9.1/src/heddle/worker/__init__.py +10 -0
  233. heddle_ai-0.9.1/src/heddle/worker/backends.py +531 -0
  234. heddle_ai-0.9.1/src/heddle/worker/base.py +176 -0
  235. heddle_ai-0.9.1/src/heddle/worker/embeddings.py +114 -0
  236. heddle_ai-0.9.1/src/heddle/worker/knowledge.py +264 -0
  237. heddle_ai-0.9.1/src/heddle/worker/processor.py +164 -0
  238. heddle_ai-0.9.1/src/heddle/worker/runner.py +387 -0
  239. heddle_ai-0.9.1/src/heddle/worker/tools.py +140 -0
  240. heddle_ai-0.9.1/src/heddle/workshop/__init__.py +1 -0
  241. heddle_ai-0.9.1/src/heddle/workshop/app.py +646 -0
  242. heddle_ai-0.9.1/src/heddle/workshop/app_manager.py +280 -0
  243. heddle_ai-0.9.1/src/heddle/workshop/config_impact.py +163 -0
  244. heddle_ai-0.9.1/src/heddle/workshop/config_manager.py +215 -0
  245. heddle_ai-0.9.1/src/heddle/workshop/db.py +534 -0
  246. heddle_ai-0.9.1/src/heddle/workshop/eval_runner.py +350 -0
  247. heddle_ai-0.9.1/src/heddle/workshop/pipeline_editor.py +186 -0
  248. heddle_ai-0.9.1/src/heddle/workshop/rag_manager.py +167 -0
  249. heddle_ai-0.9.1/src/heddle/workshop/static/workshop.css +748 -0
  250. heddle_ai-0.9.1/src/heddle/workshop/templates/apps/detail.html +92 -0
  251. heddle_ai-0.9.1/src/heddle/workshop/templates/apps/list.html +66 -0
  252. heddle_ai-0.9.1/src/heddle/workshop/templates/base.html +79 -0
  253. heddle_ai-0.9.1/src/heddle/workshop/templates/dead_letters.html +50 -0
  254. heddle_ai-0.9.1/src/heddle/workshop/templates/partials/impact_panel.html +56 -0
  255. heddle_ai-0.9.1/src/heddle/workshop/templates/partials/rag_search_result.html +30 -0
  256. heddle_ai-0.9.1/src/heddle/workshop/templates/partials/rag_stats.html +24 -0
  257. heddle_ai-0.9.1/src/heddle/workshop/templates/partials/test_result.html +59 -0
  258. heddle_ai-0.9.1/src/heddle/workshop/templates/partials/validation_errors.html +9 -0
  259. heddle_ai-0.9.1/src/heddle/workshop/templates/pipelines/editor.html +120 -0
  260. heddle_ai-0.9.1/src/heddle/workshop/templates/pipelines/list.html +34 -0
  261. heddle_ai-0.9.1/src/heddle/workshop/templates/rag/channels.html +71 -0
  262. heddle_ai-0.9.1/src/heddle/workshop/templates/rag/dashboard.html +55 -0
  263. heddle_ai-0.9.1/src/heddle/workshop/templates/rag/search.html +43 -0
  264. heddle_ai-0.9.1/src/heddle/workshop/templates/workers/detail.html +69 -0
  265. heddle_ai-0.9.1/src/heddle/workshop/templates/workers/eval.html +86 -0
  266. heddle_ai-0.9.1/src/heddle/workshop/templates/workers/eval_detail.html +70 -0
  267. heddle_ai-0.9.1/src/heddle/workshop/templates/workers/list.html +60 -0
  268. heddle_ai-0.9.1/src/heddle/workshop/templates/workers/test.html +48 -0
  269. heddle_ai-0.9.1/src/heddle/workshop/test_runner.py +211 -0
  270. heddle_ai-0.9.1/tests/__init__.py +0 -0
  271. heddle_ai-0.9.1/tests/conftest.py +32 -0
  272. heddle_ai-0.9.1/tests/contrib/__init__.py +0 -0
  273. heddle_ai-0.9.1/tests/contrib/chatbridge/__init__.py +0 -0
  274. heddle_ai-0.9.1/tests/contrib/chatbridge/test_anthropic.py +85 -0
  275. heddle_ai-0.9.1/tests/contrib/chatbridge/test_base.py +43 -0
  276. heddle_ai-0.9.1/tests/contrib/chatbridge/test_manual.py +86 -0
  277. heddle_ai-0.9.1/tests/contrib/chatbridge/test_ollama.py +53 -0
  278. heddle_ai-0.9.1/tests/contrib/chatbridge/test_openai.py +66 -0
  279. heddle_ai-0.9.1/tests/contrib/chatbridge/test_worker.py +90 -0
  280. heddle_ai-0.9.1/tests/contrib/council/__init__.py +0 -0
  281. heddle_ai-0.9.1/tests/contrib/council/test_config.py +129 -0
  282. heddle_ai-0.9.1/tests/contrib/council/test_convergence.py +177 -0
  283. heddle_ai-0.9.1/tests/contrib/council/test_orchestrator.py +316 -0
  284. heddle_ai-0.9.1/tests/contrib/council/test_protocol.py +140 -0
  285. heddle_ai-0.9.1/tests/contrib/council/test_runner.py +191 -0
  286. heddle_ai-0.9.1/tests/contrib/council/test_schemas.py +138 -0
  287. heddle_ai-0.9.1/tests/contrib/council/test_transcript.py +141 -0
  288. heddle_ai-0.9.1/tests/contrib/docproc/__init__.py +0 -0
  289. heddle_ai-0.9.1/tests/contrib/docproc/test_docproc.py +278 -0
  290. heddle_ai-0.9.1/tests/contrib/lancedb/__init__.py +0 -0
  291. heddle_ai-0.9.1/tests/contrib/lancedb/test_lancedb_store.py +171 -0
  292. heddle_ai-0.9.1/tests/contrib/rag/__init__.py +0 -0
  293. heddle_ai-0.9.1/tests/contrib/rag/test_abstractions.py +109 -0
  294. heddle_ai-0.9.1/tests/contrib/rag/test_backends.py +280 -0
  295. heddle_ai-0.9.1/tests/contrib/rag/test_chunker.py +105 -0
  296. heddle_ai-0.9.1/tests/contrib/rag/test_duckdb_vectorstore.py +291 -0
  297. heddle_ai-0.9.1/tests/contrib/rag/test_ingestion.py +196 -0
  298. heddle_ai-0.9.1/tests/contrib/rag/test_llm_analyzers.py +559 -0
  299. heddle_ai-0.9.1/tests/contrib/rag/test_mux.py +123 -0
  300. heddle_ai-0.9.1/tests/contrib/rag/test_schemas.py +332 -0
  301. heddle_ai-0.9.1/tests/contrib/rag/test_telegram_live.py +165 -0
  302. heddle_ai-0.9.1/tests/contrib/rag/test_tools.py +154 -0
  303. heddle_ai-0.9.1/tests/test_actor.py +380 -0
  304. heddle_ai-0.9.1/tests/test_app_manager.py +424 -0
  305. heddle_ai-0.9.1/tests/test_app_manifest.py +177 -0
  306. heddle_ai-0.9.1/tests/test_backends.py +759 -0
  307. heddle_ai-0.9.1/tests/test_bus_memory.py +254 -0
  308. heddle_ai-0.9.1/tests/test_checkpoint.py +498 -0
  309. heddle_ai-0.9.1/tests/test_cli.py +1451 -0
  310. heddle_ai-0.9.1/tests/test_cli_config.py +215 -0
  311. heddle_ai-0.9.1/tests/test_cli_council.py +335 -0
  312. heddle_ai-0.9.1/tests/test_cli_new.py +328 -0
  313. heddle_ai-0.9.1/tests/test_cli_rag.py +382 -0
  314. heddle_ai-0.9.1/tests/test_cli_setup.py +186 -0
  315. heddle_ai-0.9.1/tests/test_cli_validate.py +232 -0
  316. heddle_ai-0.9.1/tests/test_config_impact.py +349 -0
  317. heddle_ai-0.9.1/tests/test_config_shipped.py +194 -0
  318. heddle_ai-0.9.1/tests/test_config_validation.py +199 -0
  319. heddle_ai-0.9.1/tests/test_config_validation_extended.py +591 -0
  320. heddle_ai-0.9.1/tests/test_contracts.py +79 -0
  321. heddle_ai-0.9.1/tests/test_contrib_duckdb_query.py +532 -0
  322. heddle_ai-0.9.1/tests/test_contrib_duckdb_vector.py +226 -0
  323. heddle_ai-0.9.1/tests/test_contrib_duckdb_view.py +225 -0
  324. heddle_ai-0.9.1/tests/test_dead_letter.py +515 -0
  325. heddle_ai-0.9.1/tests/test_decomposer.py +399 -0
  326. heddle_ai-0.9.1/tests/test_deepeval_worker.py +103 -0
  327. heddle_ai-0.9.1/tests/test_e2e_advanced.py +847 -0
  328. heddle_ai-0.9.1/tests/test_e2e_operations.py +625 -0
  329. heddle_ai-0.9.1/tests/test_embeddings.py +138 -0
  330. heddle_ai-0.9.1/tests/test_extract_json.py +57 -0
  331. heddle_ai-0.9.1/tests/test_extract_json_extended.py +243 -0
  332. heddle_ai-0.9.1/tests/test_integration.py +129 -0
  333. heddle_ai-0.9.1/tests/test_knowledge_silos.py +553 -0
  334. heddle_ai-0.9.1/tests/test_mcp_bridge.py +410 -0
  335. heddle_ai-0.9.1/tests/test_mcp_config.py +428 -0
  336. heddle_ai-0.9.1/tests/test_mcp_council_bridge.py +121 -0
  337. heddle_ai-0.9.1/tests/test_mcp_council_discovery.py +52 -0
  338. heddle_ai-0.9.1/tests/test_mcp_discovery.py +692 -0
  339. heddle_ai-0.9.1/tests/test_mcp_resources.py +171 -0
  340. heddle_ai-0.9.1/tests/test_mcp_server.py +1394 -0
  341. heddle_ai-0.9.1/tests/test_mcp_session_bridge.py +261 -0
  342. heddle_ai-0.9.1/tests/test_mcp_session_registry.py +85 -0
  343. heddle_ai-0.9.1/tests/test_mcp_workshop_bridge.py +576 -0
  344. heddle_ai-0.9.1/tests/test_mcp_workshop_discovery.py +125 -0
  345. heddle_ai-0.9.1/tests/test_mdns.py +108 -0
  346. heddle_ai-0.9.1/tests/test_messages.py +122 -0
  347. heddle_ai-0.9.1/tests/test_nats_adapter.py +274 -0
  348. heddle_ai-0.9.1/tests/test_orchestrator.py +1017 -0
  349. heddle_ai-0.9.1/tests/test_pipeline.py +1621 -0
  350. heddle_ai-0.9.1/tests/test_preflight.py +137 -0
  351. heddle_ai-0.9.1/tests/test_processor_worker.py +188 -0
  352. heddle_ai-0.9.1/tests/test_redis_store.py +90 -0
  353. heddle_ai-0.9.1/tests/test_reload.py +210 -0
  354. heddle_ai-0.9.1/tests/test_result_stream.py +578 -0
  355. heddle_ai-0.9.1/tests/test_router.py +323 -0
  356. heddle_ai-0.9.1/tests/test_scheduler.py +722 -0
  357. heddle_ai-0.9.1/tests/test_scheduler_config.py +253 -0
  358. heddle_ai-0.9.1/tests/test_scheduler_expansion.py +249 -0
  359. heddle_ai-0.9.1/tests/test_schema_ref.py +162 -0
  360. heddle_ai-0.9.1/tests/test_serialize_writes.py +78 -0
  361. heddle_ai-0.9.1/tests/test_store.py +84 -0
  362. heddle_ai-0.9.1/tests/test_synthesizer.py +293 -0
  363. heddle_ai-0.9.1/tests/test_task_worker.py +187 -0
  364. heddle_ai-0.9.1/tests/test_tool_use.py +377 -0
  365. heddle_ai-0.9.1/tests/test_tools.py +179 -0
  366. heddle_ai-0.9.1/tests/test_tracing.py +550 -0
  367. heddle_ai-0.9.1/tests/test_tui.py +245 -0
  368. heddle_ai-0.9.1/tests/test_worker.py +295 -0
  369. heddle_ai-0.9.1/tests/test_workshop_app.py +1018 -0
  370. heddle_ai-0.9.1/tests/test_workshop_config.py +224 -0
  371. heddle_ai-0.9.1/tests/test_workshop_db.py +295 -0
  372. heddle_ai-0.9.1/tests/test_workshop_eval.py +440 -0
  373. heddle_ai-0.9.1/tests/test_workshop_pipeline_editor.py +262 -0
  374. heddle_ai-0.9.1/tests/test_workshop_rag.py +164 -0
  375. heddle_ai-0.9.1/tests/test_workshop_runner.py +469 -0
  376. heddle_ai-0.9.1/tests/test_workspace.py +100 -0
  377. heddle_ai-0.9.1/uv.lock +5533 -0
@@ -0,0 +1,68 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ lint-md:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: rvben/rumdl@v0
18
+ with:
19
+ report-type: annotations
20
+
21
+ lint:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: astral-sh/setup-uv@v5
26
+ - run: uv sync --extra dev
27
+ - name: Ruff lint (src + tests)
28
+ run: uv run ruff check src/ tests/
29
+ - name: Ruff format check
30
+ run: uv run ruff format --check src/ tests/
31
+
32
+ test:
33
+ runs-on: ubuntu-latest
34
+ strategy:
35
+ matrix:
36
+ python-version: ["3.11", "3.12", "3.13"]
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+
40
+ - uses: astral-sh/setup-uv@v5
41
+ with:
42
+ python-version: ${{ matrix.python-version }}
43
+
44
+ - name: Install dependencies
45
+ run: uv sync --all-extras
46
+
47
+ - name: Run tests with coverage
48
+ run: |
49
+ uv run pytest tests/ -v -m "not integration and not deepeval" \
50
+ --cov --cov-report=term-missing --cov-report=xml
51
+
52
+ - name: Upload coverage to Codecov
53
+ if: matrix.python-version == '3.12'
54
+ uses: codecov/codecov-action@v5
55
+ with:
56
+ token: ${{ secrets.CODECOV_TOKEN }}
57
+ files: coverage.xml
58
+ fail_ci_if_error: false
59
+
60
+ docs:
61
+ runs-on: ubuntu-latest
62
+ steps:
63
+ - uses: actions/checkout@v4
64
+ - uses: astral-sh/setup-uv@v5
65
+ - run: uv sync --extra docs
66
+ - name: Build API documentation
67
+ run: uv run mkdocs build --strict
68
+
@@ -0,0 +1,50 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: "pages"
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@v5
30
+
31
+ - name: Install dependencies
32
+ run: uv sync --extra docs
33
+
34
+ - name: Build docs
35
+ run: uv run mkdocs build --strict
36
+
37
+ - name: Upload artifact
38
+ uses: actions/upload-pages-artifact@v3
39
+ with:
40
+ path: site
41
+
42
+ deploy:
43
+ environment:
44
+ name: github-pages
45
+ url: ${{ github.pages.url }}
46
+ runs-on: ubuntu-latest
47
+ needs: build
48
+ steps:
49
+ - name: Deploy to GitHub Pages
50
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,41 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ id-token: write # Trusted publishing (no API token needed)
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: astral-sh/setup-uv@v5
17
+ with:
18
+ enable-cache: true
19
+
20
+ - name: Build package
21
+ run: uv build
22
+
23
+ - name: Upload build artifacts
24
+ uses: actions/upload-artifact@v4
25
+ with:
26
+ name: dist
27
+ path: dist/
28
+
29
+ publish:
30
+ needs: build
31
+ runs-on: ubuntu-latest
32
+ environment: pypi
33
+ steps:
34
+ - name: Download build artifacts
35
+ uses: actions/download-artifact@v4
36
+ with:
37
+ name: dist
38
+ path: dist/
39
+
40
+ - name: Publish to PyPI
41
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,19 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.egg-info/
4
+ .venv/
5
+ .pytest_cache/
6
+ .claude/
7
+ dist/
8
+ build/
9
+ .DS_Store
10
+ .coverage
11
+ coverage.json
12
+ coverage.xml
13
+ htmlcov/
14
+
15
+ # MkDocs build output
16
+ site/
17
+
18
+ # Environment
19
+ .env
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,8 @@
1
+ # rumdl configuration — Heddle
2
+
3
+ [global]
4
+ # MD013: Line length — 80 chars is too restrictive for prose documentation
5
+ # MD036: Emphasis as heading — false positive on subtitle lines
6
+ # MD042: Empty link — used for status badges with no target URL
7
+ # MD057: Cross-repo relative links unresolvable in CI (repos checked out in isolation)
8
+ disable = ["MD013", "MD036", "MD042", "MD057"]