reflection-agent 2.0.61__tar.gz → 2.0.62__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 (142) hide show
  1. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/.env.example +52 -52
  2. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/.github/workflows/ci.yml +84 -84
  3. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/.gitignore +18 -18
  4. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/AUDIT.md +291 -291
  5. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG.md +445 -445
  6. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.2.0.md +40 -40
  7. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.3.0.md +40 -40
  8. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.3.1.md +26 -26
  9. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.4.0.md +70 -70
  10. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.4.1.md +82 -82
  11. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.5.0.md +89 -89
  12. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.5.1.md +57 -57
  13. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CHANGELOG_v2.5.2.md +84 -84
  14. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/CLAUDE.md +69 -69
  15. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/Dockerfile +71 -71
  16. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/LICENSE +23 -23
  17. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/PKG-INFO +6 -4
  18. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/README.md +250 -250
  19. reflection_agent-2.0.62/VERSION +1 -0
  20. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/env.py +123 -123
  21. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/script.py.mako +26 -26
  22. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/versions/20260202_000000_001_initial_schema.py +258 -258
  23. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/versions/20260202_000001_002_memories_table.py +110 -110
  24. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/versions/20260202_000002_003_session_history.py +95 -95
  25. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/versions/20260203_000000_004_api_key_composite_index.py +45 -45
  26. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic.ini +76 -76
  27. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/docker-compose.yml +118 -118
  28. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/examples/hybrid_routing_example.py +137 -137
  29. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/examples/quickstart.py +220 -220
  30. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/install.sh +228 -228
  31. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/installer/README.txt +76 -76
  32. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/installer/build_installer.py +125 -125
  33. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/installer/cli_installer.py +515 -515
  34. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/installer/installer.spec +78 -78
  35. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/installer/setup_wizard.py +717 -717
  36. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/papers/reflection_security_paper.md +749 -749
  37. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/pyproject.toml +145 -143
  38. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/__init__.py +195 -195
  39. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/__main__.py +10 -10
  40. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/_familiar_setup.py +38 -38
  41. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/auth/__init__.py +45 -45
  42. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/auth/sso.py +894 -894
  43. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/cli.py +498 -498
  44. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/__init__.py +230 -230
  45. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/agent.py +549 -549
  46. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/async_base.py +384 -384
  47. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/async_orchestrator.py +966 -966
  48. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/circuit_breaker.py +512 -512
  49. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/enterprise_tools.py +595 -595
  50. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/executor.py +580 -580
  51. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/extended_tools.py +860 -860
  52. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/memory.py +614 -614
  53. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/orchestrator.py +748 -748
  54. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/providers.py +753 -753
  55. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/providers_async.py +1078 -1078
  56. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/regions.py +518 -518
  57. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/settings.py +287 -287
  58. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/tokens.py +630 -630
  59. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/tools.py +630 -630
  60. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/usage_alerts.py +664 -664
  61. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/core/usage_calculator.py +491 -491
  62. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/__init__.py +68 -68
  63. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/models.py +291 -291
  64. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/postgres.py +142 -142
  65. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/redis.py +144 -144
  66. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/repositories.py +714 -714
  67. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/__init__.py +68 -68
  68. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/app.py +406 -406
  69. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/auth.py +797 -797
  70. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/auth_routes.py +970 -970
  71. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/chat_routes.py +569 -569
  72. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/chat_routes_v2.py +364 -364
  73. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/health.py +524 -524
  74. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/job_routes.py +378 -378
  75. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/lifecycle_routes.py +383 -383
  76. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/quota_middleware.py +316 -316
  77. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/quota_routes.py +466 -466
  78. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/rate_limit.py +426 -425
  79. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/request_context.py +413 -413
  80. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/routes.py +760 -760
  81. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/sso_routes.py +563 -563
  82. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/token_store.py +622 -622
  83. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/gateway/versioning.py +481 -481
  84. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/jobs/__init__.py +728 -728
  85. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/jobs/export_handlers.py +542 -542
  86. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/observability/__init__.py +148 -148
  87. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/observability/logging.py +607 -607
  88. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/observability/metrics.py +701 -701
  89. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/observability/middleware.py +250 -250
  90. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/observability/tracing.py +486 -486
  91. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/routing/__init__.py +24 -24
  92. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/routing/phi_detector.py +165 -165
  93. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/routing/smart_router.py +313 -313
  94. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/services/__init__.py +31 -31
  95. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/services/orchestrator.py +468 -468
  96. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenant_wrappers/__init__.py +81 -81
  97. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenant_wrappers/agent.py +626 -626
  98. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenant_wrappers/channels.py +311 -311
  99. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenant_wrappers/memory.py +597 -597
  100. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenant_wrappers/tools.py +176 -176
  101. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/__init__.py +68 -68
  102. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/context.py +438 -438
  103. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/lifecycle.py +552 -552
  104. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/models.py +617 -617
  105. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/quota_service.py +602 -602
  106. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/tenants/quotas.py +681 -681
  107. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/__init__.py +112 -112
  108. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/exceptions/__init__.py +7 -7
  109. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/exceptions/hierarchy.py +380 -380
  110. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/security/__init__.py +9 -9
  111. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/security/encryption.py +276 -276
  112. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/security/sanitization.py +272 -272
  113. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection_core/security/trust.py +131 -131
  114. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/run.sh +192 -192
  115. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/scripts/generate_secrets.py +177 -177
  116. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/scripts/model_setup.sh +363 -363
  117. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/conftest.py +60 -60
  118. reflection_agent-2.0.62/tests/test_auth_login.py +110 -0
  119. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_constitution.py +314 -314
  120. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_installation.py +116 -116
  121. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_mcp_server.py +295 -285
  122. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_memory_agent.py +369 -369
  123. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_mesh_delegation.py +486 -486
  124. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_mesh_discovery.py +545 -545
  125. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_mesh_memory_bridge.py +639 -637
  126. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_mesh_trust.py +535 -535
  127. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_phi_routing.py +165 -165
  128. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_planner.py +273 -273
  129. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_reflection_core.py +153 -153
  130. reflection_agent-2.0.62/tests/test_self_correction.py +244 -0
  131. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_semantic_memory.py +303 -303
  132. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_skill_handlers.py +214 -214
  133. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_skill_loading.py +126 -126
  134. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_skill_presets.py +160 -160
  135. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_tenant_isolation.py +200 -200
  136. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/test_v2_integration.py +315 -310
  137. reflection_agent-2.0.61/VERSION +0 -1
  138. reflection_agent-2.0.61/tests/test_self_correction.py +0 -251
  139. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/__init__.py +0 -0
  140. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/alembic/versions/__init__.py +0 -0
  141. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/reflection/data/migrations/.gitkeep +0 -0
  142. {reflection_agent-2.0.61 → reflection_agent-2.0.62}/tests/__init__.py +0 -0
