cairndev 0.1.3__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 (683) hide show
  1. cairndev-0.1.3/.dockerignore +23 -0
  2. cairndev-0.1.3/.editorconfig +12 -0
  3. cairndev-0.1.3/.gitignore +100 -0
  4. cairndev-0.1.3/.semgrep.yml +36 -0
  5. cairndev-0.1.3/CHANGELOG.md +51 -0
  6. cairndev-0.1.3/CITATION.cff +9 -0
  7. cairndev-0.1.3/CODE_OF_CONDUCT.md +7 -0
  8. cairndev-0.1.3/CONTRIBUTING.md +218 -0
  9. cairndev-0.1.3/Dockerfile.dataflow-task +83 -0
  10. cairndev-0.1.3/Dockerfile.engine +339 -0
  11. cairndev-0.1.3/GOVERNANCE.md +7 -0
  12. cairndev-0.1.3/LICENSE +202 -0
  13. cairndev-0.1.3/NOTICE +19 -0
  14. cairndev-0.1.3/PKG-INFO +275 -0
  15. cairndev-0.1.3/README.md +143 -0
  16. cairndev-0.1.3/SECURITY.md +83 -0
  17. cairndev-0.1.3/SUPPORT.md +6 -0
  18. cairndev-0.1.3/THIRD_PARTY_NOTICES.md +197 -0
  19. cairndev-0.1.3/assets/logo.svg +9 -0
  20. cairndev-0.1.3/deploy/light/.env.example +46 -0
  21. cairndev-0.1.3/deploy/light/.env.infisical.example +10 -0
  22. cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/capabilities/artifact.promote.json +9 -0
  23. cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/contracts.toml +29 -0
  24. cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.configuration.json +7 -0
  25. cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.input.json +22 -0
  26. cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.output.json +18 -0
  27. cairndev-0.1.3/packages/cairn-contracts-artifact/pyproject.toml +19 -0
  28. cairndev-0.1.3/packages/cairn-contracts-audit/definitions/capabilities/audit.sink.json +9 -0
  29. cairndev-0.1.3/packages/cairn-contracts-audit/definitions/contracts.toml +29 -0
  30. cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.configuration.json +7 -0
  31. cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.input.json +31 -0
  32. cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.output.json +15 -0
  33. cairndev-0.1.3/packages/cairn-contracts-audit/pyproject.toml +19 -0
  34. cairndev-0.1.3/packages/cairn-contracts-data/definitions/capabilities/data.profile.json +9 -0
  35. cairndev-0.1.3/packages/cairn-contracts-data/definitions/contracts.toml +29 -0
  36. cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.configuration.json +7 -0
  37. cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.input.json +96 -0
  38. cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.output.json +37 -0
  39. cairndev-0.1.3/packages/cairn-contracts-data/pyproject.toml +19 -0
  40. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/capabilities/dataflow.run.json +9 -0
  41. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/capabilities/ml.run.json +9 -0
  42. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/contracts.toml +53 -0
  43. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.configuration.json +7 -0
  44. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.input.json +35 -0
  45. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.output.json +16 -0
  46. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.configuration.json +7 -0
  47. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.input.json +40 -0
  48. cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.output.json +16 -0
  49. cairndev-0.1.3/packages/cairn-contracts-dataflow/pyproject.toml +19 -0
  50. cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/capabilities/mcp.call.json +9 -0
  51. cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/contracts.toml +29 -0
  52. cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.configuration.json +7 -0
  53. cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.input.json +22 -0
  54. cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.output.json +13 -0
  55. cairndev-0.1.3/packages/cairn-contracts-mcp/pyproject.toml +19 -0
  56. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/capabilities/memory.search.json +9 -0
  57. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/capabilities/memory.write.json +9 -0
  58. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/contracts.toml +53 -0
  59. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.configuration.json +7 -0
  60. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.input.json +30 -0
  61. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.output.json +25 -0
  62. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.configuration.json +7 -0
  63. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.input.json +28 -0
  64. cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.output.json +13 -0
  65. cairndev-0.1.3/packages/cairn-contracts-memory/pyproject.toml +19 -0
  66. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.dispatch.json +9 -0
  67. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.propose.json +9 -0
  68. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.threshold.json +9 -0
  69. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/contracts.toml +77 -0
  70. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.configuration.json +7 -0
  71. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.input.json +44 -0
  72. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.output.json +32 -0
  73. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.configuration.json +7 -0
  74. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.input.json +27 -0
  75. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.output.json +19 -0
  76. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.configuration.json +7 -0
  77. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.input.json +45 -0
  78. cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.output.json +24 -0
  79. cairndev-0.1.3/packages/cairn-contracts-monitor/pyproject.toml +19 -0
  80. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.fetch.json +9 -0
  81. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.rerank.json +9 -0
  82. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.search.json +9 -0
  83. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/contracts.toml +77 -0
  84. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.configuration.json +7 -0
  85. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.input.json +16 -0
  86. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.output.json +22 -0
  87. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.configuration.json +7 -0
  88. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.input.json +26 -0
  89. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.output.json +29 -0
  90. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.configuration.json +7 -0
  91. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.input.json +30 -0
  92. cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.output.json +25 -0
  93. cairndev-0.1.3/packages/cairn-contracts-rag/pyproject.toml +19 -0
  94. cairndev-0.1.3/packages/cairn-contracts-redact/definitions/capabilities/redact.text.json +9 -0
  95. cairndev-0.1.3/packages/cairn-contracts-redact/definitions/contracts.toml +29 -0
  96. cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.configuration.json +7 -0
  97. cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.input.json +8 -0
  98. cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.output.json +19 -0
  99. cairndev-0.1.3/packages/cairn-contracts-redact/pyproject.toml +19 -0
  100. cairndev-0.1.3/packages/cairn-contracts-remote/definitions/capabilities/remote.exec.json +9 -0
  101. cairndev-0.1.3/packages/cairn-contracts-remote/definitions/contracts.toml +29 -0
  102. cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.configuration.json +7 -0
  103. cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.input.json +39 -0
  104. cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.output.json +26 -0
  105. cairndev-0.1.3/packages/cairn-contracts-remote/pyproject.toml +19 -0
  106. cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/capabilities/secrets.store.json +9 -0
  107. cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/contracts.toml +29 -0
  108. cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.configuration.json +7 -0
  109. cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.input.json +10 -0
  110. cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.output.json +14 -0
  111. cairndev-0.1.3/packages/cairn-contracts-secrets/pyproject.toml +19 -0
  112. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/capabilities/storage.get.json +9 -0
  113. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/capabilities/storage.put.json +9 -0
  114. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/contracts.toml +53 -0
  115. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.configuration.json +7 -0
  116. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.input.json +33 -0
  117. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.output.json +20 -0
  118. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.configuration.json +7 -0
  119. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.input.json +34 -0
  120. cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.output.json +16 -0
  121. cairndev-0.1.3/packages/cairn-contracts-storage/pyproject.toml +19 -0
  122. cairndev-0.1.3/packages/cairn-contracts-train/definitions/capabilities/train.eval_loss.json +10 -0
  123. cairndev-0.1.3/packages/cairn-contracts-train/definitions/capabilities/train.finetune.json +10 -0
  124. cairndev-0.1.3/packages/cairn-contracts-train/definitions/contracts.toml +65 -0
  125. cairndev-0.1.3/packages/cairn-contracts-train/definitions/reports/train.eval_loss.report.json +6 -0
  126. cairndev-0.1.3/packages/cairn-contracts-train/definitions/reports/train.finetune.report.json +10 -0
  127. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.configuration.json +7 -0
  128. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.input.json +30 -0
  129. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.output.json +11 -0
  130. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.configuration.json +16 -0
  131. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.input.json +44 -0
  132. cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.output.json +22 -0
  133. cairndev-0.1.3/packages/cairn-contracts-train/pyproject.toml +19 -0
  134. cairndev-0.1.3/packages/cairn-operator-artifact-local/CHANGELOG.md +11 -0
  135. cairndev-0.1.3/packages/cairn-operator-artifact-local/docs/.gitkeep +0 -0
  136. cairndev-0.1.3/packages/cairn-operator-artifact-local/examples/.gitkeep +0 -0
  137. cairndev-0.1.3/packages/cairn-operator-artifact-local/pack.toml +68 -0
  138. cairndev-0.1.3/packages/cairn-operator-artifact-local/pyproject.toml +37 -0
  139. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/__init__.py +17 -0
  140. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/_fs.py +71 -0
  141. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/__init__.py +0 -0
  142. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/get.py +107 -0
  143. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/put.py +99 -0
  144. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/py.typed +0 -0
  145. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/__init__.py +0 -0
  146. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/get.py +53 -0
  147. cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/put.py +54 -0
  148. cairndev-0.1.3/packages/cairn-operator-audit-store/pack.toml +40 -0
  149. cairndev-0.1.3/packages/cairn-operator-audit-store/pyproject.toml +26 -0
  150. cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/__init__.py +0 -0
  151. cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/operators/__init__.py +0 -0
  152. cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/operators/audit_store.py +150 -0
  153. cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/schemas/__init__.py +0 -0
  154. cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/schemas/audit_store.py +21 -0
  155. cairndev-0.1.3/packages/cairn-operator-data-profile/pack.toml +36 -0
  156. cairndev-0.1.3/packages/cairn-operator-data-profile/pyproject.toml +37 -0
  157. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/__init__.py +0 -0
  158. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/operators/__init__.py +0 -0
  159. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/operators/profile.py +42 -0
  160. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/py.typed +0 -0
  161. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/schemas/__init__.py +0 -0
  162. cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/schemas/profile.py +26 -0
  163. cairndev-0.1.3/packages/cairn-operator-dataflow/pack.toml +72 -0
  164. cairndev-0.1.3/packages/cairn-operator-dataflow/pyproject.toml +49 -0
  165. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/__init__.py +1 -0
  166. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/__init__.py +1 -0
  167. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/entry.py +104 -0
  168. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/runner.py +13 -0
  169. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engines.py +215 -0
  170. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engines_ssh.py +466 -0
  171. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/__init__.py +1 -0
  172. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/promote.py +76 -0
  173. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/run.py +164 -0
  174. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/run_ml.py +113 -0
  175. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/__init__.py +1 -0
  176. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/promote.py +22 -0
  177. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/run.py +49 -0
  178. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/run_ml.py +49 -0
  179. cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/stages.py +19 -0
  180. cairndev-0.1.3/packages/cairn-operator-mcp/CHANGELOG.md +8 -0
  181. cairndev-0.1.3/packages/cairn-operator-mcp/docs/.gitkeep +0 -0
  182. cairndev-0.1.3/packages/cairn-operator-mcp/examples/.gitkeep +0 -0
  183. cairndev-0.1.3/packages/cairn-operator-mcp/pack.toml +52 -0
  184. cairndev-0.1.3/packages/cairn-operator-mcp/pyproject.toml +28 -0
  185. cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/__init__.py +13 -0
  186. cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/operators/__init__.py +0 -0
  187. cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/operators/call.py +94 -0
  188. cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/schemas/__init__.py +0 -0
  189. cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/schemas/call.py +52 -0
  190. cairndev-0.1.3/packages/cairn-operator-memory-local/CHANGELOG.md +9 -0
  191. cairndev-0.1.3/packages/cairn-operator-memory-local/docs/.gitkeep +0 -0
  192. cairndev-0.1.3/packages/cairn-operator-memory-local/examples/.gitkeep +0 -0
  193. cairndev-0.1.3/packages/cairn-operator-memory-local/pack.toml +71 -0
  194. cairndev-0.1.3/packages/cairn-operator-memory-local/pyproject.toml +40 -0
  195. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/__init__.py +18 -0
  196. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/__init__.py +0 -0
  197. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/search.py +128 -0
  198. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/write.py +83 -0
  199. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/py.typed +0 -0
  200. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/__init__.py +0 -0
  201. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/search.py +55 -0
  202. cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/write.py +50 -0
  203. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/pack.toml +74 -0
  204. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/pyproject.toml +41 -0
  205. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/__init__.py +0 -0
  206. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/__init__.py +0 -0
  207. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/dispatch.py +78 -0
  208. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/propose.py +46 -0
  209. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/threshold.py +106 -0
  210. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/py.typed +0 -0
  211. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/__init__.py +2 -0
  212. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/dispatch.py +23 -0
  213. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/propose.py +23 -0
  214. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/threshold.py +41 -0
  215. cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/source_guard.py +126 -0
  216. cairndev-0.1.3/packages/cairn-operator-rag-local/CHANGELOG.md +10 -0
  217. cairndev-0.1.3/packages/cairn-operator-rag-local/docs/.gitkeep +0 -0
  218. cairndev-0.1.3/packages/cairn-operator-rag-local/examples/.gitkeep +0 -0
  219. cairndev-0.1.3/packages/cairn-operator-rag-local/pack.toml +70 -0
  220. cairndev-0.1.3/packages/cairn-operator-rag-local/pyproject.toml +39 -0
  221. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/__init__.py +17 -0
  222. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/__init__.py +0 -0
  223. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/fetch.py +107 -0
  224. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/search.py +124 -0
  225. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/py.typed +0 -0
  226. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/__init__.py +0 -0
  227. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/fetch.py +45 -0
  228. cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/search.py +55 -0
  229. cairndev-0.1.3/packages/cairn-operator-rag-rerank/pack.toml +46 -0
  230. cairndev-0.1.3/packages/cairn-operator-rag-rerank/pyproject.toml +43 -0
  231. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/__init__.py +0 -0
  232. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/operators/__init__.py +0 -0
  233. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/operators/rerank.py +125 -0
  234. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/py.typed +0 -0
  235. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/schemas/__init__.py +0 -0
  236. cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/schemas/rerank.py +33 -0
  237. cairndev-0.1.3/packages/cairn-operator-redact-regex/pack.toml +38 -0
  238. cairndev-0.1.3/packages/cairn-operator-redact-regex/pyproject.toml +37 -0
  239. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/__init__.py +0 -0
  240. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/operators/__init__.py +0 -0
  241. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/operators/redact_text.py +119 -0
  242. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/py.typed +0 -0
  243. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/schemas/__init__.py +0 -0
  244. cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/schemas/redact_text.py +16 -0
  245. cairndev-0.1.3/packages/cairn-operator-remote/pack.toml +31 -0
  246. cairndev-0.1.3/packages/cairn-operator-remote/pyproject.toml +38 -0
  247. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/__init__.py +1 -0
  248. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/operators/__init__.py +0 -0
  249. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/operators/exec.py +403 -0
  250. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/py.typed +0 -0
  251. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/schemas/__init__.py +0 -0
  252. cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/schemas/exec.py +34 -0
  253. cairndev-0.1.3/packages/cairn-operator-secrets-env/pack.toml +37 -0
  254. cairndev-0.1.3/packages/cairn-operator-secrets-env/pyproject.toml +34 -0
  255. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/__init__.py +0 -0
  256. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/operators/__init__.py +0 -0
  257. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/operators/env.py +60 -0
  258. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/py.typed +0 -0
  259. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/schemas/__init__.py +0 -0
  260. cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/schemas/env.py +17 -0
  261. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/CHANGELOG.md +17 -0
  262. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/pack.toml +51 -0
  263. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/pyproject.toml +40 -0
  264. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/__init__.py +0 -0
  265. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/_infisical.py +92 -0
  266. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/operators/__init__.py +0 -0
  267. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/operators/infisical.py +91 -0
  268. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/py.typed +0 -0
  269. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/schemas/__init__.py +0 -0
  270. cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/schemas/infisical.py +17 -0
  271. cairndev-0.1.3/packages/cairn-operator-train-local/CHANGELOG.md +10 -0
  272. cairndev-0.1.3/packages/cairn-operator-train-local/pack.toml +60 -0
  273. cairndev-0.1.3/packages/cairn-operator-train-local/pyproject.toml +49 -0
  274. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/__init__.py +0 -0
  275. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/finetune.py +244 -0
  276. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/__init__.py +0 -0
  277. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/eval_loss.py +46 -0
  278. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/lora.py +75 -0
  279. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/py.typed +0 -0
  280. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/schemas/__init__.py +0 -0
  281. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/schemas/train.py +71 -0
  282. cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/stages.py +66 -0
  283. cairndev-0.1.3/pyproject.toml +489 -0
  284. cairndev-0.1.3/renovate.json +17 -0
  285. cairndev-0.1.3/scripts/check_change_scope.py +223 -0
  286. cairndev-0.1.3/scripts/check_folded_wheels.py +442 -0
  287. cairndev-0.1.3/scripts/check_public_set.py +126 -0
  288. cairndev-0.1.3/scripts/oss/feature_proof.sh +81 -0
  289. cairndev-0.1.3/scripts/oss/proof_seed.py +187 -0
  290. cairndev-0.1.3/src/cairn/cli/__init__.py +10 -0
  291. cairndev-0.1.3/src/cairn/cli/commands/__init__.py +9 -0
  292. cairndev-0.1.3/src/cairn/cli/commands/compute.py +149 -0
  293. cairndev-0.1.3/src/cairn/cli/commands/config.py +50 -0
  294. cairndev-0.1.3/src/cairn/cli/commands/connect.py +533 -0
  295. cairndev-0.1.3/src/cairn/cli/commands/demo.py +86 -0
  296. cairndev-0.1.3/src/cairn/cli/commands/deploy.py +99 -0
  297. cairndev-0.1.3/src/cairn/cli/commands/dev.py +191 -0
  298. cairndev-0.1.3/src/cairn/cli/commands/doctor.py +1340 -0
  299. cairndev-0.1.3/src/cairn/cli/commands/export.py +286 -0
  300. cairndev-0.1.3/src/cairn/cli/commands/flow.py +189 -0
  301. cairndev-0.1.3/src/cairn/cli/commands/gate.py +213 -0
  302. cairndev-0.1.3/src/cairn/cli/commands/init.py +979 -0
  303. cairndev-0.1.3/src/cairn/cli/commands/lineage.py +235 -0
  304. cairndev-0.1.3/src/cairn/cli/commands/lock.py +212 -0
  305. cairndev-0.1.3/src/cairn/cli/commands/ls.py +424 -0
  306. cairndev-0.1.3/src/cairn/cli/commands/pack.py +616 -0
  307. cairndev-0.1.3/src/cairn/cli/commands/pipeline.py +517 -0
  308. cairndev-0.1.3/src/cairn/cli/commands/remote.py +1215 -0
  309. cairndev-0.1.3/src/cairn/cli/commands/replay.py +226 -0
  310. cairndev-0.1.3/src/cairn/cli/commands/run.py +1057 -0
  311. cairndev-0.1.3/src/cairn/cli/commands/test.py +52 -0
  312. cairndev-0.1.3/src/cairn/cli/commands/validate.py +180 -0
  313. cairndev-0.1.3/src/cairn/cli/commands/visualize.py +64 -0
  314. cairndev-0.1.3/src/cairn/cli/commands/worker.py +192 -0
  315. cairndev-0.1.3/src/cairn/cli/main.py +169 -0
  316. cairndev-0.1.3/src/cairn/cli/providers.py +142 -0
  317. cairndev-0.1.3/src/cairn/cli/runs/__init__.py +51 -0
  318. cairndev-0.1.3/src/cairn/cli/runs/paths.py +86 -0
  319. cairndev-0.1.3/src/cairn/cli/runs/reader.py +81 -0
  320. cairndev-0.1.3/src/cairn/cli/runs/writer.py +103 -0
  321. cairndev-0.1.3/src/cairn/cli/tui/__init__.py +10 -0
  322. cairndev-0.1.3/src/cairn/cli/tui/app.py +825 -0
  323. cairndev-0.1.3/src/cairn/connectors/README.md +40 -0
  324. cairndev-0.1.3/src/cairn/connectors/github.toml +28 -0
  325. cairndev-0.1.3/src/cairn/connectors/notion.toml +22 -0
  326. cairndev-0.1.3/src/cairn/connectors/slack.toml +25 -0
  327. cairndev-0.1.3/src/cairn/core/__init__.py +12 -0
  328. cairndev-0.1.3/src/cairn/core/_aio.py +32 -0
  329. cairndev-0.1.3/src/cairn/core/_time.py +15 -0
  330. cairndev-0.1.3/src/cairn/core/account.py +850 -0
  331. cairndev-0.1.3/src/cairn/core/admin.py +657 -0
  332. cairndev-0.1.3/src/cairn/core/admission_door.py +182 -0
  333. cairndev-0.1.3/src/cairn/core/app_client.py +123 -0
  334. cairndev-0.1.3/src/cairn/core/approval/__init__.py +13 -0
  335. cairndev-0.1.3/src/cairn/core/approval/enforce.py +305 -0
  336. cairndev-0.1.3/src/cairn/core/approval/policy_source.py +104 -0
  337. cairndev-0.1.3/src/cairn/core/approval/reaper.py +224 -0
  338. cairndev-0.1.3/src/cairn/core/approval/resolver.py +175 -0
  339. cairndev-0.1.3/src/cairn/core/approval/surface.py +65 -0
  340. cairndev-0.1.3/src/cairn/core/auth_tokens.py +126 -0
  341. cairndev-0.1.3/src/cairn/core/backend_connections.py +107 -0
  342. cairndev-0.1.3/src/cairn/core/backend_selection.py +139 -0
  343. cairndev-0.1.3/src/cairn/core/backends/__init__.py +29 -0
  344. cairndev-0.1.3/src/cairn/core/backends/protocol.py +64 -0
  345. cairndev-0.1.3/src/cairn/core/budget_reservations.py +459 -0
  346. cairndev-0.1.3/src/cairn/core/bus/__init__.py +223 -0
  347. cairndev-0.1.3/src/cairn/core/bus/postgres.py +186 -0
  348. cairndev-0.1.3/src/cairn/core/clients/__init__.py +0 -0
  349. cairndev-0.1.3/src/cairn/core/clients/llm_client.py +11 -0
  350. cairndev-0.1.3/src/cairn/core/clients/mcp_client.py +294 -0
  351. cairndev-0.1.3/src/cairn/core/clients/memory_client.py +11 -0
  352. cairndev-0.1.3/src/cairn/core/compute_lifecycle.py +376 -0
  353. cairndev-0.1.3/src/cairn/core/connection_probe.py +559 -0
  354. cairndev-0.1.3/src/cairn/core/connections.py +977 -0
  355. cairndev-0.1.3/src/cairn/core/dataflow/__init__.py +79 -0
  356. cairndev-0.1.3/src/cairn/core/dataflow/capture.py +186 -0
  357. cairndev-0.1.3/src/cairn/core/dataflow/checkpoints.py +155 -0
  358. cairndev-0.1.3/src/cairn/core/dataflow/conformance.py +406 -0
  359. cairndev-0.1.3/src/cairn/core/dataflow/conformance_check.py +158 -0
  360. cairndev-0.1.3/src/cairn/core/dataflow/contract.py +339 -0
  361. cairndev-0.1.3/src/cairn/core/dataflow/defs.py +537 -0
  362. cairndev-0.1.3/src/cairn/core/dataflow/engine.py +129 -0
  363. cairndev-0.1.3/src/cairn/core/dataflow/engine_door.py +129 -0
  364. cairndev-0.1.3/src/cairn/core/dataflow/engine_registry.py +154 -0
  365. cairndev-0.1.3/src/cairn/core/dataflow/export.py +356 -0
  366. cairndev-0.1.3/src/cairn/core/dataflow/fetch.py +100 -0
  367. cairndev-0.1.3/src/cairn/core/dataflow/gate_split.py +213 -0
  368. cairndev-0.1.3/src/cairn/core/dataflow/manifest.py +75 -0
  369. cairndev-0.1.3/src/cairn/core/dataflow/resources.py +114 -0
  370. cairndev-0.1.3/src/cairn/core/dataflow/results.py +63 -0
  371. cairndev-0.1.3/src/cairn/core/dataflow/runner.py +623 -0
  372. cairndev-0.1.3/src/cairn/core/dataflow/stage_loader.py +150 -0
  373. cairndev-0.1.3/src/cairn/core/dataflow/sysmetrics.py +149 -0
  374. cairndev-0.1.3/src/cairn/core/dataset_readers.py +64 -0
  375. cairndev-0.1.3/src/cairn/core/dataset_roles.py +436 -0
  376. cairndev-0.1.3/src/cairn/core/demo_seed.py +360 -0
  377. cairndev-0.1.3/src/cairn/core/deploy_check.py +902 -0
  378. cairndev-0.1.3/src/cairn/core/dispatch/__init__.py +0 -0
  379. cairndev-0.1.3/src/cairn/core/dispatch/bus_bridge.py +91 -0
  380. cairndev-0.1.3/src/cairn/core/dispatch/coordination.py +232 -0
  381. cairndev-0.1.3/src/cairn/core/dispatch/dispatcher.py +1623 -0
  382. cairndev-0.1.3/src/cairn/core/dispatch/event_triggers.py +117 -0
  383. cairndev-0.1.3/src/cairn/core/dispatch/leg_executor.py +679 -0
  384. cairndev-0.1.3/src/cairn/core/dispatch/leg_hooks.py +301 -0
  385. cairndev-0.1.3/src/cairn/core/dispatch/pipeline_bridge.py +3374 -0
  386. cairndev-0.1.3/src/cairn/core/dispatch/pipeline_doors.py +293 -0
  387. cairndev-0.1.3/src/cairn/core/dispatch/pipeline_launch.py +491 -0
  388. cairndev-0.1.3/src/cairn/core/dispatch/pipeline_preview.py +309 -0
  389. cairndev-0.1.3/src/cairn/core/dispatch/pipeline_resume.py +100 -0
  390. cairndev-0.1.3/src/cairn/core/dispatch/schedule_catchup.py +275 -0
  391. cairndev-0.1.3/src/cairn/core/dispatch/scheduler.py +494 -0
  392. cairndev-0.1.3/src/cairn/core/dispatch/sse_bridge.py +82 -0
  393. cairndev-0.1.3/src/cairn/core/dispatch/start.py +470 -0
  394. cairndev-0.1.3/src/cairn/core/dispatch/target_concurrency.py +147 -0
  395. cairndev-0.1.3/src/cairn/core/eligibility.py +128 -0
  396. cairndev-0.1.3/src/cairn/core/engine/__init__.py +0 -0
  397. cairndev-0.1.3/src/cairn/core/engine/artifacts.py +110 -0
  398. cairndev-0.1.3/src/cairn/core/engine/bundle.py +430 -0
  399. cairndev-0.1.3/src/cairn/core/engine/bundle_pipeline.py +322 -0
  400. cairndev-0.1.3/src/cairn/core/engine/compiled.py +141 -0
  401. cairndev-0.1.3/src/cairn/core/engine/compiler.py +2025 -0
  402. cairndev-0.1.3/src/cairn/core/engine/condition_registry.py +233 -0
  403. cairndev-0.1.3/src/cairn/core/engine/expr.py +606 -0
  404. cairndev-0.1.3/src/cairn/core/engine/flatten.py +119 -0
  405. cairndev-0.1.3/src/cairn/core/engine/pipeline.py +1159 -0
  406. cairndev-0.1.3/src/cairn/core/engine/pipeline_explain.py +1026 -0
  407. cairndev-0.1.3/src/cairn/core/engine/pipeline_gate.py +127 -0
  408. cairndev-0.1.3/src/cairn/core/engine/pipeline_inherit.py +259 -0
  409. cairndev-0.1.3/src/cairn/core/engine/pipeline_loop.py +242 -0
  410. cairndev-0.1.3/src/cairn/core/engine/pipeline_resolve.py +335 -0
  411. cairndev-0.1.3/src/cairn/core/engine/pipeline_resolved.py +405 -0
  412. cairndev-0.1.3/src/cairn/core/engine/pipeline_triggers.py +317 -0
  413. cairndev-0.1.3/src/cairn/core/engine/python_function_registry.py +724 -0
  414. cairndev-0.1.3/src/cairn/core/engine/runner.py +606 -0
  415. cairndev-0.1.3/src/cairn/core/engine/schema.py +1020 -0
  416. cairndev-0.1.3/src/cairn/core/engine/schemas.py +251 -0
  417. cairndev-0.1.3/src/cairn/core/engine/skill_engine.py +481 -0
  418. cairndev-0.1.3/src/cairn/core/engine/triggers_grammar.py +1129 -0
  419. cairndev-0.1.3/src/cairn/core/engine/triggers_presets.py +108 -0
  420. cairndev-0.1.3/src/cairn/core/engine/triggers_spec.py +530 -0
  421. cairndev-0.1.3/src/cairn/core/engine/visualize.py +63 -0
  422. cairndev-0.1.3/src/cairn/core/engine/workflow_config.py +241 -0
  423. cairndev-0.1.3/src/cairn/core/eval/__init__.py +90 -0
  424. cairndev-0.1.3/src/cairn/core/eval/actuation.py +274 -0
  425. cairndev-0.1.3/src/cairn/core/eval/auto_eval.py +342 -0
  426. cairndev-0.1.3/src/cairn/core/eval/cluster.py +109 -0
  427. cairndev-0.1.3/src/cairn/core/eval/comparison.py +258 -0
  428. cairndev-0.1.3/src/cairn/core/eval/continuous.py +87 -0
  429. cairndev-0.1.3/src/cairn/core/eval/cost_baseline.py +141 -0
  430. cairndev-0.1.3/src/cairn/core/eval/diagnosis.py +86 -0
  431. cairndev-0.1.3/src/cairn/core/eval/recipe.py +386 -0
  432. cairndev-0.1.3/src/cairn/core/eval/scorecard.py +216 -0
  433. cairndev-0.1.3/src/cairn/core/eval/scorer.py +205 -0
  434. cairndev-0.1.3/src/cairn/core/eval/scoring.py +95 -0
  435. cairndev-0.1.3/src/cairn/core/eval/suggest.py +135 -0
  436. cairndev-0.1.3/src/cairn/core/eval/taxonomy.py +527 -0
  437. cairndev-0.1.3/src/cairn/core/eval_cutoff.py +220 -0
  438. cairndev-0.1.3/src/cairn/core/features.py +517 -0
  439. cairndev-0.1.3/src/cairn/core/gate_notify.py +209 -0
  440. cairndev-0.1.3/src/cairn/core/gateway.py +181 -0
  441. cairndev-0.1.3/src/cairn/core/graph_view.py +357 -0
  442. cairndev-0.1.3/src/cairn/core/guards/__init__.py +0 -0
  443. cairndev-0.1.3/src/cairn/core/guards/citation_validator.py +227 -0
  444. cairndev-0.1.3/src/cairn/core/guards/critique.py +140 -0
  445. cairndev-0.1.3/src/cairn/core/holdout.py +531 -0
  446. cairndev-0.1.3/src/cairn/core/intake.py +635 -0
  447. cairndev-0.1.3/src/cairn/core/interrupts.py +50 -0
  448. cairndev-0.1.3/src/cairn/core/job_channel_door.py +124 -0
  449. cairndev-0.1.3/src/cairn/core/judge_agreement.py +599 -0
  450. cairndev-0.1.3/src/cairn/core/leadership.py +269 -0
  451. cairndev-0.1.3/src/cairn/core/liveness.py +565 -0
  452. cairndev-0.1.3/src/cairn/core/llm/__init__.py +0 -0
  453. cairndev-0.1.3/src/cairn/core/llm/client.py +266 -0
  454. cairndev-0.1.3/src/cairn/core/llm/deepeval_model.py +137 -0
  455. cairndev-0.1.3/src/cairn/core/llm/models.py +240 -0
  456. cairndev-0.1.3/src/cairn/core/llm/models.yaml +32 -0
  457. cairndev-0.1.3/src/cairn/core/model_license_gate.py +138 -0
  458. cairndev-0.1.3/src/cairn/core/notifier.py +372 -0
  459. cairndev-0.1.3/src/cairn/core/oauth/__init__.py +36 -0
  460. cairndev-0.1.3/src/cairn/core/oauth/broker.py +299 -0
  461. cairndev-0.1.3/src/cairn/core/oauth/catalog.py +88 -0
  462. cairndev-0.1.3/src/cairn/core/oauth/providers.yaml +76 -0
  463. cairndev-0.1.3/src/cairn/core/oauth/store.py +250 -0
  464. cairndev-0.1.3/src/cairn/core/oauth_login.py +310 -0
  465. cairndev-0.1.3/src/cairn/core/obs/__init__.py +67 -0
  466. cairndev-0.1.3/src/cairn/core/obs/audit.py +167 -0
  467. cairndev-0.1.3/src/cairn/core/obs/base.py +201 -0
  468. cairndev-0.1.3/src/cairn/core/obs/cost.py +124 -0
  469. cairndev-0.1.3/src/cairn/core/obs/events.py +40 -0
  470. cairndev-0.1.3/src/cairn/core/obs/guard.py +41 -0
  471. cairndev-0.1.3/src/cairn/core/obs/metrics.py +114 -0
  472. cairndev-0.1.3/src/cairn/core/obs/redact.py +143 -0
  473. cairndev-0.1.3/src/cairn/core/obs/replay.py +39 -0
  474. cairndev-0.1.3/src/cairn/core/obs/telemetry.py +291 -0
  475. cairndev-0.1.3/src/cairn/core/operator/__init__.py +222 -0
  476. cairndev-0.1.3/src/cairn/core/operator/batch.py +202 -0
  477. cairndev-0.1.3/src/cairn/core/operator/binding.py +250 -0
  478. cairndev-0.1.3/src/cairn/core/operator/binding_validate.py +125 -0
  479. cairndev-0.1.3/src/cairn/core/operator/config.py +398 -0
  480. cairndev-0.1.3/src/cairn/core/operator/effective.py +304 -0
  481. cairndev-0.1.3/src/cairn/core/operator/elaborate.py +76 -0
  482. cairndev-0.1.3/src/cairn/core/operator/executor.py +175 -0
  483. cairndev-0.1.3/src/cairn/core/operator/guard.py +75 -0
  484. cairndev-0.1.3/src/cairn/core/operator/job_channel.py +374 -0
  485. cairndev-0.1.3/src/cairn/core/operator/job_control.py +381 -0
  486. cairndev-0.1.3/src/cairn/core/operator/job_store.py +798 -0
  487. cairndev-0.1.3/src/cairn/core/operator/jobs.py +516 -0
  488. cairndev-0.1.3/src/cairn/core/operator/learning.py +67 -0
  489. cairndev-0.1.3/src/cairn/core/operator/loader.py +289 -0
  490. cairndev-0.1.3/src/cairn/core/operator/manifest_sync.py +395 -0
  491. cairndev-0.1.3/src/cairn/core/operator/pins.py +188 -0
  492. cairndev-0.1.3/src/cairn/core/operator/protocol.py +524 -0
  493. cairndev-0.1.3/src/cairn/core/operator/registry.py +300 -0
  494. cairndev-0.1.3/src/cairn/core/operator/report_ingest.py +206 -0
  495. cairndev-0.1.3/src/cairn/core/operator/reports.py +236 -0
  496. cairndev-0.1.3/src/cairn/core/operator/runtime.py +1225 -0
  497. cairndev-0.1.3/src/cairn/core/operator/secrets.py +124 -0
  498. cairndev-0.1.3/src/cairn/core/operator/sharded.py +330 -0
  499. cairndev-0.1.3/src/cairn/core/operator/stage_events.py +68 -0
  500. cairndev-0.1.3/src/cairn/core/operator/testing.py +173 -0
  501. cairndev-0.1.3/src/cairn/core/operator/watch_probe.py +61 -0
  502. cairndev-0.1.3/src/cairn/core/pack/__init__.py +158 -0
  503. cairndev-0.1.3/src/cairn/core/pack/composition.py +377 -0
  504. cairndev-0.1.3/src/cairn/core/pack/contracts.py +812 -0
  505. cairndev-0.1.3/src/cairn/core/pack/curation.py +188 -0
  506. cairndev-0.1.3/src/cairn/core/pack/demos.py +153 -0
  507. cairndev-0.1.3/src/cairn/core/pack/discovery.py +51 -0
  508. cairndev-0.1.3/src/cairn/core/pack/drift.py +227 -0
  509. cairndev-0.1.3/src/cairn/core/pack/loader.py +676 -0
  510. cairndev-0.1.3/src/cairn/core/pack/manifest.py +1596 -0
  511. cairndev-0.1.3/src/cairn/core/pack/model_catalogs.py +82 -0
  512. cairndev-0.1.3/src/cairn/core/pack/profile.py +616 -0
  513. cairndev-0.1.3/src/cairn/core/pack/protocol.py +305 -0
  514. cairndev-0.1.3/src/cairn/core/pack/provisioning.py +54 -0
  515. cairndev-0.1.3/src/cairn/core/pack/registry.py +371 -0
  516. cairndev-0.1.3/src/cairn/core/pack/run_hooks.py +158 -0
  517. cairndev-0.1.3/src/cairn/core/pack/seeds.py +120 -0
  518. cairndev-0.1.3/src/cairn/core/pack/visibility.py +179 -0
  519. cairndev-0.1.3/src/cairn/core/pg_schema_init.py +164 -0
  520. cairndev-0.1.3/src/cairn/core/pipeline_presets.py +283 -0
  521. cairndev-0.1.3/src/cairn/core/plan.py +244 -0
  522. cairndev-0.1.3/src/cairn/core/policy/__init__.py +0 -0
  523. cairndev-0.1.3/src/cairn/core/policy/engine.py +302 -0
  524. cairndev-0.1.3/src/cairn/core/policy/pipeline_gates.py +232 -0
  525. cairndev-0.1.3/src/cairn/core/policy/store.py +289 -0
  526. cairndev-0.1.3/src/cairn/core/preflight.py +303 -0
  527. cairndev-0.1.3/src/cairn/core/profile_backends.py +377 -0
  528. cairndev-0.1.3/src/cairn/core/profile_store.py +278 -0
  529. cairndev-0.1.3/src/cairn/core/provider_settings.py +167 -0
  530. cairndev-0.1.3/src/cairn/core/pull_worker.py +337 -0
  531. cairndev-0.1.3/src/cairn/core/pull_worker_door.py +128 -0
  532. cairndev-0.1.3/src/cairn/core/refs.py +157 -0
  533. cairndev-0.1.3/src/cairn/core/registry.py +92 -0
  534. cairndev-0.1.3/src/cairn/core/registry_catalog.py +244 -0
  535. cairndev-0.1.3/src/cairn/core/registry_install.py +470 -0
  536. cairndev-0.1.3/src/cairn/core/reporting.py +138 -0
  537. cairndev-0.1.3/src/cairn/core/run_bundle.py +316 -0
  538. cairndev-0.1.3/src/cairn/core/run_failure.py +226 -0
  539. cairndev-0.1.3/src/cairn/core/run_progress.py +64 -0
  540. cairndev-0.1.3/src/cairn/core/runtime/__init__.py +58 -0
  541. cairndev-0.1.3/src/cairn/core/runtime/base.py +148 -0
  542. cairndev-0.1.3/src/cairn/core/runtime/checkpointer.py +291 -0
  543. cairndev-0.1.3/src/cairn/core/runtime/dbos/__init__.py +46 -0
  544. cairndev-0.1.3/src/cairn/core/runtime/dbos/registry.py +102 -0
  545. cairndev-0.1.3/src/cairn/core/runtime/dbos/runtime.py +243 -0
  546. cairndev-0.1.3/src/cairn/core/runtime/dbos/workflow.py +115 -0
  547. cairndev-0.1.3/src/cairn/core/runtime/inprocess.py +116 -0
  548. cairndev-0.1.3/src/cairn/core/runtime/node_events.py +75 -0
  549. cairndev-0.1.3/src/cairn/core/runtime/node_record.py +56 -0
  550. cairndev-0.1.3/src/cairn/core/runtime/node_stream.py +115 -0
  551. cairndev-0.1.3/src/cairn/core/runtime/reconciler.py +585 -0
  552. cairndev-0.1.3/src/cairn/core/runtime/retry.py +155 -0
  553. cairndev-0.1.3/src/cairn/core/runtime/temporal/__init__.py +46 -0
  554. cairndev-0.1.3/src/cairn/core/runtime/temporal/activities.py +180 -0
  555. cairndev-0.1.3/src/cairn/core/runtime/temporal/pipeline_activities.py +523 -0
  556. cairndev-0.1.3/src/cairn/core/runtime/temporal/pipeline_workflow.py +336 -0
  557. cairndev-0.1.3/src/cairn/core/runtime/temporal/registry.py +125 -0
  558. cairndev-0.1.3/src/cairn/core/runtime/temporal/runtime.py +230 -0
  559. cairndev-0.1.3/src/cairn/core/runtime/temporal/worker.py +357 -0
  560. cairndev-0.1.3/src/cairn/core/runtime/temporal/workflow.py +130 -0
  561. cairndev-0.1.3/src/cairn/core/schema/__init__.py +79 -0
  562. cairndev-0.1.3/src/cairn/core/schema/registry.py +220 -0
  563. cairndev-0.1.3/src/cairn/core/schema/uri.py +151 -0
  564. cairndev-0.1.3/src/cairn/core/schema/yaml_loader.py +267 -0
  565. cairndev-0.1.3/src/cairn/core/secrets_store.py +329 -0
  566. cairndev-0.1.3/src/cairn/core/settings.py +1230 -0
  567. cairndev-0.1.3/src/cairn/core/signup.py +243 -0
  568. cairndev-0.1.3/src/cairn/core/ssh_exec.py +270 -0
  569. cairndev-0.1.3/src/cairn/core/storage/README.md +225 -0
  570. cairndev-0.1.3/src/cairn/core/storage/__init__.py +232 -0
  571. cairndev-0.1.3/src/cairn/core/storage/artifact_bytes.py +250 -0
  572. cairndev-0.1.3/src/cairn/core/storage/artifacts.py +1285 -0
  573. cairndev-0.1.3/src/cairn/core/storage/backend.py +167 -0
  574. cairndev-0.1.3/src/cairn/core/storage/backfill_pipelines.py +499 -0
  575. cairndev-0.1.3/src/cairn/core/storage/episodic.py +80 -0
  576. cairndev-0.1.3/src/cairn/core/storage/eval_ledger.py +517 -0
  577. cairndev-0.1.3/src/cairn/core/storage/fingerprints.py +438 -0
  578. cairndev-0.1.3/src/cairn/core/storage/hydration.py +151 -0
  579. cairndev-0.1.3/src/cairn/core/storage/judge_labels.py +258 -0
  580. cairndev-0.1.3/src/cairn/core/storage/judges.py +509 -0
  581. cairndev-0.1.3/src/cairn/core/storage/knowledge_corpora.py +290 -0
  582. cairndev-0.1.3/src/cairn/core/storage/memory/__init__.py +7 -0
  583. cairndev-0.1.3/src/cairn/core/storage/memory/runs.py +160 -0
  584. cairndev-0.1.3/src/cairn/core/storage/migrations.py +92 -0
  585. cairndev-0.1.3/src/cairn/core/storage/pipeline_store.py +422 -0
  586. cairndev-0.1.3/src/cairn/core/storage/postgres/__init__.py +18 -0
  587. cairndev-0.1.3/src/cairn/core/storage/postgres/pool.py +98 -0
  588. cairndev-0.1.3/src/cairn/core/storage/postgres/runs.py +571 -0
  589. cairndev-0.1.3/src/cairn/core/storage/protocols.py +745 -0
  590. cairndev-0.1.3/src/cairn/core/storage/rag.py +87 -0
  591. cairndev-0.1.3/src/cairn/core/storage/rag_catalog.py +302 -0
  592. cairndev-0.1.3/src/cairn/core/storage/respell_packs.py +423 -0
  593. cairndev-0.1.3/src/cairn/core/storage/retention.py +171 -0
  594. cairndev-0.1.3/src/cairn/core/storage/reviews.py +405 -0
  595. cairndev-0.1.3/src/cairn/core/storage/schedule_store.py +428 -0
  596. cairndev-0.1.3/src/cairn/core/storage/sqlite/__init__.py +10 -0
  597. cairndev-0.1.3/src/cairn/core/storage/sqlite/runs.py +472 -0
  598. cairndev-0.1.3/src/cairn/core/storage/suggestions.py +421 -0
  599. cairndev-0.1.3/src/cairn/core/storage/transitions.py +133 -0
  600. cairndev-0.1.3/src/cairn/core/storage/trigger_inbox.py +471 -0
  601. cairndev-0.1.3/src/cairn/core/storage/trigger_store.py +378 -0
  602. cairndev-0.1.3/src/cairn/core/triggers/__init__.py +54 -0
  603. cairndev-0.1.3/src/cairn/core/triggers/auth.py +808 -0
  604. cairndev-0.1.3/src/cairn/core/triggers/console_support.py +329 -0
  605. cairndev-0.1.3/src/cairn/core/triggers/declared.py +13 -0
  606. cairndev-0.1.3/src/cairn/core/triggers/feature_gate.py +33 -0
  607. cairndev-0.1.3/src/cairn/core/triggers/inbox.py +12 -0
  608. cairndev-0.1.3/src/cairn/core/triggers/main.py +126 -0
  609. cairndev-0.1.3/src/cairn/core/triggers/mcp.py +179 -0
  610. cairndev-0.1.3/src/cairn/core/triggers/presets.py +13 -0
  611. cairndev-0.1.3/src/cairn/core/triggers/provider.py +162 -0
  612. cairndev-0.1.3/src/cairn/core/triggers/router.py +499 -0
  613. cairndev-0.1.3/src/cairn/core/triggers/router_providers.py +117 -0
  614. cairndev-0.1.3/src/cairn/core/triggers/routers/__init__.py +9 -0
  615. cairndev-0.1.3/src/cairn/core/triggers/routers/accounts.py +466 -0
  616. cairndev-0.1.3/src/cairn/core/triggers/routers/ingress.py +206 -0
  617. cairndev-0.1.3/src/cairn/core/triggers/routers/jobs.py +165 -0
  618. cairndev-0.1.3/src/cairn/core/triggers/routers/oauth.py +33 -0
  619. cairndev-0.1.3/src/cairn/core/triggers/routers/pipelines.py +877 -0
  620. cairndev-0.1.3/src/cairn/core/triggers/routers/registry.py +198 -0
  621. cairndev-0.1.3/src/cairn/core/triggers/routers/reviews.py +64 -0
  622. cairndev-0.1.3/src/cairn/core/triggers/routers/run_control.py +342 -0
  623. cairndev-0.1.3/src/cairn/core/triggers/routers/runs.py +443 -0
  624. cairndev-0.1.3/src/cairn/core/triggers/routers/schedules.py +282 -0
  625. cairndev-0.1.3/src/cairn/core/triggers/routers/start.py +278 -0
  626. cairndev-0.1.3/src/cairn/core/triggers/routers/templates.py +184 -0
  627. cairndev-0.1.3/src/cairn/core/triggers/schedule_store.py +12 -0
  628. cairndev-0.1.3/src/cairn/core/triggers/server.py +1300 -0
  629. cairndev-0.1.3/src/cairn/core/triggers/spec.py +13 -0
  630. cairndev-0.1.3/src/cairn/core/triggers/store.py +12 -0
  631. cairndev-0.1.3/src/cairn/core/ui_contract.py +360 -0
  632. cairndev-0.1.3/src/cairn/core/ui_render.py +158 -0
  633. cairndev-0.1.3/src/cairn/core/validate.py +500 -0
  634. cairndev-0.1.3/src/cairn/core/workflow_config_store.py +698 -0
  635. cairndev-0.1.3/src/cairn/core/workflow_registry.py +876 -0
  636. cairndev-0.1.3/src/cairn/core/workspace.py +404 -0
  637. cairndev-0.1.3/src/cairn/core/workspace_variables.py +277 -0
  638. cairndev-0.1.3/src/cairn/pipeline_file.py +190 -0
  639. cairndev-0.1.3/src/cairn/profiles/__init__.py +37 -0
  640. cairndev-0.1.3/src/cairn/profiles/local-dev.toml +62 -0
  641. cairndev-0.1.3/src/cairn/profiles/prod-infisical.toml +34 -0
  642. cairndev-0.1.3/src/cairn/profiles/sandbox.toml +34 -0
  643. cairndev-0.1.3/src/cairn/profiles/secure.toml +24 -0
  644. cairndev-0.1.3/src/cairn/providers/__init__.py +7 -0
  645. cairndev-0.1.3/src/cairn/providers/vectorstores/__init__.py +8 -0
  646. cairndev-0.1.3/src/cairn/providers/vectorstores/pinecone.py +38 -0
  647. cairndev-0.1.3/src/cairn/providers/vectorstores/qdrant.py +196 -0
  648. cairndev-0.1.3/src/cairn/py.typed +0 -0
  649. cairndev-0.1.3/src/cairn/services/__init__.py +0 -0
  650. cairndev-0.1.3/src/cairn/services/data/__init__.py +33 -0
  651. cairndev-0.1.3/src/cairn/services/data/loaders.py +172 -0
  652. cairndev-0.1.3/src/cairn/services/data/profile.py +231 -0
  653. cairndev-0.1.3/src/cairn/services/data/quality.py +173 -0
  654. cairndev-0.1.3/src/cairn/services/llm/__init__.py +0 -0
  655. cairndev-0.1.3/src/cairn/services/llm/factory.py +158 -0
  656. cairndev-0.1.3/src/cairn/services/llm/gateway.py +119 -0
  657. cairndev-0.1.3/src/cairn/services/llm/redacting.py +135 -0
  658. cairndev-0.1.3/src/cairn/services/mcp/__init__.py +0 -0
  659. cairndev-0.1.3/src/cairn/services/mcp/client.py +268 -0
  660. cairndev-0.1.3/src/cairn/services/mcp/presets.py +70 -0
  661. cairndev-0.1.3/src/cairn/services/mcp/tool_adapter.py +78 -0
  662. cairndev-0.1.3/src/cairn/services/memory/__init__.py +0 -0
  663. cairndev-0.1.3/src/cairn/services/memory/store.py +168 -0
  664. cairndev-0.1.3/src/cairn/services/memory/writer.py +214 -0
  665. cairndev-0.1.3/src/cairn/services/rag/__init__.py +45 -0
  666. cairndev-0.1.3/src/cairn/services/rag/byo.py +117 -0
  667. cairndev-0.1.3/src/cairn/services/rag/embeddings.py +210 -0
  668. cairndev-0.1.3/src/cairn/services/rag/idempotency.py +44 -0
  669. cairndev-0.1.3/src/cairn/services/rag/indexer.py +162 -0
  670. cairndev-0.1.3/src/cairn/services/rag/ingest.py +251 -0
  671. cairndev-0.1.3/src/cairn/services/rag/inject.py +157 -0
  672. cairndev-0.1.3/src/cairn/services/rag/lifecycle.py +175 -0
  673. cairndev-0.1.3/src/cairn/services/rag/plan.py +97 -0
  674. cairndev-0.1.3/src/cairn/services/rag/query.py +227 -0
  675. cairndev-0.1.3/src/cairn/services/rag/readers.py +252 -0
  676. cairndev-0.1.3/src/cairn/services/rag/roles.py +71 -0
  677. cairndev-0.1.3/src/cairn/services/rag/schedule.py +123 -0
  678. cairndev-0.1.3/src/cairn/services/rag/schemas.py +18 -0
  679. cairndev-0.1.3/src/cairn/services/rag/stores/__init__.py +95 -0
  680. cairndev-0.1.3/src/cairn/services/rag/stores/base.py +73 -0
  681. cairndev-0.1.3/src/cairn/services/rag/stores/pgvector.py +341 -0
  682. cairndev-0.1.3/src/cairn/services/rag/stores/sqlite_vec.py +406 -0
  683. cairndev-0.1.3/uv.lock +8635 -0
