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.
- cairndev-0.1.3/.dockerignore +23 -0
- cairndev-0.1.3/.editorconfig +12 -0
- cairndev-0.1.3/.gitignore +100 -0
- cairndev-0.1.3/.semgrep.yml +36 -0
- cairndev-0.1.3/CHANGELOG.md +51 -0
- cairndev-0.1.3/CITATION.cff +9 -0
- cairndev-0.1.3/CODE_OF_CONDUCT.md +7 -0
- cairndev-0.1.3/CONTRIBUTING.md +218 -0
- cairndev-0.1.3/Dockerfile.dataflow-task +83 -0
- cairndev-0.1.3/Dockerfile.engine +339 -0
- cairndev-0.1.3/GOVERNANCE.md +7 -0
- cairndev-0.1.3/LICENSE +202 -0
- cairndev-0.1.3/NOTICE +19 -0
- cairndev-0.1.3/PKG-INFO +275 -0
- cairndev-0.1.3/README.md +143 -0
- cairndev-0.1.3/SECURITY.md +83 -0
- cairndev-0.1.3/SUPPORT.md +6 -0
- cairndev-0.1.3/THIRD_PARTY_NOTICES.md +197 -0
- cairndev-0.1.3/assets/logo.svg +9 -0
- cairndev-0.1.3/deploy/light/.env.example +46 -0
- cairndev-0.1.3/deploy/light/.env.infisical.example +10 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/capabilities/artifact.promote.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.input.json +22 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/definitions/schemas/artifact.promote.output.json +18 -0
- cairndev-0.1.3/packages/cairn-contracts-artifact/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/definitions/capabilities/audit.sink.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.input.json +31 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/definitions/schemas/audit.sink.output.json +15 -0
- cairndev-0.1.3/packages/cairn-contracts-audit/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-data/definitions/capabilities/data.profile.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-data/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.input.json +96 -0
- cairndev-0.1.3/packages/cairn-contracts-data/definitions/schemas/data.profile.output.json +37 -0
- cairndev-0.1.3/packages/cairn-contracts-data/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/capabilities/dataflow.run.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/capabilities/ml.run.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/contracts.toml +53 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.input.json +35 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/dataflow.run.output.json +16 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.input.json +40 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/definitions/schemas/ml.run.output.json +16 -0
- cairndev-0.1.3/packages/cairn-contracts-dataflow/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/capabilities/mcp.call.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.input.json +22 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/definitions/schemas/mcp.call.output.json +13 -0
- cairndev-0.1.3/packages/cairn-contracts-mcp/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/capabilities/memory.search.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/capabilities/memory.write.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/contracts.toml +53 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.input.json +30 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.search.output.json +25 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.input.json +28 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/definitions/schemas/memory.write.output.json +13 -0
- cairndev-0.1.3/packages/cairn-contracts-memory/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.dispatch.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.propose.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/capabilities/monitor.threshold.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/contracts.toml +77 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.input.json +44 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.dispatch.output.json +32 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.input.json +27 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.propose.output.json +19 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.input.json +45 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/definitions/schemas/monitor.threshold.output.json +24 -0
- cairndev-0.1.3/packages/cairn-contracts-monitor/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.fetch.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.rerank.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/capabilities/rag.search.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/contracts.toml +77 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.input.json +16 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.fetch.output.json +22 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.input.json +26 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.rerank.output.json +29 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.input.json +30 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/definitions/schemas/rag.search.output.json +25 -0
- cairndev-0.1.3/packages/cairn-contracts-rag/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/definitions/capabilities/redact.text.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.input.json +8 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/definitions/schemas/redact.text.output.json +19 -0
- cairndev-0.1.3/packages/cairn-contracts-redact/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/definitions/capabilities/remote.exec.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.input.json +39 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/definitions/schemas/remote.exec.output.json +26 -0
- cairndev-0.1.3/packages/cairn-contracts-remote/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/capabilities/secrets.store.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/contracts.toml +29 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.input.json +10 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/definitions/schemas/secrets.store.output.json +14 -0
- cairndev-0.1.3/packages/cairn-contracts-secrets/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/capabilities/storage.get.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/capabilities/storage.put.json +9 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/contracts.toml +53 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.input.json +33 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.get.output.json +20 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.input.json +34 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/definitions/schemas/storage.put.output.json +16 -0
- cairndev-0.1.3/packages/cairn-contracts-storage/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/capabilities/train.eval_loss.json +10 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/capabilities/train.finetune.json +10 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/contracts.toml +65 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/reports/train.eval_loss.report.json +6 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/reports/train.finetune.report.json +10 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.configuration.json +7 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.input.json +30 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.eval_loss.output.json +11 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.configuration.json +16 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.input.json +44 -0
- cairndev-0.1.3/packages/cairn-contracts-train/definitions/schemas/train.finetune.output.json +22 -0
- cairndev-0.1.3/packages/cairn-contracts-train/pyproject.toml +19 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/CHANGELOG.md +11 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/docs/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/examples/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/pack.toml +68 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/pyproject.toml +37 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/__init__.py +17 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/_fs.py +71 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/get.py +107 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/operators/put.py +99 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/get.py +53 -0
- cairndev-0.1.3/packages/cairn-operator-artifact-local/src/operator_artifact_local/schemas/put.py +54 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/pack.toml +40 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/pyproject.toml +26 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/operators/audit_store.py +150 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-audit-store/src/operator_audit_store/schemas/audit_store.py +21 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/pack.toml +36 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/pyproject.toml +37 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/operators/profile.py +42 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-data-profile/src/operator_data_profile/schemas/profile.py +26 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/pack.toml +72 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/pyproject.toml +49 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/__init__.py +1 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/__init__.py +1 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/entry.py +104 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engine/runner.py +13 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engines.py +215 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/engines_ssh.py +466 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/__init__.py +1 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/promote.py +76 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/run.py +164 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/operators/run_ml.py +113 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/__init__.py +1 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/promote.py +22 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/run.py +49 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/schemas/run_ml.py +49 -0
- cairndev-0.1.3/packages/cairn-operator-dataflow/src/operator_dataflow/stages.py +19 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/CHANGELOG.md +8 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/docs/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/examples/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/pack.toml +52 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/pyproject.toml +28 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/__init__.py +13 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/operators/call.py +94 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-mcp/src/operator_mcp/schemas/call.py +52 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/CHANGELOG.md +9 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/docs/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/examples/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/pack.toml +71 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/pyproject.toml +40 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/__init__.py +18 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/search.py +128 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/operators/write.py +83 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/search.py +55 -0
- cairndev-0.1.3/packages/cairn-operator-memory-local/src/operator_memory_local/schemas/write.py +50 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/pack.toml +74 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/pyproject.toml +41 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/dispatch.py +78 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/propose.py +46 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/operators/threshold.py +106 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/__init__.py +2 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/dispatch.py +23 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/propose.py +23 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/schemas/threshold.py +41 -0
- cairndev-0.1.3/packages/cairn-operator-monitor-threshold/src/operator_monitor_threshold/source_guard.py +126 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/CHANGELOG.md +10 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/docs/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/examples/.gitkeep +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/pack.toml +70 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/pyproject.toml +39 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/__init__.py +17 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/fetch.py +107 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/operators/search.py +124 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/fetch.py +45 -0
- cairndev-0.1.3/packages/cairn-operator-rag-local/src/operator_rag_local/schemas/search.py +55 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/pack.toml +46 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/pyproject.toml +43 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/operators/rerank.py +125 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-rag-rerank/src/operator_rag_rerank/schemas/rerank.py +33 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/pack.toml +38 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/pyproject.toml +37 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/operators/redact_text.py +119 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-redact-regex/src/operator_redact_regex/schemas/redact_text.py +16 -0
- cairndev-0.1.3/packages/cairn-operator-remote/pack.toml +31 -0
- cairndev-0.1.3/packages/cairn-operator-remote/pyproject.toml +38 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/__init__.py +1 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/operators/exec.py +403 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-remote/src/operator_remote/schemas/exec.py +34 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/pack.toml +37 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/pyproject.toml +34 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/operators/env.py +60 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-env/src/operator_secrets_env/schemas/env.py +17 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/CHANGELOG.md +17 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/pack.toml +51 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/pyproject.toml +40 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/_infisical.py +92 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/operators/infisical.py +91 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-secrets-infisical/src/operator_secrets_infisical/schemas/infisical.py +17 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/CHANGELOG.md +10 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/pack.toml +60 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/pyproject.toml +49 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/finetune.py +244 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/eval_loss.py +46 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/operators/lora.py +75 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/py.typed +0 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/schemas/__init__.py +0 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/schemas/train.py +71 -0
- cairndev-0.1.3/packages/cairn-operator-train-local/src/operator_train_local/stages.py +66 -0
- cairndev-0.1.3/pyproject.toml +489 -0
- cairndev-0.1.3/renovate.json +17 -0
- cairndev-0.1.3/scripts/check_change_scope.py +223 -0
- cairndev-0.1.3/scripts/check_folded_wheels.py +442 -0
- cairndev-0.1.3/scripts/check_public_set.py +126 -0
- cairndev-0.1.3/scripts/oss/feature_proof.sh +81 -0
- cairndev-0.1.3/scripts/oss/proof_seed.py +187 -0
- cairndev-0.1.3/src/cairn/cli/__init__.py +10 -0
- cairndev-0.1.3/src/cairn/cli/commands/__init__.py +9 -0
- cairndev-0.1.3/src/cairn/cli/commands/compute.py +149 -0
- cairndev-0.1.3/src/cairn/cli/commands/config.py +50 -0
- cairndev-0.1.3/src/cairn/cli/commands/connect.py +533 -0
- cairndev-0.1.3/src/cairn/cli/commands/demo.py +86 -0
- cairndev-0.1.3/src/cairn/cli/commands/deploy.py +99 -0
- cairndev-0.1.3/src/cairn/cli/commands/dev.py +191 -0
- cairndev-0.1.3/src/cairn/cli/commands/doctor.py +1340 -0
- cairndev-0.1.3/src/cairn/cli/commands/export.py +286 -0
- cairndev-0.1.3/src/cairn/cli/commands/flow.py +189 -0
- cairndev-0.1.3/src/cairn/cli/commands/gate.py +213 -0
- cairndev-0.1.3/src/cairn/cli/commands/init.py +979 -0
- cairndev-0.1.3/src/cairn/cli/commands/lineage.py +235 -0
- cairndev-0.1.3/src/cairn/cli/commands/lock.py +212 -0
- cairndev-0.1.3/src/cairn/cli/commands/ls.py +424 -0
- cairndev-0.1.3/src/cairn/cli/commands/pack.py +616 -0
- cairndev-0.1.3/src/cairn/cli/commands/pipeline.py +517 -0
- cairndev-0.1.3/src/cairn/cli/commands/remote.py +1215 -0
- cairndev-0.1.3/src/cairn/cli/commands/replay.py +226 -0
- cairndev-0.1.3/src/cairn/cli/commands/run.py +1057 -0
- cairndev-0.1.3/src/cairn/cli/commands/test.py +52 -0
- cairndev-0.1.3/src/cairn/cli/commands/validate.py +180 -0
- cairndev-0.1.3/src/cairn/cli/commands/visualize.py +64 -0
- cairndev-0.1.3/src/cairn/cli/commands/worker.py +192 -0
- cairndev-0.1.3/src/cairn/cli/main.py +169 -0
- cairndev-0.1.3/src/cairn/cli/providers.py +142 -0
- cairndev-0.1.3/src/cairn/cli/runs/__init__.py +51 -0
- cairndev-0.1.3/src/cairn/cli/runs/paths.py +86 -0
- cairndev-0.1.3/src/cairn/cli/runs/reader.py +81 -0
- cairndev-0.1.3/src/cairn/cli/runs/writer.py +103 -0
- cairndev-0.1.3/src/cairn/cli/tui/__init__.py +10 -0
- cairndev-0.1.3/src/cairn/cli/tui/app.py +825 -0
- cairndev-0.1.3/src/cairn/connectors/README.md +40 -0
- cairndev-0.1.3/src/cairn/connectors/github.toml +28 -0
- cairndev-0.1.3/src/cairn/connectors/notion.toml +22 -0
- cairndev-0.1.3/src/cairn/connectors/slack.toml +25 -0
- cairndev-0.1.3/src/cairn/core/__init__.py +12 -0
- cairndev-0.1.3/src/cairn/core/_aio.py +32 -0
- cairndev-0.1.3/src/cairn/core/_time.py +15 -0
- cairndev-0.1.3/src/cairn/core/account.py +850 -0
- cairndev-0.1.3/src/cairn/core/admin.py +657 -0
- cairndev-0.1.3/src/cairn/core/admission_door.py +182 -0
- cairndev-0.1.3/src/cairn/core/app_client.py +123 -0
- cairndev-0.1.3/src/cairn/core/approval/__init__.py +13 -0
- cairndev-0.1.3/src/cairn/core/approval/enforce.py +305 -0
- cairndev-0.1.3/src/cairn/core/approval/policy_source.py +104 -0
- cairndev-0.1.3/src/cairn/core/approval/reaper.py +224 -0
- cairndev-0.1.3/src/cairn/core/approval/resolver.py +175 -0
- cairndev-0.1.3/src/cairn/core/approval/surface.py +65 -0
- cairndev-0.1.3/src/cairn/core/auth_tokens.py +126 -0
- cairndev-0.1.3/src/cairn/core/backend_connections.py +107 -0
- cairndev-0.1.3/src/cairn/core/backend_selection.py +139 -0
- cairndev-0.1.3/src/cairn/core/backends/__init__.py +29 -0
- cairndev-0.1.3/src/cairn/core/backends/protocol.py +64 -0
- cairndev-0.1.3/src/cairn/core/budget_reservations.py +459 -0
- cairndev-0.1.3/src/cairn/core/bus/__init__.py +223 -0
- cairndev-0.1.3/src/cairn/core/bus/postgres.py +186 -0
- cairndev-0.1.3/src/cairn/core/clients/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/clients/llm_client.py +11 -0
- cairndev-0.1.3/src/cairn/core/clients/mcp_client.py +294 -0
- cairndev-0.1.3/src/cairn/core/clients/memory_client.py +11 -0
- cairndev-0.1.3/src/cairn/core/compute_lifecycle.py +376 -0
- cairndev-0.1.3/src/cairn/core/connection_probe.py +559 -0
- cairndev-0.1.3/src/cairn/core/connections.py +977 -0
- cairndev-0.1.3/src/cairn/core/dataflow/__init__.py +79 -0
- cairndev-0.1.3/src/cairn/core/dataflow/capture.py +186 -0
- cairndev-0.1.3/src/cairn/core/dataflow/checkpoints.py +155 -0
- cairndev-0.1.3/src/cairn/core/dataflow/conformance.py +406 -0
- cairndev-0.1.3/src/cairn/core/dataflow/conformance_check.py +158 -0
- cairndev-0.1.3/src/cairn/core/dataflow/contract.py +339 -0
- cairndev-0.1.3/src/cairn/core/dataflow/defs.py +537 -0
- cairndev-0.1.3/src/cairn/core/dataflow/engine.py +129 -0
- cairndev-0.1.3/src/cairn/core/dataflow/engine_door.py +129 -0
- cairndev-0.1.3/src/cairn/core/dataflow/engine_registry.py +154 -0
- cairndev-0.1.3/src/cairn/core/dataflow/export.py +356 -0
- cairndev-0.1.3/src/cairn/core/dataflow/fetch.py +100 -0
- cairndev-0.1.3/src/cairn/core/dataflow/gate_split.py +213 -0
- cairndev-0.1.3/src/cairn/core/dataflow/manifest.py +75 -0
- cairndev-0.1.3/src/cairn/core/dataflow/resources.py +114 -0
- cairndev-0.1.3/src/cairn/core/dataflow/results.py +63 -0
- cairndev-0.1.3/src/cairn/core/dataflow/runner.py +623 -0
- cairndev-0.1.3/src/cairn/core/dataflow/stage_loader.py +150 -0
- cairndev-0.1.3/src/cairn/core/dataflow/sysmetrics.py +149 -0
- cairndev-0.1.3/src/cairn/core/dataset_readers.py +64 -0
- cairndev-0.1.3/src/cairn/core/dataset_roles.py +436 -0
- cairndev-0.1.3/src/cairn/core/demo_seed.py +360 -0
- cairndev-0.1.3/src/cairn/core/deploy_check.py +902 -0
- cairndev-0.1.3/src/cairn/core/dispatch/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/dispatch/bus_bridge.py +91 -0
- cairndev-0.1.3/src/cairn/core/dispatch/coordination.py +232 -0
- cairndev-0.1.3/src/cairn/core/dispatch/dispatcher.py +1623 -0
- cairndev-0.1.3/src/cairn/core/dispatch/event_triggers.py +117 -0
- cairndev-0.1.3/src/cairn/core/dispatch/leg_executor.py +679 -0
- cairndev-0.1.3/src/cairn/core/dispatch/leg_hooks.py +301 -0
- cairndev-0.1.3/src/cairn/core/dispatch/pipeline_bridge.py +3374 -0
- cairndev-0.1.3/src/cairn/core/dispatch/pipeline_doors.py +293 -0
- cairndev-0.1.3/src/cairn/core/dispatch/pipeline_launch.py +491 -0
- cairndev-0.1.3/src/cairn/core/dispatch/pipeline_preview.py +309 -0
- cairndev-0.1.3/src/cairn/core/dispatch/pipeline_resume.py +100 -0
- cairndev-0.1.3/src/cairn/core/dispatch/schedule_catchup.py +275 -0
- cairndev-0.1.3/src/cairn/core/dispatch/scheduler.py +494 -0
- cairndev-0.1.3/src/cairn/core/dispatch/sse_bridge.py +82 -0
- cairndev-0.1.3/src/cairn/core/dispatch/start.py +470 -0
- cairndev-0.1.3/src/cairn/core/dispatch/target_concurrency.py +147 -0
- cairndev-0.1.3/src/cairn/core/eligibility.py +128 -0
- cairndev-0.1.3/src/cairn/core/engine/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/engine/artifacts.py +110 -0
- cairndev-0.1.3/src/cairn/core/engine/bundle.py +430 -0
- cairndev-0.1.3/src/cairn/core/engine/bundle_pipeline.py +322 -0
- cairndev-0.1.3/src/cairn/core/engine/compiled.py +141 -0
- cairndev-0.1.3/src/cairn/core/engine/compiler.py +2025 -0
- cairndev-0.1.3/src/cairn/core/engine/condition_registry.py +233 -0
- cairndev-0.1.3/src/cairn/core/engine/expr.py +606 -0
- cairndev-0.1.3/src/cairn/core/engine/flatten.py +119 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline.py +1159 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_explain.py +1026 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_gate.py +127 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_inherit.py +259 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_loop.py +242 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_resolve.py +335 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_resolved.py +405 -0
- cairndev-0.1.3/src/cairn/core/engine/pipeline_triggers.py +317 -0
- cairndev-0.1.3/src/cairn/core/engine/python_function_registry.py +724 -0
- cairndev-0.1.3/src/cairn/core/engine/runner.py +606 -0
- cairndev-0.1.3/src/cairn/core/engine/schema.py +1020 -0
- cairndev-0.1.3/src/cairn/core/engine/schemas.py +251 -0
- cairndev-0.1.3/src/cairn/core/engine/skill_engine.py +481 -0
- cairndev-0.1.3/src/cairn/core/engine/triggers_grammar.py +1129 -0
- cairndev-0.1.3/src/cairn/core/engine/triggers_presets.py +108 -0
- cairndev-0.1.3/src/cairn/core/engine/triggers_spec.py +530 -0
- cairndev-0.1.3/src/cairn/core/engine/visualize.py +63 -0
- cairndev-0.1.3/src/cairn/core/engine/workflow_config.py +241 -0
- cairndev-0.1.3/src/cairn/core/eval/__init__.py +90 -0
- cairndev-0.1.3/src/cairn/core/eval/actuation.py +274 -0
- cairndev-0.1.3/src/cairn/core/eval/auto_eval.py +342 -0
- cairndev-0.1.3/src/cairn/core/eval/cluster.py +109 -0
- cairndev-0.1.3/src/cairn/core/eval/comparison.py +258 -0
- cairndev-0.1.3/src/cairn/core/eval/continuous.py +87 -0
- cairndev-0.1.3/src/cairn/core/eval/cost_baseline.py +141 -0
- cairndev-0.1.3/src/cairn/core/eval/diagnosis.py +86 -0
- cairndev-0.1.3/src/cairn/core/eval/recipe.py +386 -0
- cairndev-0.1.3/src/cairn/core/eval/scorecard.py +216 -0
- cairndev-0.1.3/src/cairn/core/eval/scorer.py +205 -0
- cairndev-0.1.3/src/cairn/core/eval/scoring.py +95 -0
- cairndev-0.1.3/src/cairn/core/eval/suggest.py +135 -0
- cairndev-0.1.3/src/cairn/core/eval/taxonomy.py +527 -0
- cairndev-0.1.3/src/cairn/core/eval_cutoff.py +220 -0
- cairndev-0.1.3/src/cairn/core/features.py +517 -0
- cairndev-0.1.3/src/cairn/core/gate_notify.py +209 -0
- cairndev-0.1.3/src/cairn/core/gateway.py +181 -0
- cairndev-0.1.3/src/cairn/core/graph_view.py +357 -0
- cairndev-0.1.3/src/cairn/core/guards/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/guards/citation_validator.py +227 -0
- cairndev-0.1.3/src/cairn/core/guards/critique.py +140 -0
- cairndev-0.1.3/src/cairn/core/holdout.py +531 -0
- cairndev-0.1.3/src/cairn/core/intake.py +635 -0
- cairndev-0.1.3/src/cairn/core/interrupts.py +50 -0
- cairndev-0.1.3/src/cairn/core/job_channel_door.py +124 -0
- cairndev-0.1.3/src/cairn/core/judge_agreement.py +599 -0
- cairndev-0.1.3/src/cairn/core/leadership.py +269 -0
- cairndev-0.1.3/src/cairn/core/liveness.py +565 -0
- cairndev-0.1.3/src/cairn/core/llm/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/llm/client.py +266 -0
- cairndev-0.1.3/src/cairn/core/llm/deepeval_model.py +137 -0
- cairndev-0.1.3/src/cairn/core/llm/models.py +240 -0
- cairndev-0.1.3/src/cairn/core/llm/models.yaml +32 -0
- cairndev-0.1.3/src/cairn/core/model_license_gate.py +138 -0
- cairndev-0.1.3/src/cairn/core/notifier.py +372 -0
- cairndev-0.1.3/src/cairn/core/oauth/__init__.py +36 -0
- cairndev-0.1.3/src/cairn/core/oauth/broker.py +299 -0
- cairndev-0.1.3/src/cairn/core/oauth/catalog.py +88 -0
- cairndev-0.1.3/src/cairn/core/oauth/providers.yaml +76 -0
- cairndev-0.1.3/src/cairn/core/oauth/store.py +250 -0
- cairndev-0.1.3/src/cairn/core/oauth_login.py +310 -0
- cairndev-0.1.3/src/cairn/core/obs/__init__.py +67 -0
- cairndev-0.1.3/src/cairn/core/obs/audit.py +167 -0
- cairndev-0.1.3/src/cairn/core/obs/base.py +201 -0
- cairndev-0.1.3/src/cairn/core/obs/cost.py +124 -0
- cairndev-0.1.3/src/cairn/core/obs/events.py +40 -0
- cairndev-0.1.3/src/cairn/core/obs/guard.py +41 -0
- cairndev-0.1.3/src/cairn/core/obs/metrics.py +114 -0
- cairndev-0.1.3/src/cairn/core/obs/redact.py +143 -0
- cairndev-0.1.3/src/cairn/core/obs/replay.py +39 -0
- cairndev-0.1.3/src/cairn/core/obs/telemetry.py +291 -0
- cairndev-0.1.3/src/cairn/core/operator/__init__.py +222 -0
- cairndev-0.1.3/src/cairn/core/operator/batch.py +202 -0
- cairndev-0.1.3/src/cairn/core/operator/binding.py +250 -0
- cairndev-0.1.3/src/cairn/core/operator/binding_validate.py +125 -0
- cairndev-0.1.3/src/cairn/core/operator/config.py +398 -0
- cairndev-0.1.3/src/cairn/core/operator/effective.py +304 -0
- cairndev-0.1.3/src/cairn/core/operator/elaborate.py +76 -0
- cairndev-0.1.3/src/cairn/core/operator/executor.py +175 -0
- cairndev-0.1.3/src/cairn/core/operator/guard.py +75 -0
- cairndev-0.1.3/src/cairn/core/operator/job_channel.py +374 -0
- cairndev-0.1.3/src/cairn/core/operator/job_control.py +381 -0
- cairndev-0.1.3/src/cairn/core/operator/job_store.py +798 -0
- cairndev-0.1.3/src/cairn/core/operator/jobs.py +516 -0
- cairndev-0.1.3/src/cairn/core/operator/learning.py +67 -0
- cairndev-0.1.3/src/cairn/core/operator/loader.py +289 -0
- cairndev-0.1.3/src/cairn/core/operator/manifest_sync.py +395 -0
- cairndev-0.1.3/src/cairn/core/operator/pins.py +188 -0
- cairndev-0.1.3/src/cairn/core/operator/protocol.py +524 -0
- cairndev-0.1.3/src/cairn/core/operator/registry.py +300 -0
- cairndev-0.1.3/src/cairn/core/operator/report_ingest.py +206 -0
- cairndev-0.1.3/src/cairn/core/operator/reports.py +236 -0
- cairndev-0.1.3/src/cairn/core/operator/runtime.py +1225 -0
- cairndev-0.1.3/src/cairn/core/operator/secrets.py +124 -0
- cairndev-0.1.3/src/cairn/core/operator/sharded.py +330 -0
- cairndev-0.1.3/src/cairn/core/operator/stage_events.py +68 -0
- cairndev-0.1.3/src/cairn/core/operator/testing.py +173 -0
- cairndev-0.1.3/src/cairn/core/operator/watch_probe.py +61 -0
- cairndev-0.1.3/src/cairn/core/pack/__init__.py +158 -0
- cairndev-0.1.3/src/cairn/core/pack/composition.py +377 -0
- cairndev-0.1.3/src/cairn/core/pack/contracts.py +812 -0
- cairndev-0.1.3/src/cairn/core/pack/curation.py +188 -0
- cairndev-0.1.3/src/cairn/core/pack/demos.py +153 -0
- cairndev-0.1.3/src/cairn/core/pack/discovery.py +51 -0
- cairndev-0.1.3/src/cairn/core/pack/drift.py +227 -0
- cairndev-0.1.3/src/cairn/core/pack/loader.py +676 -0
- cairndev-0.1.3/src/cairn/core/pack/manifest.py +1596 -0
- cairndev-0.1.3/src/cairn/core/pack/model_catalogs.py +82 -0
- cairndev-0.1.3/src/cairn/core/pack/profile.py +616 -0
- cairndev-0.1.3/src/cairn/core/pack/protocol.py +305 -0
- cairndev-0.1.3/src/cairn/core/pack/provisioning.py +54 -0
- cairndev-0.1.3/src/cairn/core/pack/registry.py +371 -0
- cairndev-0.1.3/src/cairn/core/pack/run_hooks.py +158 -0
- cairndev-0.1.3/src/cairn/core/pack/seeds.py +120 -0
- cairndev-0.1.3/src/cairn/core/pack/visibility.py +179 -0
- cairndev-0.1.3/src/cairn/core/pg_schema_init.py +164 -0
- cairndev-0.1.3/src/cairn/core/pipeline_presets.py +283 -0
- cairndev-0.1.3/src/cairn/core/plan.py +244 -0
- cairndev-0.1.3/src/cairn/core/policy/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/core/policy/engine.py +302 -0
- cairndev-0.1.3/src/cairn/core/policy/pipeline_gates.py +232 -0
- cairndev-0.1.3/src/cairn/core/policy/store.py +289 -0
- cairndev-0.1.3/src/cairn/core/preflight.py +303 -0
- cairndev-0.1.3/src/cairn/core/profile_backends.py +377 -0
- cairndev-0.1.3/src/cairn/core/profile_store.py +278 -0
- cairndev-0.1.3/src/cairn/core/provider_settings.py +167 -0
- cairndev-0.1.3/src/cairn/core/pull_worker.py +337 -0
- cairndev-0.1.3/src/cairn/core/pull_worker_door.py +128 -0
- cairndev-0.1.3/src/cairn/core/refs.py +157 -0
- cairndev-0.1.3/src/cairn/core/registry.py +92 -0
- cairndev-0.1.3/src/cairn/core/registry_catalog.py +244 -0
- cairndev-0.1.3/src/cairn/core/registry_install.py +470 -0
- cairndev-0.1.3/src/cairn/core/reporting.py +138 -0
- cairndev-0.1.3/src/cairn/core/run_bundle.py +316 -0
- cairndev-0.1.3/src/cairn/core/run_failure.py +226 -0
- cairndev-0.1.3/src/cairn/core/run_progress.py +64 -0
- cairndev-0.1.3/src/cairn/core/runtime/__init__.py +58 -0
- cairndev-0.1.3/src/cairn/core/runtime/base.py +148 -0
- cairndev-0.1.3/src/cairn/core/runtime/checkpointer.py +291 -0
- cairndev-0.1.3/src/cairn/core/runtime/dbos/__init__.py +46 -0
- cairndev-0.1.3/src/cairn/core/runtime/dbos/registry.py +102 -0
- cairndev-0.1.3/src/cairn/core/runtime/dbos/runtime.py +243 -0
- cairndev-0.1.3/src/cairn/core/runtime/dbos/workflow.py +115 -0
- cairndev-0.1.3/src/cairn/core/runtime/inprocess.py +116 -0
- cairndev-0.1.3/src/cairn/core/runtime/node_events.py +75 -0
- cairndev-0.1.3/src/cairn/core/runtime/node_record.py +56 -0
- cairndev-0.1.3/src/cairn/core/runtime/node_stream.py +115 -0
- cairndev-0.1.3/src/cairn/core/runtime/reconciler.py +585 -0
- cairndev-0.1.3/src/cairn/core/runtime/retry.py +155 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/__init__.py +46 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/activities.py +180 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/pipeline_activities.py +523 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/pipeline_workflow.py +336 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/registry.py +125 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/runtime.py +230 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/worker.py +357 -0
- cairndev-0.1.3/src/cairn/core/runtime/temporal/workflow.py +130 -0
- cairndev-0.1.3/src/cairn/core/schema/__init__.py +79 -0
- cairndev-0.1.3/src/cairn/core/schema/registry.py +220 -0
- cairndev-0.1.3/src/cairn/core/schema/uri.py +151 -0
- cairndev-0.1.3/src/cairn/core/schema/yaml_loader.py +267 -0
- cairndev-0.1.3/src/cairn/core/secrets_store.py +329 -0
- cairndev-0.1.3/src/cairn/core/settings.py +1230 -0
- cairndev-0.1.3/src/cairn/core/signup.py +243 -0
- cairndev-0.1.3/src/cairn/core/ssh_exec.py +270 -0
- cairndev-0.1.3/src/cairn/core/storage/README.md +225 -0
- cairndev-0.1.3/src/cairn/core/storage/__init__.py +232 -0
- cairndev-0.1.3/src/cairn/core/storage/artifact_bytes.py +250 -0
- cairndev-0.1.3/src/cairn/core/storage/artifacts.py +1285 -0
- cairndev-0.1.3/src/cairn/core/storage/backend.py +167 -0
- cairndev-0.1.3/src/cairn/core/storage/backfill_pipelines.py +499 -0
- cairndev-0.1.3/src/cairn/core/storage/episodic.py +80 -0
- cairndev-0.1.3/src/cairn/core/storage/eval_ledger.py +517 -0
- cairndev-0.1.3/src/cairn/core/storage/fingerprints.py +438 -0
- cairndev-0.1.3/src/cairn/core/storage/hydration.py +151 -0
- cairndev-0.1.3/src/cairn/core/storage/judge_labels.py +258 -0
- cairndev-0.1.3/src/cairn/core/storage/judges.py +509 -0
- cairndev-0.1.3/src/cairn/core/storage/knowledge_corpora.py +290 -0
- cairndev-0.1.3/src/cairn/core/storage/memory/__init__.py +7 -0
- cairndev-0.1.3/src/cairn/core/storage/memory/runs.py +160 -0
- cairndev-0.1.3/src/cairn/core/storage/migrations.py +92 -0
- cairndev-0.1.3/src/cairn/core/storage/pipeline_store.py +422 -0
- cairndev-0.1.3/src/cairn/core/storage/postgres/__init__.py +18 -0
- cairndev-0.1.3/src/cairn/core/storage/postgres/pool.py +98 -0
- cairndev-0.1.3/src/cairn/core/storage/postgres/runs.py +571 -0
- cairndev-0.1.3/src/cairn/core/storage/protocols.py +745 -0
- cairndev-0.1.3/src/cairn/core/storage/rag.py +87 -0
- cairndev-0.1.3/src/cairn/core/storage/rag_catalog.py +302 -0
- cairndev-0.1.3/src/cairn/core/storage/respell_packs.py +423 -0
- cairndev-0.1.3/src/cairn/core/storage/retention.py +171 -0
- cairndev-0.1.3/src/cairn/core/storage/reviews.py +405 -0
- cairndev-0.1.3/src/cairn/core/storage/schedule_store.py +428 -0
- cairndev-0.1.3/src/cairn/core/storage/sqlite/__init__.py +10 -0
- cairndev-0.1.3/src/cairn/core/storage/sqlite/runs.py +472 -0
- cairndev-0.1.3/src/cairn/core/storage/suggestions.py +421 -0
- cairndev-0.1.3/src/cairn/core/storage/transitions.py +133 -0
- cairndev-0.1.3/src/cairn/core/storage/trigger_inbox.py +471 -0
- cairndev-0.1.3/src/cairn/core/storage/trigger_store.py +378 -0
- cairndev-0.1.3/src/cairn/core/triggers/__init__.py +54 -0
- cairndev-0.1.3/src/cairn/core/triggers/auth.py +808 -0
- cairndev-0.1.3/src/cairn/core/triggers/console_support.py +329 -0
- cairndev-0.1.3/src/cairn/core/triggers/declared.py +13 -0
- cairndev-0.1.3/src/cairn/core/triggers/feature_gate.py +33 -0
- cairndev-0.1.3/src/cairn/core/triggers/inbox.py +12 -0
- cairndev-0.1.3/src/cairn/core/triggers/main.py +126 -0
- cairndev-0.1.3/src/cairn/core/triggers/mcp.py +179 -0
- cairndev-0.1.3/src/cairn/core/triggers/presets.py +13 -0
- cairndev-0.1.3/src/cairn/core/triggers/provider.py +162 -0
- cairndev-0.1.3/src/cairn/core/triggers/router.py +499 -0
- cairndev-0.1.3/src/cairn/core/triggers/router_providers.py +117 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/__init__.py +9 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/accounts.py +466 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/ingress.py +206 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/jobs.py +165 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/oauth.py +33 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/pipelines.py +877 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/registry.py +198 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/reviews.py +64 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/run_control.py +342 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/runs.py +443 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/schedules.py +282 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/start.py +278 -0
- cairndev-0.1.3/src/cairn/core/triggers/routers/templates.py +184 -0
- cairndev-0.1.3/src/cairn/core/triggers/schedule_store.py +12 -0
- cairndev-0.1.3/src/cairn/core/triggers/server.py +1300 -0
- cairndev-0.1.3/src/cairn/core/triggers/spec.py +13 -0
- cairndev-0.1.3/src/cairn/core/triggers/store.py +12 -0
- cairndev-0.1.3/src/cairn/core/ui_contract.py +360 -0
- cairndev-0.1.3/src/cairn/core/ui_render.py +158 -0
- cairndev-0.1.3/src/cairn/core/validate.py +500 -0
- cairndev-0.1.3/src/cairn/core/workflow_config_store.py +698 -0
- cairndev-0.1.3/src/cairn/core/workflow_registry.py +876 -0
- cairndev-0.1.3/src/cairn/core/workspace.py +404 -0
- cairndev-0.1.3/src/cairn/core/workspace_variables.py +277 -0
- cairndev-0.1.3/src/cairn/pipeline_file.py +190 -0
- cairndev-0.1.3/src/cairn/profiles/__init__.py +37 -0
- cairndev-0.1.3/src/cairn/profiles/local-dev.toml +62 -0
- cairndev-0.1.3/src/cairn/profiles/prod-infisical.toml +34 -0
- cairndev-0.1.3/src/cairn/profiles/sandbox.toml +34 -0
- cairndev-0.1.3/src/cairn/profiles/secure.toml +24 -0
- cairndev-0.1.3/src/cairn/providers/__init__.py +7 -0
- cairndev-0.1.3/src/cairn/providers/vectorstores/__init__.py +8 -0
- cairndev-0.1.3/src/cairn/providers/vectorstores/pinecone.py +38 -0
- cairndev-0.1.3/src/cairn/providers/vectorstores/qdrant.py +196 -0
- cairndev-0.1.3/src/cairn/py.typed +0 -0
- cairndev-0.1.3/src/cairn/services/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/services/data/__init__.py +33 -0
- cairndev-0.1.3/src/cairn/services/data/loaders.py +172 -0
- cairndev-0.1.3/src/cairn/services/data/profile.py +231 -0
- cairndev-0.1.3/src/cairn/services/data/quality.py +173 -0
- cairndev-0.1.3/src/cairn/services/llm/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/services/llm/factory.py +158 -0
- cairndev-0.1.3/src/cairn/services/llm/gateway.py +119 -0
- cairndev-0.1.3/src/cairn/services/llm/redacting.py +135 -0
- cairndev-0.1.3/src/cairn/services/mcp/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/services/mcp/client.py +268 -0
- cairndev-0.1.3/src/cairn/services/mcp/presets.py +70 -0
- cairndev-0.1.3/src/cairn/services/mcp/tool_adapter.py +78 -0
- cairndev-0.1.3/src/cairn/services/memory/__init__.py +0 -0
- cairndev-0.1.3/src/cairn/services/memory/store.py +168 -0
- cairndev-0.1.3/src/cairn/services/memory/writer.py +214 -0
- cairndev-0.1.3/src/cairn/services/rag/__init__.py +45 -0
- cairndev-0.1.3/src/cairn/services/rag/byo.py +117 -0
- cairndev-0.1.3/src/cairn/services/rag/embeddings.py +210 -0
- cairndev-0.1.3/src/cairn/services/rag/idempotency.py +44 -0
- cairndev-0.1.3/src/cairn/services/rag/indexer.py +162 -0
- cairndev-0.1.3/src/cairn/services/rag/ingest.py +251 -0
- cairndev-0.1.3/src/cairn/services/rag/inject.py +157 -0
- cairndev-0.1.3/src/cairn/services/rag/lifecycle.py +175 -0
- cairndev-0.1.3/src/cairn/services/rag/plan.py +97 -0
- cairndev-0.1.3/src/cairn/services/rag/query.py +227 -0
- cairndev-0.1.3/src/cairn/services/rag/readers.py +252 -0
- cairndev-0.1.3/src/cairn/services/rag/roles.py +71 -0
- cairndev-0.1.3/src/cairn/services/rag/schedule.py +123 -0
- cairndev-0.1.3/src/cairn/services/rag/schemas.py +18 -0
- cairndev-0.1.3/src/cairn/services/rag/stores/__init__.py +95 -0
- cairndev-0.1.3/src/cairn/services/rag/stores/base.py +73 -0
- cairndev-0.1.3/src/cairn/services/rag/stores/pgvector.py +341 -0
- cairndev-0.1.3/src/cairn/services/rag/stores/sqlite_vec.py +406 -0
- 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,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,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')"]
|