@@ -1,52 +1,52 @@
1
- # =============================================================================
2
- # Reflection - Environment Configuration
3
- # =============================================================================
4
- # Copy this file to .env and fill in your values:
5
- # cp .env.example .env
6
- #
7
- # Required settings are marked with [REQUIRED]
8
- # Everything else has sensible defaults
9
- # =============================================================================
10
-
11
- # -- General ------------------------------------------------------------------
12
- ENVIRONMENT=production # development | staging | production
13
- DEBUG=false
14
-
15
- # -- Database [REQUIRED for production] ---------------------------------------
16
- # SQLite is used automatically in development if this is not set
17
- DATABASE_URL=postgresql+asyncpg://reflection:reflection@localhost:5432/reflection
18
-
19
- # -- Redis [REQUIRED for production] ------------------------------------------
20
- # In-memory fallback is used in development if this is not set
21
- REDIS_URL=redis://localhost:6379/0
22
-
23
- # -- LLM Providers (at least one required) ------------------------------------
24
- LLM_DEFAULT_PROVIDER=anthropic # anthropic | openai | ollama
25
-
26
- # Anthropic (recommended)
27
- LLM_ANTHROPIC_API_KEY= # sk-ant-...
28
-
29
- # OpenAI
30
- LLM_OPENAI_API_KEY= # sk-...
31
-
32
- # Ollama (self-hosted, free)
33
- LLM_OLLAMA_URL=http://localhost:11434
34
- LLM_OLLAMA_MODEL=llama3.2
35
-
36
- # -- Security [REQUIRED] -----------------------------------------------------
37
- # Generate with: python3 -c "import secrets; print(secrets.token_urlsafe(64))"
38
- SECURITY_JWT_SECRET_KEY=DEV-ONLY-b2d6d62536a6da9c2a40874fa86e108adce6d0b3228cd2349e476eeb4ae5f34a
39
-
40
- # Generate with: python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
41
- SECURITY_MASTER_ENCRYPTION_KEY=
42
-
43
- # -- HIPAA Compliance (healthcare only) ---------------------------------------
44
- # Set to true to enable automatic PHI routing, audit retention, etc.
45
- # HIPAA_COMPLIANT=false
46
- # PHI_PROVIDER_NAME=ollama
47
- # PHI_MODEL=qwen2.5:7b
48
-
49
- # -- Observability (optional) -------------------------------------------------
50
- OTEL_ENABLED=false
51
- # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
52
- # OTEL_SERVICE_NAME=reflection
1
+ # =============================================================================
2
+ # Reflection - Environment Configuration
3
+ # =============================================================================
4
+ # Copy this file to .env and fill in your values:
5
+ # cp .env.example .env
6
+ #
7
+ # Required settings are marked with [REQUIRED]
8
+ # Everything else has sensible defaults
9
+ # =============================================================================
10
+
11
+ # -- General ------------------------------------------------------------------
12
+ ENVIRONMENT=production # development | staging | production
13
+ DEBUG=false
14
+
15
+ # -- Database [REQUIRED for production] ---------------------------------------
16
+ # SQLite is used automatically in development if this is not set
17
+ DATABASE_URL=postgresql+asyncpg://reflection:reflection@localhost:5432/reflection
18
+
19
+ # -- Redis [REQUIRED for production] ------------------------------------------
20
+ # In-memory fallback is used in development if this is not set
21
+ REDIS_URL=redis://localhost:6379/0
22
+
23
+ # -- LLM Providers (at least one required) ------------------------------------
24
+ LLM_DEFAULT_PROVIDER=anthropic # anthropic | openai | ollama
25
+
26
+ # Anthropic (recommended)
27
+ LLM_ANTHROPIC_API_KEY= # sk-ant-...
28
+
29
+ # OpenAI
30
+ LLM_OPENAI_API_KEY= # sk-...
31
+
32
+ # Ollama (self-hosted, free)
33
+ LLM_OLLAMA_URL=http://localhost:11434
34
+ LLM_OLLAMA_MODEL=llama3.2
35
+
36
+ # -- Security [REQUIRED] -----------------------------------------------------
37
+ # Generate with: python3 -c "import secrets; print(secrets.token_urlsafe(64))"
38
+ SECURITY_JWT_SECRET_KEY=DEV-ONLY-b2d6d62536a6da9c2a40874fa86e108adce6d0b3228cd2349e476eeb4ae5f34a
39
+
40
+ # Generate with: python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
41
+ SECURITY_MASTER_ENCRYPTION_KEY=
42
+
43
+ # -- HIPAA Compliance (healthcare only) ---------------------------------------
44
+ # Set to true to enable automatic PHI routing, audit retention, etc.
45
+ # HIPAA_COMPLIANT=false
46
+ # PHI_PROVIDER_NAME=ollama
47
+ # PHI_MODEL=qwen2.5:7b
48
+
49
+ # -- Observability (optional) -------------------------------------------------
50
+ OTEL_ENABLED=false
51
+ # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
52
+ # OTEL_SERVICE_NAME=reflection
@@ -1,84 +1,84 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main, master, "feat/**"]
6
- pull_request:
7
- branches: [main, master]
8
-
9
- concurrency:
10
- group: ${{ github.workflow }}-${{ github.ref }}
11
- cancel-in-progress: true
12
-
13
- jobs:
14
- lint:
15
- name: Lint
16
- runs-on: ubuntu-latest
17
- steps:
18
- - uses: actions/checkout@v4
19
-
20
- - uses: actions/setup-python@v5
21
- with:
22
- python-version: "3.12"
23
-
24
- - name: Install ruff
25
- run: pip install ruff
26
-
27
- - name: Ruff check
28
- run: ruff check reflection/ reflection_core/
29
-
30
- - name: Ruff format check
31
- run: ruff format --check reflection/ reflection_core/
32
-
33
- test:
34
- name: Test (Python ${{ matrix.python-version }})
35
- runs-on: ubuntu-latest
36
- strategy:
37
- matrix:
38
- python-version: ["3.11", "3.12"]
39
- steps:
40
- - uses: actions/checkout@v4
41
-
42
- - uses: actions/setup-python@v5
43
- with:
44
- python-version: ${{ matrix.python-version }}
45
-
46
- - name: Install dependencies
47
- run: |
48
- pip install --upgrade pip
49
- pip install -e ".[dev]"
50
-
51
- - name: Run tests
52
- run: pytest tests/ -q --tb=short
53
-
54
- verify-imports:
55
- name: Verify Imports
56
- runs-on: ubuntu-latest
57
- steps:
58
- - uses: actions/checkout@v4
59
-
60
- - uses: actions/setup-python@v5
61
- with:
62
- python-version: "3.12"
63
-
64
- - name: Install Reflection
65
- run: |
66
- pip install --upgrade pip
67
- pip install .
68
-
69
- - name: Verify imports
70
- run: |
71
- python -c "import familiar; print(f'familiar {familiar.__version__}')"
72
- python -c "import reflection; print(f'reflection {reflection.__version__}')"
73
-
74
- docker:
75
- name: Docker Build
76
- runs-on: ubuntu-latest
77
- steps:
78
- - uses: actions/checkout@v4
79
-
80
- - name: Build image
81
- run: docker build -t reflection:ci --target production .
82
-
83
- - name: Verify image runs
84
- run: docker run --rm reflection:ci python -c "import reflection; print(f'v{reflection.__version__}')"
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master, "feat/**"]
6
+ pull_request:
7
+ branches: [main, master]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ name: Lint
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.12"
23
+
24
+ - name: Install ruff
25
+ run: pip install ruff
26
+
27
+ - name: Ruff check
28
+ run: ruff check reflection/ reflection_core/
29
+
30
+ - name: Ruff format check
31
+ run: ruff format --check reflection/ reflection_core/
32
+
33
+ test:
34
+ name: Test (Python ${{ matrix.python-version }})
35
+ runs-on: ubuntu-latest
36
+ strategy:
37
+ matrix:
38
+ python-version: ["3.11", "3.12"]
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+
42
+ - uses: actions/setup-python@v5
43
+ with:
44
+ python-version: ${{ matrix.python-version }}
45
+
46
+ - name: Install dependencies
47
+ run: |
48
+ pip install --upgrade pip
49
+ pip install -e ".[dev]"
50
+
51
+ - name: Run tests
52
+ run: pytest tests/ -q --tb=short
53
+
54
+ verify-imports:
55
+ name: Verify Imports
56
+ runs-on: ubuntu-latest
57
+ steps:
58
+ - uses: actions/checkout@v4
59
+
60
+ - uses: actions/setup-python@v5
61
+ with:
62
+ python-version: "3.12"
63
+
64
+ - name: Install Reflection
65
+ run: |
66
+ pip install --upgrade pip
67
+ pip install .
68
+
69
+ - name: Verify imports
70
+ run: |
71
+ python -c "import familiar; print(f'familiar {familiar.__version__}')"
72
+ python -c "import reflection; print(f'reflection {reflection.__version__}')"
73
+
74
+ docker:
75
+ name: Docker Build
76
+ runs-on: ubuntu-latest
77
+ steps:
78
+ - uses: actions/checkout@v4
79
+
80
+ - name: Build image
81
+ run: docker build -t reflection:ci --target production .
82
+
83
+ - name: Verify image runs
84
+ run: docker run --rm reflection:ci python -c "import reflection; print(f'v{reflection.__version__}')"
@@ -1,18 +1,18 @@
1
- *.pyc
2
- __pycache__/
3
- *.egg-info/
4
- dist/
5
- build/
6
- .eggs/
7
- .env
8
- *.db
9
- .venv/
10
- venv/
11
- *.log
12
- *.bak
13
- .DS_Store
14
- .pytest_cache/
15
- .ruff_cache/
16
- *.zip
17
- *.docx
18
- /*.html
1
+ *.pyc
2
+ __pycache__/
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .eggs/
7
+ .env
8
+ *.db
9
+ .venv/
10
+ venv/
11
+ *.log
12
+ *.bak
13
+ .DS_Store
14
+ .pytest_cache/
15
+ .ruff_cache/
16
+ *.zip
17
+ *.docx
18
+ /*.html