@@ -0,0 +1,23 @@
1
+ .git
2
+ .gitignore
3
+ .venv
4
+ venv
5
+ # JS deps — never needed in the engine image (the web dist is prebuilt separately
6
+ # and baked in). They also contain self-referential symlinks to absolute host
7
+ # paths that break hatchling's wheel-build file walk on Linux. Exclude at every depth.
8
+ node_modules
9
+ **/node_modules
10
+ __pycache__
11
+ *.pyc
12
+ *.pyo
13
+ .pytest_cache
14
+ .mypy_cache
15
+ .ruff_cache
16
+ .env
17
+ .env.local
18
+ *.log
19
+ .DS_Store
20
+ docker-compose.yml
21
+ Dockerfile
22
+ .dockerignore
23
+ docs
@@ -0,0 +1,12 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ indent_style = space
8
+ indent_size = 4
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.{yml,yaml,toml,json,md}]
12
+ indent_size = 2
@@ -0,0 +1,100 @@
1
+ # Secrets
2
+ .env
3
+ prod/.env.prod
4
+ .env.local
5
+ .env.*.local
6
+
7
+ # Python
8
+ __pycache__/
9
+ *.py[cod]
10
+ *$py.class
11
+ *.so
12
+ .Python
13
+ *.egg-info/
14
+ .installed.cfg
15
+ *.egg
16
+ .pytest_cache/
17
+ .mypy_cache/
18
+ .ruff_cache/
19
+ .coverage
20
+ .coverage.*
21
+ htmlcov/
22
+
23
+ # Virtualenvs
24
+ .venv/
25
+ venv/
26
+ env/
27
+
28
+ # IDE
29
+ .vscode/
30
+ .idea/
31
+ *.swp
32
+ *.swo
33
+
34
+ # OS
35
+ .DS_Store
36
+ Thumbs.db
37
+
38
+ # Data caches
39
+ data/chroma/
40
+ *.log
41
+
42
+ # Eval reports
43
+ evals/last_report.json
44
+ evals/*.report.json
45
+
46
+ # Build
47
+ build/
48
+ dist/
49
+ # The platform image's build context (#2514): the public wheels the ship step copies beside
50
+
51
+ # Observability sinks (src/obs)
52
+ events.jsonl
53
+ replays/
54
+
55
+ # CLI run artifacts: trace dirs (cairn run) + the hash-chained audit log.
56
+ .cairn/
57
+ audit.jsonl
58
+
59
+ # DuckDB local analytics (scripts/dashboard.py)
60
+ obs.duckdb
61
+ *.duckdb.wal
62
+ *.duckdb.tmp/
63
+
64
+ # Optional external MCP backend — operators drop this in to enable CAIRN_BACKEND=otel.
65
+ # Without it, the selector falls back to the mock backend with a warning.
66
+ src/mcp/tools/_backends/otel.py
67
+ tests/test_otel_backend.py
68
+
69
+ # Refactor scratch — incident agent package split kept on disk for reference
70
+ # but not part of the shipped tree. __init__.py files were removed so Python
71
+ # imports src/agents/incident.py (the working single-file module) instead.
72
+ src/agents/incident/
73
+
74
+
75
+ .cache/
76
+ .chainlit/
77
+ .files/
78
+ chainlit_app.py
79
+ chainlit.md
80
+ .deepeval/
81
+ .langgraph_api/
82
+ prod/
83
+
84
+ # stale pre-rename data dir (runtime traces); data now lives in .cairn/
85
+ .obs-agent/
86
+
87
+ # Never commit a secrets file under any name (an untracked .env backup once held
88
+ # the prod Postgres password, JWT secret and admin hash), nor local work areas.
89
+ .env.*
90
+ !.env.example
91
+ !deploy/light/.env.infisical.example
92
+ # the feature-proof profile's generated keys (scripts/oss/proof_seed.py), never committed
93
+ deploy/light/.proof/
94
+ .proof-out/
95
+ *.bak
96
+ /private/
97
+ /site/
98
+ /data/
99
+ # the generated hello-cairn proof report (scripts/oss/feature_proof.sh)
100
+ /FEATURE_PROOF.md
@@ -0,0 +1,36 @@
1
+ # High-signal rules only (engineering OS, 2026-09-11). Not an architecture checker —
2
+ # dependency direction lives in tests/core/test_architecture_boundaries.py.
3
+ rules:
4
+ - id: cairn.subprocess-shell
5
+ message: subprocess with shell=True — pass an argv list (docs/security.md §Subprocess)
6
+ severity: ERROR
7
+ languages: [python]
8
+ patterns:
9
+ - pattern-either:
10
+ - pattern: subprocess.$F(..., shell=True, ...)
11
+ - pattern: asyncio.create_subprocess_shell(...)
12
+ - pattern: os.system(...)
13
+ - pattern: os.popen(...)
14
+ paths: { exclude: ["tests/", "**/tests/", "scripts/"] }
15
+ - id: cairn.command-string-interpolation
16
+ message: a shell command built from an f-string / format / concatenation — command injection risk; use argv
17
+ severity: WARNING
18
+ languages: [python]
19
+ patterns:
20
+ - pattern-either:
21
+ - pattern: subprocess.$F(f"...", ...)
22
+ - pattern: subprocess.$F("..." % ..., ...)
23
+ - pattern: subprocess.$F("...".format(...), ...)
24
+ - pattern: subprocess.$F($A + $B, ...)
25
+ paths: { exclude: ["tests/", "**/tests/"] }
26
+ - id: cairn.hardcoded-secret
27
+ message: a credential-looking literal — load it from a connection or the environment (docs/security.md)
28
+ severity: ERROR
29
+ languages: [python]
30
+ patterns:
31
+ - pattern-either:
32
+ - pattern: $KEY = "$VALUE"
33
+ - pattern: $OBJ[$KEY] = "$VALUE"
34
+ - metavariable-regex: { metavariable: $KEY, regex: "^(?i)(.*_)?(api[_-]?key|apikey|secret|password|passwd|token|private[_-]?key)$" }
35
+ - metavariable-regex: { metavariable: $VALUE, regex: "^(?!(sk-test|sk-ci|dummy|test|example|placeholder|change-?me|.*-dev-|\\$\\{|<|https?://|[A-Z][A-Z0-9_]+$)).{12,}$" }
36
+ paths: { exclude: ["tests/", "**/tests/", "**/test_*.py", "docs/"] }
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses [Semantic Versioning](https://semver.org/).
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [0.1.3]
8
+
9
+ ### Security
10
+ - The server's access log no longer records a bearer token sent in the query string: on the run event stream, which accepts `?access_token=`, the value is logged as `***`.
11
+ - Webhook receivers live under `/triggers/`. A receiver whose path collides with an app route is refused, a receiver is public only for its own method and only with a non-empty signing secret, and its runs land in the workspace that declared it (#141).
12
+
13
+ ### Fixed
14
+ - With no model configured, `cairn dev`, `cairn run --mock` and `cairn gate --mock` sent agentic model calls to the vendor with a placeholder key and failed with a 401. No placeholder key leaves the process now: the call stops with "no model configured: set OPENAI_API_KEY, or OPENAI_BASE_URL …". A keyless OpenAI-compatible endpoint (`OPENAI_BASE_URL`) still gets the call.
15
+ - `cairn remote pipelines` shows each pipeline's name and step progress (it printed `0/0 steps` and no name).
16
+ - The engine image starts with a bare `docker run`: without `CAIRN_PROFILE` it runs the packaged `secure` profile. The bind address still follows sign-in (0.0.0.0 with auth on, 127.0.0.1 with auth off), and the Dockerfile header and the install page show runs that answer. CI starts the built image on every pull request.
17
+ - The Helm example values pin image tags that exist (the bare version), the released chart's `appVersion` is that tag, and the docs, chart README and install notes no longer say the GHCR packages are private (#140).
18
+ - `cairn-admin`, `cairn remote console` and `cairn test` no longer point at extras that do not exist: they name the packages they need and the command that adds them to cairn's own environment.
19
+ - `cairn pack sync` and `cairn pack add` render their colours instead of printing Rich markup.
20
+ - `cairn compute sweep` without an AWS region says to pass `--region` or set `AWS_DEFAULT_REGION`, instead of a traceback.
21
+ - `cairn pipeline show` no longer says flow legs cannot run yet.
22
+ - `cairn dev` no longer promises a console at `/console` (the web console is not part of the public core), and `cairn demo`/`cairn dev --seed` say how to read the `demo` workspace.
23
+ - `cairn init operator` scaffolds a smoke test per operator, so `cairn test <pack>` has something to run.
24
+ - `cairn remote approve`/`reject` (`POST /runs/{id}/resume`) on a pipeline step gate answers 409 with the `cairn remote advance` command, not 502, on the in-process runtime; under DBOS and Temporal the step-gate resume is unchanged.
25
+ - When a capability has no binding in the active profile, `cairn validate` names the active profile and the profiles the pack ships (hello-cairn validates under `profiles/hello.toml`).
26
+
27
+ ### Changed
28
+ - CONTRIBUTING matches the public tree: the sync line includes `runtime-dbos` (the DBOS runtime tests need it), the console, npm, pre-commit and status-audit steps are gone, `cairn dev --engine-only` with a CLI login is the dev loop, and the CI gates and branch protection are described as they are.
29
+ - The quickstart's `pip` alternative installs from the GitHub Release (`--find-links`) until the packages are on PyPI.
30
+ - Feature proof: the run hook (`hooks`) is proved on `profile-and-publish`, which every cell runs, and the `public-e2e` job installs the `hello` extra that declares it. `secrets.infisical` and `worker.pull` stay NOT PROVED, each with the reason.
31
+
32
+ ## [0.1.2]
33
+
34
+ ### Security
35
+ - A bearer token in the URL (`?access_token=`) is accepted only on the run event stream; anywhere else it is refused (401).
36
+ - A per-run worker token reaches only its own run's reporting routes (events, control, heartbeat); anything else answers 403.
37
+ - A webhook receiver answers without a cairn token only when its signature is required; an optional-signature receiver stays behind sign-in.
38
+ - The OAuth callback is reachable without a token (the provider's redirect carries none) and escapes everything it shows; the saga approval decides on `POST /triggers/approve/{id}` only.
39
+ - The workspace check covers the credential the auth guard accepted, so a token for one workspace cannot read another workspace's run stream.
40
+
41
+ ### Fixed
42
+ - The quickstart's `cairn remote login` failed on a plain install with "password hashing needs the 'auth' extra": `cairn dev` turns on password sign-in, so `pwdlib[argon2]` is now a base dependency (the `auth` extra still works and installs nothing more).
43
+ - `cairn dev` and `cairn remote` start the engine with `python -P`, so a `cairn/` folder in the working directory (a checkout) is never imported in place of the installed engine.
44
+
45
+ ## [0.1.1]
46
+
47
+ ### Added
48
+ - 0.1.1, the first complete public release: the engine `cairndev`, `cairn-client`, the optional Metaflow and SkyPilot dataflow engines (`cairn-operator-dataflow-metaflow`, `cairn-operator-dataflow-skypilot`) and the example pack `cairn-pack-hello`.
49
+
50
+ ### Changed
51
+ - The builtin operator packs and the core contracts ship inside the `cairndev` wheel (ADR-0137): they are no longer distributions of their own, and their extras are `cairndev` extras (`ssh`, `train`, `infisical`, `dataflow-engine`, `rerank-cross-encoder`, `rerank-cohere`).
@@ -0,0 +1,9 @@
1
+ cff-version: 1.2.0
2
+ title: cairn
3
+ message: If you use this software, please cite it as below.
4
+ type: software
5
+ authors:
6
+ - name: cairn maintainers
7
+ repository-code: https://github.com/cairndev-sh/cairn
8
+ url: https://cairndev.sh
9
+ license: Apache-2.0
@@ -0,0 +1,7 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ This project adopts the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/), version 2.1.
4
+
5
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the maintainers at the address in SECURITY.md. All complaints are reviewed and investigated promptly and fairly.
6
+
7
+ The full text of the Covenant, including the enforcement guidelines, applies as published at the link above.
@@ -0,0 +1,218 @@
1
+ # Contributing to cairn
2
+
3
+ Welcome! cairn is a governed ML control plane — identity, policy, HITL gates,
4
+ cost, lineage and audit for data/ml/agentic pipelines. This guide gets you from
5
+ clone to a running dev environment in about 15 minutes, with no tribal
6
+ knowledge required.
7
+
8
+ > **New here?** Start with this file, then the public
9
+ > [Quickstart](https://docs.cairndev.sh/quickstart/) for the runtime side
10
+ > (choosing SQLite vs Postgres, seeding demo fixtures, starting the server).
11
+ > This file covers *contributing*; that one covers *running*.
12
+
13
+ ## Quickstart (the 15-minute path)
14
+
15
+ ```bash
16
+ git clone https://github.com/cairndev-sh/cairn && cd cairn
17
+
18
+ # 1. Python env (uv: https://docs.astral.sh/uv/)
19
+ uv sync --extra dev --extra rag --extra rag-sqlite-vec \
20
+ --extra runtime-sqlite --extra runtime-temporal \
21
+ --extra runtime-dbos --extra telemetry --extra auth \
22
+ --extra ssh
23
+
24
+ # ⚠ Any later bare `uv sync` REMOVES every extra not named on that command
25
+ # line — auth, temporal, dbos and anything else you added (e.g. `--extra pii`
26
+ # for presidio) vanish silently. After any sync, re-run the full command above.
27
+ # (`uv run <cmd>` adds what is missing but removes nothing.)
28
+
29
+ # 2. A local engine on a pinned sqlite config, with demo data
30
+ uv run cairn dev --engine-only --seed
31
+
32
+ # 3. In another shell: sign in and drive it
33
+ uv run cairn remote login -u dev -p dev -e http://localhost:8000
34
+ uv run cairn remote launch hello-cairn/profile-and-publish --environment sandbox \
35
+ -i path=$PWD/examples/hello-cairn/data/sample.jsonl --watch
36
+ ```
37
+
38
+ `cairn dev` starts the engine on http://localhost:8000 on a **pinned** sqlite
39
+ config (`~/.cairn/dev.db`): a stale `.env` can never redirect your dev session to
40
+ someone's postgres. Sign in with **dev / dev**. From a checkout it adds
41
+ `examples/hello-cairn` to `CAIRN_PACK_PATH`. `--seed` writes deterministic demo
42
+ records (three pipelines, one paused at a person gate) into the `demo` workspace;
43
+ `cairn remote` reads the default workspace, so send `X-Cairn-Workspace: demo` to
44
+ the HTTP API to see them. The web console is not part of this repository, so pass
45
+ `--engine-only`. Other flags: `--port`, `--db`.
46
+
47
+ ## Working on a pack
48
+
49
+ A pack is discovered through the `cairn.packs` entry-point group, which is an
50
+ *install*-time fact — so a freshly scaffolded pack is invisible to the engine
51
+ until it is installed. Two loops (#1545):
52
+
53
+ ```bash
54
+ cairn init pack mypack
55
+
56
+ # 1. Zero-install loop: the engine scans these dirs on every start.
57
+ export CAIRN_PACK_PATH="$PWD/mypack" # `cairn pack add --dev mypack` prints this
58
+ cairn ls mypack # edits take effect on the next run
59
+
60
+ # 2. Make it permanent: wires the three root-pyproject.toml points
61
+ # (workspace member + dependency + [tool.uv.sources]) and prints the sync
62
+ # to run. Idempotent; it never syncs for you (a bare `uv sync` strips extras).
63
+ cairn pack add mypack
64
+ ```
65
+
66
+ An **installed** pack always wins a name collision with a `CAIRN_PACK_PATH`
67
+ copy, so a dev pack can never silently shadow a deployed one; a broken dev pack
68
+ is skipped with a warning (`cairn ls` lists load failures) rather than taking
69
+ the engine down. A pack's `[compat] cairn_engine` range is checked against the
70
+ installed engine at load time — a mismatch warns, in the log and as a
71
+ `pack_compat:<name>` row in `cairn doctor`, and still loads.
72
+
73
+ ## Running tests
74
+
75
+ ```bash
76
+ .venv/bin/pytest tests/core -q # engine/core
77
+ .venv/bin/pytest -q # everything, incl. operator-pack tests
78
+ uvx ruff check . # lint, the rule set CI runs
79
+ ```
80
+
81
+ `tests/core/test_dbos_runtime.py` needs the `runtime-dbos` extra (in the sync line
82
+ above). CI's `public` job runs `tests/core`, `tests/cli`, `tests/deploy` and the
83
+ optional engines' own tests with `-m "not dbos and not timing and not e2e"`; its
84
+ `public-e2e` job runs the feature proof (`-m e2e tests/e2e`, Postgres and DBOS cells
85
+ included). `scripts/oss/feature_proof.sh` runs the same proof locally with services.
86
+
87
+ The builtin operator packs and the core contracts are part of the `cairndev`
88
+ project (ADR-0137). An editable install reads the packs' code and `pack.toml`
89
+ from `packages/`, but holds COPIES of the contract definitions
90
+ (`packages/cairn-contracts-*/definitions`). After editing a contract, refresh
91
+ them: `uv sync --reinstall-package cairndev` (with the extras you use).
92
+
93
+ `.venv/bin/pytest` and `uv run pytest` run the same environment: `uv run` installs
94
+ what is missing but removes nothing, so the extras from the sync line stay.
95
+
96
+ The suite is hermetic: no keys, no databases, no network. If a test you write
97
+ needs a real backend, it must opt in explicitly — the repo `.env` is
98
+ neutralized in `tests/conftest.py` on purpose. That neutralization covers the
99
+ `.env` file only: a storage variable **exported in your shell** (a value that
100
+ differs from `.env`) is treated as deliberate and steers the suite. If your
101
+ shell exports one, unset it for the run:
102
+
103
+ ```bash
104
+ env -u CAIRN_STORAGE .venv/bin/pytest tests/core -q
105
+ ```
106
+
107
+
108
+ ## Other CI gates
109
+
110
+ - **`uv.lock`** — the install is `uv sync --locked`, so a dependency or version
111
+ change needs `uv lock` in the same PR (`uv lock --check` tells you).
112
+ - **The wheels** — `scripts/check_folded_wheels.py` builds the five wheels and
113
+ checks that `cairndev` carries the builtin operators and the core contracts.
114
+ - **The engine image** — the `image` job builds `Dockerfile.engine` and starts it.
115
+
116
+ ## Documentation
117
+
118
+ The user docs at [docs.cairndev.sh](https://docs.cairndev.sh) are the Astro/Starlight site in
119
+ `docs/site/`. Every pull request gets a preview deployment, and `main` deploys to production.
120
+ Build it locally with `npm ci && npm run build` in `docs/site/`. The one-line installer is
121
+ `docs/site/public/install.sh`, served at `https://docs.cairndev.sh/install.sh`.
122
+
123
+ ## Pull requests
124
+
125
+ 1. **One issue, one branch, one PR.** Open or claim a GitHub issue first;
126
+ branch from `main` (`fix/<issue>-slug` / `feat/<issue>-slug`). Never commit
127
+ to `main`.
128
+ 2. **CI must be green** — the required checks are the merge gate, not a
129
+ suggestion. PRs test one Python version for fast feedback; `main` re-proves
130
+ the full matrix.
131
+ 3. Comment progress on the issue as slices land; close it with a summary.
132
+ 4. Code style: match the surrounding code. Imports at module top (lazy imports
133
+ only for optional extras or real cycles, with a one-line reason). Operator
134
+ pack tests live inside the pack's own `tests/`, not top-level `tests/`.
135
+ 5. New operators ship with golden-fixture tests. Packs are data (md + YAML) —
136
+ code belongs in operator packs.
137
+ 6. **Regenerate what your change invalidates**: `uv lock` after a dependency or
138
+ version change, and the docs page a behaviour change makes wrong.
139
+ 7. **Sign off every commit (DCO).** Contributions are Apache-2.0 under the
140
+ [Developer Certificate of Origin](https://developercertificate.org/): commit
141
+ with `git commit -s`, which adds a `Signed-off-by: Your Name <you@example.com>`
142
+ line matching the commit author. The public repository's `dco` check refuses a
143
+ pull request with an unsigned commit; `git rebase --signoff main` fixes a branch after the fact.
144
+
145
+ ### What review looks for
146
+
147
+ Reviews here are about evidence, not style policing — the formatter handles
148
+ style. In rough priority:
149
+
150
+ 1. **Is the claim verified?** The PR says how it was checked, and the check
151
+ actually proves the thing. For anything user-facing, that means the real
152
+ surface was driven, not just a green unit test.
153
+ 2. **Was the problem re-verified before it was fixed?** Issues go stale.
154
+ Several "bugs" here turned out to be already fixed, or scoped wrong in the
155
+ issue. Saying "the issue was wrong, here's what's actually true" is a good
156
+ PR, not a failed one.
157
+ 3. **Does this rebuild something that exists?** Upstream libraries, existing
158
+ stores, shipped mechanisms. Extending beats duplicating.
159
+ 4. **Are failures reported honestly?** A known-failing test, an unverified
160
+ corner, a skipped step — all fine when stated. Not fine when discovered
161
+ later.
162
+
163
+ Two things worth saying out loud, because they're easy to get wrong under
164
+ time pressure: **never inherit a test baseline** (diagnose each failure's
165
+ cause rather than memorising a count — an "11-failure baseline" here was
166
+ 4 wiped-venv, 2 stale tests, and 0 real defects), and **an empty grep proves
167
+ nothing** until you've checked your search terms against the codebase's own
168
+ vocabulary.
169
+
170
+ ### What gates a merge to `main`
171
+
172
+ `main` is a protected branch:
173
+
174
+ - **Every change lands through a PR** with one approving review; conversations
175
+ must be resolved, and force pushes and deletion are refused.
176
+ - **Required checks**: `public` and `public-e2e` (`ci.yml`) and `dco` (`dco.yml`),
177
+ on a branch up to date with `main`. The `image` job runs on every PR too; a red
178
+ one is fixed in the PR, not merged around.
179
+
180
+ ## Where decisions live (reading order)
181
+
182
+ 1. [docs/architecture/00-overview.md](docs/architecture/00-overview.md) — the system, top-down.
183
+ 2. [docs/decisions/](docs/decisions/README.md) — the ADR log. Start with
184
+ ADR-0020 (the locked pack contract), ADR-0084 (control plane: one flow
185
+ concept, pipelines as the runnable surface), ADR-0085 (this contributor
186
+ experience and where it's going).
187
+ 3. The GitHub issue tracker — what's in flight. Issues labeled
188
+ `good-first-issue` are curated to be self-contained.
189
+
190
+ Changing a locked surface needs a **new ADR**, not an edit to an old one.
191
+
192
+ ## Layout in one paragraph
193
+
194
+ `src/cairn/core/` is the engine (dispatch, storage, policy, triggers/API server) and
195
+ `src/cairn/cli/` the `cairn` command; `packages/cairn-operator-*` are the builtin
196
+ operator packs and `packages/cairn-contracts-*` the core capability contracts, both
197
+ shipped inside the `cairndev` wheel (ADR-0137), except the two optional engines
198
+ (`cairn-operator-dataflow-metaflow`, `cairn-operator-dataflow-skypilot`), which are
199
+ wheels of their own; `packages/cairn-client` is `cairn-client`, the typed API client
200
+ (no `cairn.core` imports — CI-enforced); `examples/hello-cairn` is the example
201
+ domain pack (data only, its own `cairn-pack-hello` wheel); `deploy/` holds the
202
+ compose stack and the Helm chart; `docs/site/` is docs.cairndev.sh. The web console
203
+ and the product modules are the private platform (ADR-0120 D3, ADR-0121), which the
204
+ public core reaches only through entry-point groups (`cairn.routers`, `cairn.cli`,
205
+ `cairn.run_hooks`, `cairn.model_catalogs`, `cairn.seeds`); `docs/decisions/` is why
206
+ everything above is the way it is.
207
+
208
+ ## The public core and the platform
209
+
210
+ `uv sync --extra dev` installs the public set (the engine with the builtin operator
211
+ packs and the core contracts, and the client) and nothing private; the `public` CI
212
+ job proves that set installs alone and passes `tests/core`, and
213
+ `scripts/check_public_set.py` refuses any private distribution. Three rules the
214
+ boundary tests enforce:
215
+ the public core never imports `cairn_platform` or a domain pack; an operator pack
216
+ imports only `cairn.core.operator` (its re-exports cover what a pack needs from the
217
+ core) plus `cairn.core.dataflow` for engine providers; product logic lives in the platform,
218
+ and what stays in core by decision is justified in `cairn/core/CLAUDE.md` (#2497).
@@ -0,0 +1,83 @@
1
+ # The image a REMOTE dataflow/ml task runs in (ADR-0089 #1346).
2
+ #
3
+ # `Dockerfile.engine` builds the CONTROL PLANE — server, console, every runtime
4
+ # extra, torch under PRODUCTION_TIER. A Metaflow `@kubernetes`/`@batch` task
5
+ # needs none of that: it runs ONE `CairnFlow.execute` step, which parses a
6
+ # DataflowSpec and drives the shared runner over the kernel registry. So this
7
+ # image carries exactly that, and is small enough to pull onto a cold node
8
+ # without dominating the job's wall clock.
9
+ #
10
+ # What a task genuinely needs:
11
+ # * metaflow — the task process itself is `python -m metaflow …`; the bridge it
12
+ # runs is cairn-operator-dataflow-metaflow's (ADR-0134 D2)
13
+ # * cairn core — DataflowSpec/DataflowResult (the boundary contract) and the
14
+ # shared `run_dataflow` runner + stage loader (cairn.core.dataflow, #2583)
15
+ # * cairn-operator-dataflow — the engine entrypoint (cairn-dataflow-run); the Metaflow
16
+ # bridge flow is cairn-operator-dataflow-metaflow's (ADR-0134 D2)
17
+ # * the kernel packs — whatever `spec.stages` names must be resolvable, or
18
+ # the flow fails at stage 0 having already paid for the
19
+ # node (engine.validate() catches this control-side,
20
+ # but only for stages the CONTROL PLANE can see)
21
+ # * boto3 — the S3 datastore is mandatory for remote compute
22
+ # (#1349 refuses remote + local datastore)
23
+ #
24
+ # Deliberately absent: torch, the console SPA, temporal/dbos runtimes, the
25
+ # server. A task that needs a GPU trainer uses the training image instead —
26
+ # this one is the data/ml-kernel substrate.
27
+ FROM python:3.13-slim-trixie
28
+
29
+ ENV PYTHONUNBUFFERED=1 \
30
+ PIP_DISABLE_PIP_VERSION_CHECK=1 \
31
+ PIP_NO_CACHE_DIR=1
32
+
33
+ # `uv` for resolution speed; git because a few kernel extras resolve VCS pins.
34
+ RUN apt-get update && apt-get install -y --no-install-recommends git \
35
+ && rm -rf /var/lib/apt/lists/* \
36
+ && pip install uv
37
+
38
+ WORKDIR /app
39
+
40
+ # Source layout mirrors the workspace so the operator packs resolve as local
41
+ # path deps exactly as they do in CI — a task must run the SAME kernel code the
42
+ # control plane validated against, not a re-resolved PyPI version.
43
+ COPY pyproject.toml README.md ./
44
+ COPY cairn ./cairn
45
+ # `client`, `ask` and `sdk` are uv WORKSPACE MEMBERS (ADR-0085 D7 / ADR-0087):
46
+ # `[tool.uv.sources]` pins them `workspace = true`, so resolution of the root
47
+ # package FAILS ("references a workspace … but is not a workspace member") if
48
+ # any of the three is absent — even though a dataflow task imports none of
49
+ # them. They are small; omitting one costs a full failed build to discover.
50
+ COPY client ./client
51
+ COPY ask ./ask
52
+ COPY sdk ./sdk
53
+ # #2241 D — the contract distribution is a workspace member (`editable = false`) on the
54
+ # same rule; a task imports none of it, but resolution of the root fails without it.
55
+ COPY contracts ./contracts
56
+
57
+ # `--extra engine` is the whole point: it pulls the dataflow engine + kernel
58
+ # runtimes (polars/duckdb) the stages actually execute in. Installing the root
59
+ # package alone yields an image whose flow dies with "unknown stage".
60
+ RUN uv pip install --system --no-cache \
61
+ -e . \
62
+ -e ./cairn/operators/builtins/dataflow \
63
+ -e ./cairn/operators/optional/dataflow_metaflow \
64
+ -e ./cairn/operators/official/dataset_checks \
65
+ metaflow boto3 \
66
+ && uv pip install --system --no-cache polars duckdb \
67
+ # `kubernetes` is the CLIENT the submitter uses to talk to the API server.
68
+ # Its absence does not error — Metaflow simply never schedules and the
69
+ # submit hangs (observed: 10 minutes, no pod). Present here because this
70
+ # image doubles as the submitting environment in the ADR-0089 acceptance.
71
+ && uv pip install --system --no-cache kubernetes
72
+
73
+ # Fail the BUILD, not the first remote task, if the registry cannot resolve the
74
+ # kernels this image exists to run.
75
+ RUN python -c "\
76
+ from operator_dataflow.stages import load_stages; \
77
+ s = load_stages(); \
78
+ assert 'ingest.normalize' in s and 'dedup.exact' in s, sorted(s); \
79
+ import metaflow, boto3; \
80
+ import operator_dataflow_metaflow.metaflow_bridge, operator_dataflow_metaflow.metaflow_train_bridge; \
81
+ print('task image OK — kernels:', len(s))"
82
+
83
+ CMD ["python", "-c", "print('cairn dataflow task image')"]