ko-tasks-server 1.0.0__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.
- ko_tasks_server-1.0.0/.gitignore +82 -0
- ko_tasks_server-1.0.0/PKG-INFO +253 -0
- ko_tasks_server-1.0.0/README.md +190 -0
- ko_tasks_server-1.0.0/pyproject.toml +124 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/__init__.py +3 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/access_filter.py +321 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/__init__.py +0 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_environments.py +543 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_health.py +48 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_metrics.py +114 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_tasks.py +678 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/agent.py +286 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/artifacts.py +679 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/credentials.py +360 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/files.py +775 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/long_running.py +95 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/metadata.py +138 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/observability.py +334 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/runs.py +248 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/schedules.py +723 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/settings.py +140 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/threads.py +1192 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/api/webhooks.py +511 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/app_middleware.py +330 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/__init__.py +16 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/factory.py +117 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/local.py +47 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/mapping.py +222 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/platform.py +188 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/protocol.py +57 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/scope_lifecycle.py +80 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/auth.py +108 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/cli/__init__.py +13 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/cli/run_inline.py +155 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/__init__.py +2 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/delivery_engine.py +685 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/event_publisher.py +411 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/filter.py +135 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/payload_builder.py +263 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/signature.py +133 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/dependencies.py +594 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/errors.py +62 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/execution.py +1015 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/framework.py +744 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/health_endpoints.py +174 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/__init__.py +21 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/database.py +242 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/deployment_tracker_store.py +90 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/idempotency.py +41 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/logger.py +34 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/scheduler.py +31 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/storage.py +102 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/task_registry_store.py +139 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/key_hasher.py +58 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/lifecycle.py +494 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/middleware/__init__.py +2 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/middleware/admin_auth.py +85 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/observability/__init__.py +5 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/observability/metrics.py +314 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/observability/otel.py +69 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/observability/structlog_otel.py +33 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/openapi_meta.py +117 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/__init__.py +14 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/__init__.py +37 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/base.py +413 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/client.py +270 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/config_store.py +478 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/credential_store.py +304 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/database.py +751 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/deployment_tracker.py +184 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/file_store.py +228 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/idempotency.py +88 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/index_manager.py +286 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/locks.py +544 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/mapping_validation.py +82 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/mappings.py +447 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/schema_audit.py +510 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/settings_store.py +170 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/task_registry_store.py +254 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/webhook_db.py +242 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_db.py +1242 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_idempotency.py +106 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_task_registry_store.py +374 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/s3/__init__.py +7 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/s3/task_storage.py +304 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/task_deployment_tracker.py +457 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/task_storage.py +468 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/webhook_db.py +402 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/routers.py +105 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/__init__.py +2 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/concurrency.py +267 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/retry.py +83 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/scheduler.py +89 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/utils.py +69 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/__init__.py +28 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/artifact_publisher_impl.py +70 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/log_configurator_impl.py +34 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/server.py +157 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/__init__.py +14 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/agent_gateway.py +623 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/artifact_service.py +518 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/concurrency_manager.py +261 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/configuration_service.py +483 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/credential_service.py +295 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/encryption_service.py +200 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/environment_registry.py +793 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/file_log_sink.py +106 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/file_service.py +311 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/long_running_activation.py +213 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/long_running_supervisor.py +731 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/observability_service.py +1129 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/registry_sync.py +234 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/run_service.py +525 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/scheduler_service.py +972 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_bundle.py +187 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_deployment.py +817 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_loader.py +729 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_registry.py +553 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/thread_log_buffer.py +343 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/thread_service.py +1018 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/webhook_service.py +776 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_manager.py +1060 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_pool.py +91 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_transport.py +432 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/state_transition.py +416 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/storage/__init__.py +7 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/storage/local.py +298 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/storage/s3.py +508 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/storage_factory.py +532 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/tracing.py +205 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/ARCHITECTURE.md +1402 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/README.md +681 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/__init__.py +875 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/api-utils.html +218 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/deliveries-table.html +591 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/live-updates.html +248 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/runs-table.html +613 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/sidebar.html +681 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/task-selector.html +403 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/agent-detail.html +231 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/agents.html +222 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/artifacts.html +1418 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/credential-create.html +489 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/credentials.html +481 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/environment-detail.html +1825 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/environments.html +659 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/file-upload.html +855 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/files.html +796 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/index.html +372 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/komus-tasks-console.html +2021 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/long-running.html +352 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/metadata.html +863 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/observability.html +180 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedule-create.html +1045 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedule-details.html +552 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedules.html +800 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/settings.html +515 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/system-settings.html +238 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-config.html +596 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-details.html +690 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-upload.html +494 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-versions.html +468 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/tasks.html +775 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-artifacts.html +958 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-create.html +1596 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-detail.html +1669 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/threads.html +1257 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhook-create.html +720 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhook-details.html +657 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhooks.html +874 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/ui_spa.py +43 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/utils/__init__.py +0 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/utils/metrics_helpers.py +63 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/utils/registry_paths.py +63 -0
- ko_tasks_server-1.0.0/src/komus_tasks_server/version.py +57 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
.eggs/
|
|
10
|
+
*.whl
|
|
11
|
+
|
|
12
|
+
# Virtual environments
|
|
13
|
+
.venv/
|
|
14
|
+
venv/
|
|
15
|
+
env/
|
|
16
|
+
|
|
17
|
+
# IDE
|
|
18
|
+
.vscode/
|
|
19
|
+
.idea/
|
|
20
|
+
*.swp
|
|
21
|
+
*.swo
|
|
22
|
+
*~
|
|
23
|
+
|
|
24
|
+
# Node
|
|
25
|
+
node_modules/
|
|
26
|
+
npm-debug.log*
|
|
27
|
+
|
|
28
|
+
# OS
|
|
29
|
+
.DS_Store
|
|
30
|
+
Thumbs.db
|
|
31
|
+
|
|
32
|
+
# Testing
|
|
33
|
+
.pytest_cache/
|
|
34
|
+
.coverage
|
|
35
|
+
htmlcov/
|
|
36
|
+
.tox/
|
|
37
|
+
|
|
38
|
+
# uv
|
|
39
|
+
uv.lock
|
|
40
|
+
|
|
41
|
+
# Generated scaffold E2E tasks (examples/test_scaffold_combinations_e2e.py)
|
|
42
|
+
examples/_scaffold_e2e/
|
|
43
|
+
|
|
44
|
+
# Data directories (local dev)
|
|
45
|
+
data/
|
|
46
|
+
test-data/
|
|
47
|
+
*.db
|
|
48
|
+
*.sqlite3
|
|
49
|
+
|
|
50
|
+
# Test fixture runtime artefacts (written by test runs)
|
|
51
|
+
packages/server/tests/fixtures/*/environments/
|
|
52
|
+
packages/server/tests/fixtures/*/task_registry.json
|
|
53
|
+
packages/server/tests/fixtures/*/*-data/
|
|
54
|
+
packages/server/tests/fixtures/*/node-test-data/
|
|
55
|
+
|
|
56
|
+
# Package builds
|
|
57
|
+
packages/sdk-python/dist/
|
|
58
|
+
packages/server/dist/
|
|
59
|
+
|
|
60
|
+
# Worktrees
|
|
61
|
+
.worktrees/
|
|
62
|
+
|
|
63
|
+
# Secrets
|
|
64
|
+
.env
|
|
65
|
+
.env.local
|
|
66
|
+
.env.production
|
|
67
|
+
.env.otel
|
|
68
|
+
.env.otel-platform
|
|
69
|
+
.env.prod-e2e
|
|
70
|
+
.gitnexus
|
|
71
|
+
uv.lock
|
|
72
|
+
packages/ui-react/.next
|
|
73
|
+
packages/ui-react/out
|
|
74
|
+
.claude/skills
|
|
75
|
+
.claude/skills/gitnexus
|
|
76
|
+
.claude/skills/gitnexus/gitnexus-cli/SKILL.md
|
|
77
|
+
.claude/skills/gitnexus/gitnexus-debugging/SKILL.md
|
|
78
|
+
.claude/skills/gitnexus/gitnexus-exploring/SKILL.md
|
|
79
|
+
.claude/skills/gitnexus/gitnexus-guide/SKILL.md
|
|
80
|
+
.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md
|
|
81
|
+
.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md
|
|
82
|
+
.claude/
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: ko-tasks-server
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Komus Tasks server — deploy, schedule, and manage task workflows with a web UI, webhooks, and REST API
|
|
5
|
+
Project-URL: Documentation, https://github.com/Komus-ai/ko-tasks-platform#readme
|
|
6
|
+
Project-URL: Repository, https://github.com/Komus-ai/ko-tasks-platform
|
|
7
|
+
Project-URL: Issues, https://github.com/Komus-ai/ko-tasks-platform/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/Komus-ai/ko-tasks-platform/blob/main/CHANGELOG.md
|
|
9
|
+
Author-email: "Komus.ai" <codir@komus.ai>
|
|
10
|
+
License: MIT
|
|
11
|
+
Keywords: async,fastapi,observability,scheduling,server,task,webhooks,workflow
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Framework :: FastAPI
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: System Administrators
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.13
|
|
24
|
+
Requires-Dist: aiofiles>=24.1.0
|
|
25
|
+
Requires-Dist: apscheduler>=3.11.0
|
|
26
|
+
Requires-Dist: cryptography>=43.0.0
|
|
27
|
+
Requires-Dist: fastapi>=0.115.0
|
|
28
|
+
Requires-Dist: jsonschema>=4.23.0
|
|
29
|
+
Requires-Dist: ko-observability[elasticsearch,fastapi,httpx]<0.3,>=0.2.0
|
|
30
|
+
Requires-Dist: ko-tasks-sdk>=1.0.0
|
|
31
|
+
Requires-Dist: packaging>=24.0
|
|
32
|
+
Requires-Dist: python-multipart>=0.0.9
|
|
33
|
+
Requires-Dist: slowapi>=0.1.9
|
|
34
|
+
Requires-Dist: uvicorn[standard]>=0.32.0
|
|
35
|
+
Provides-Extra: all
|
|
36
|
+
Requires-Dist: aiobotocore>=3.4.0; extra == 'all'
|
|
37
|
+
Requires-Dist: boto3>=1.34.0; extra == 'all'
|
|
38
|
+
Requires-Dist: elasticsearch[async]>=9.0.0; extra == 'all'
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: boto3<2.0,>=1.35; extra == 'dev'
|
|
41
|
+
Requires-Dist: httpx>=0.27.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: pytest>=8.3.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: pyyaml>=6.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
48
|
+
Provides-Extra: elasticsearch
|
|
49
|
+
Requires-Dist: elasticsearch[async]>=9.0.0; extra == 'elasticsearch'
|
|
50
|
+
Provides-Extra: observability
|
|
51
|
+
Requires-Dist: ko-observability[elasticsearch,fastapi,httpx]<0.3,>=0.2.0; extra == 'observability'
|
|
52
|
+
Provides-Extra: s3
|
|
53
|
+
Requires-Dist: aiobotocore>=3.4.0; extra == 's3'
|
|
54
|
+
Requires-Dist: boto3>=1.34.0; extra == 's3'
|
|
55
|
+
Provides-Extra: test
|
|
56
|
+
Requires-Dist: httpx>=0.27.0; extra == 'test'
|
|
57
|
+
Requires-Dist: playwright>=1.40.0; extra == 'test'
|
|
58
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'test'
|
|
59
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
|
|
60
|
+
Requires-Dist: pytest-playwright>=0.4.0; extra == 'test'
|
|
61
|
+
Requires-Dist: pytest>=8.3.0; extra == 'test'
|
|
62
|
+
Description-Content-Type: text/markdown
|
|
63
|
+
|
|
64
|
+
# Komus Tasks Server
|
|
65
|
+
|
|
66
|
+
Production-grade task execution server with web UI, webhooks, scheduling, and multi-task support.
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
First public PyPI release: **1.0.0**.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install ko-tasks-server
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Quick Start
|
|
77
|
+
|
|
78
|
+
### Start the server
|
|
79
|
+
|
|
80
|
+
`ko-tasks-server` takes no flags — configure it with environment variables:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
export PORT=3000
|
|
84
|
+
export BASE_PATH=/var/lib/ko-tasks-server
|
|
85
|
+
export API_KEYS=your-api-key
|
|
86
|
+
export ADMIN_API_KEYS=your-admin-key
|
|
87
|
+
ko-tasks-server
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Access
|
|
91
|
+
|
|
92
|
+
| Endpoint | Description |
|
|
93
|
+
|----------|-------------|
|
|
94
|
+
| `http://localhost:3000/ui` | Komus Tasks Console (default dashboard) |
|
|
95
|
+
| `http://localhost:3000/ui-old` | Legacy htmx web dashboard |
|
|
96
|
+
| `http://localhost:3000/docs` | OpenAPI Documentation |
|
|
97
|
+
| `http://localhost:3000/health` | Health Check |
|
|
98
|
+
| `http://localhost:3000/metrics` | Prometheus Metrics |
|
|
99
|
+
|
|
100
|
+
## Configuration
|
|
101
|
+
|
|
102
|
+
### Environment Variables
|
|
103
|
+
|
|
104
|
+
| Variable | Default | Description |
|
|
105
|
+
|----------|---------|-------------|
|
|
106
|
+
| `PORT` | `3000` | Server port |
|
|
107
|
+
| `BASE_PATH` | `./data` | Base path for data storage |
|
|
108
|
+
| `API_KEYS` | — | Comma-separated API keys for client auth |
|
|
109
|
+
| `ADMIN_API_KEYS` | — | Comma-separated admin API keys |
|
|
110
|
+
| `STORAGE_TYPE` | `file` | Record/database backend: `file` or `elasticsearch` |
|
|
111
|
+
| `FILE_STORAGE_TYPE` | `local` | File storage backend: `local` or `s3` |
|
|
112
|
+
| `LOG_LEVEL` | `INFO` | Logging level |
|
|
113
|
+
|
|
114
|
+
### S3 Storage (optional)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
export FILE_STORAGE_TYPE=s3
|
|
118
|
+
export S3_BUCKET=my-task-artifacts
|
|
119
|
+
export S3_REGION=eu-west-1
|
|
120
|
+
export AWS_ACCESS_KEY_ID=...
|
|
121
|
+
export AWS_SECRET_ACCESS_KEY=...
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Elasticsearch (optional)
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
export STORAGE_TYPE=elasticsearch
|
|
128
|
+
export ELASTICSEARCH_HOSTS=http://localhost:9200
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Deployment
|
|
132
|
+
|
|
133
|
+
### Docker
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
docker build -t ko-tasks-server .
|
|
137
|
+
docker run -p 3000:3000 \
|
|
138
|
+
-e API_KEYS=your-key \
|
|
139
|
+
-e ADMIN_API_KEYS=your-admin-key \
|
|
140
|
+
-v ./data:/data \
|
|
141
|
+
ko-tasks-server
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Docker Compose
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
docker-compose up -d
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Pre-configured variants:
|
|
151
|
+
- `docker-compose.yml` — Basic setup
|
|
152
|
+
- `docker-compose.elasticsearch.yml` — With Elasticsearch
|
|
153
|
+
- `docker-compose.cloud.yml` — Cloud-ready with S3
|
|
154
|
+
- `docker-compose.standalone.yml` — Standalone mode
|
|
155
|
+
|
|
156
|
+
## API Overview
|
|
157
|
+
|
|
158
|
+
### Task Management (Admin)
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Deploy a task
|
|
162
|
+
curl -X POST http://localhost:3000/admin/tasks \
|
|
163
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
164
|
+
-F "file=@my-task-1.0.0.zip"
|
|
165
|
+
|
|
166
|
+
# List deployed tasks
|
|
167
|
+
curl http://localhost:3000/admin/tasks \
|
|
168
|
+
-H "X-Admin-API-Key: your-admin-key"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Thread Execution
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Create and run a thread
|
|
175
|
+
curl -X POST http://localhost:3000/threads \
|
|
176
|
+
-H "X-API-Key: your-key" \
|
|
177
|
+
-H "X-App-Id: my-app" \
|
|
178
|
+
-H "X-User-Id: user-1" \
|
|
179
|
+
-H "Content-Type: application/json" \
|
|
180
|
+
-d '{"mode": "sync", "inputs": [{"kind": "text", "text": "Hello"}]}'
|
|
181
|
+
|
|
182
|
+
# Get thread status
|
|
183
|
+
curl http://localhost:3000/threads/{thread_id} \
|
|
184
|
+
-H "X-API-Key: your-key"
|
|
185
|
+
|
|
186
|
+
# Pause/Resume
|
|
187
|
+
curl -X POST http://localhost:3000/threads/{thread_id}:pause \
|
|
188
|
+
-H "X-API-Key: your-key"
|
|
189
|
+
curl -X POST http://localhost:3000/threads/{thread_id}:resume \
|
|
190
|
+
-H "X-API-Key: your-key"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Webhooks
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Create a webhook
|
|
197
|
+
curl -X POST http://localhost:3000/webhooks \
|
|
198
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
199
|
+
-H "Content-Type: application/json" \
|
|
200
|
+
-d '{
|
|
201
|
+
"url": "https://hooks.example.com/task-events",
|
|
202
|
+
"events": ["thread.succeeded", "thread.failed"],
|
|
203
|
+
"secret": "webhook-signing-secret"
|
|
204
|
+
}'
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Schedules
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Create a schedule
|
|
211
|
+
curl -X POST http://localhost:3000/schedules \
|
|
212
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
213
|
+
-H "Content-Type: application/json" \
|
|
214
|
+
-d '{
|
|
215
|
+
"task_id": "my-task",
|
|
216
|
+
"cron": "0 8 * * MON",
|
|
217
|
+
"timezone": "Europe/Paris",
|
|
218
|
+
"inputs": [{"kind": "text", "text": "Weekly run"}]
|
|
219
|
+
}'
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Features
|
|
223
|
+
|
|
224
|
+
- **Multi-task deployment** with isolated code + venv per task
|
|
225
|
+
- **Worker subprocess isolation** with JSON Lines IPC
|
|
226
|
+
- **Progress, pause, resume, cancel** — cooperative task control
|
|
227
|
+
- **Python & Node.js** task runtimes
|
|
228
|
+
- **Web Dashboard** — full CRUD for all resources
|
|
229
|
+
- **Webhook system** — HMAC-signed, scoped, with delivery tracking
|
|
230
|
+
- **Cron scheduling** — with concurrency policies
|
|
231
|
+
- **Artifact management** — local or S3 storage
|
|
232
|
+
- **Credential vault** — AES-encrypted secret storage
|
|
233
|
+
- **Prometheus metrics** — request counts, durations, thread states
|
|
234
|
+
- **Idempotency** — duplicate request detection
|
|
235
|
+
|
|
236
|
+
## Development
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Clone and setup
|
|
240
|
+
git clone https://github.com/Komus-ai/ko-tasks-platform.git
|
|
241
|
+
cd ko-tasks-platform
|
|
242
|
+
uv sync
|
|
243
|
+
|
|
244
|
+
# Run server tests
|
|
245
|
+
uv run --package ko-tasks-server pytest packages/server/tests/ -v
|
|
246
|
+
|
|
247
|
+
# Start dev server
|
|
248
|
+
uv run --package ko-tasks-server python -m komus_tasks_server.server
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## License
|
|
252
|
+
|
|
253
|
+
MIT
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Komus Tasks Server
|
|
2
|
+
|
|
3
|
+
Production-grade task execution server with web UI, webhooks, scheduling, and multi-task support.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
First public PyPI release: **1.0.0**.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install ko-tasks-server
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
### Start the server
|
|
16
|
+
|
|
17
|
+
`ko-tasks-server` takes no flags — configure it with environment variables:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
export PORT=3000
|
|
21
|
+
export BASE_PATH=/var/lib/ko-tasks-server
|
|
22
|
+
export API_KEYS=your-api-key
|
|
23
|
+
export ADMIN_API_KEYS=your-admin-key
|
|
24
|
+
ko-tasks-server
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Access
|
|
28
|
+
|
|
29
|
+
| Endpoint | Description |
|
|
30
|
+
|----------|-------------|
|
|
31
|
+
| `http://localhost:3000/ui` | Komus Tasks Console (default dashboard) |
|
|
32
|
+
| `http://localhost:3000/ui-old` | Legacy htmx web dashboard |
|
|
33
|
+
| `http://localhost:3000/docs` | OpenAPI Documentation |
|
|
34
|
+
| `http://localhost:3000/health` | Health Check |
|
|
35
|
+
| `http://localhost:3000/metrics` | Prometheus Metrics |
|
|
36
|
+
|
|
37
|
+
## Configuration
|
|
38
|
+
|
|
39
|
+
### Environment Variables
|
|
40
|
+
|
|
41
|
+
| Variable | Default | Description |
|
|
42
|
+
|----------|---------|-------------|
|
|
43
|
+
| `PORT` | `3000` | Server port |
|
|
44
|
+
| `BASE_PATH` | `./data` | Base path for data storage |
|
|
45
|
+
| `API_KEYS` | — | Comma-separated API keys for client auth |
|
|
46
|
+
| `ADMIN_API_KEYS` | — | Comma-separated admin API keys |
|
|
47
|
+
| `STORAGE_TYPE` | `file` | Record/database backend: `file` or `elasticsearch` |
|
|
48
|
+
| `FILE_STORAGE_TYPE` | `local` | File storage backend: `local` or `s3` |
|
|
49
|
+
| `LOG_LEVEL` | `INFO` | Logging level |
|
|
50
|
+
|
|
51
|
+
### S3 Storage (optional)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
export FILE_STORAGE_TYPE=s3
|
|
55
|
+
export S3_BUCKET=my-task-artifacts
|
|
56
|
+
export S3_REGION=eu-west-1
|
|
57
|
+
export AWS_ACCESS_KEY_ID=...
|
|
58
|
+
export AWS_SECRET_ACCESS_KEY=...
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Elasticsearch (optional)
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
export STORAGE_TYPE=elasticsearch
|
|
65
|
+
export ELASTICSEARCH_HOSTS=http://localhost:9200
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Deployment
|
|
69
|
+
|
|
70
|
+
### Docker
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
docker build -t ko-tasks-server .
|
|
74
|
+
docker run -p 3000:3000 \
|
|
75
|
+
-e API_KEYS=your-key \
|
|
76
|
+
-e ADMIN_API_KEYS=your-admin-key \
|
|
77
|
+
-v ./data:/data \
|
|
78
|
+
ko-tasks-server
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Docker Compose
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
docker-compose up -d
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Pre-configured variants:
|
|
88
|
+
- `docker-compose.yml` — Basic setup
|
|
89
|
+
- `docker-compose.elasticsearch.yml` — With Elasticsearch
|
|
90
|
+
- `docker-compose.cloud.yml` — Cloud-ready with S3
|
|
91
|
+
- `docker-compose.standalone.yml` — Standalone mode
|
|
92
|
+
|
|
93
|
+
## API Overview
|
|
94
|
+
|
|
95
|
+
### Task Management (Admin)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Deploy a task
|
|
99
|
+
curl -X POST http://localhost:3000/admin/tasks \
|
|
100
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
101
|
+
-F "file=@my-task-1.0.0.zip"
|
|
102
|
+
|
|
103
|
+
# List deployed tasks
|
|
104
|
+
curl http://localhost:3000/admin/tasks \
|
|
105
|
+
-H "X-Admin-API-Key: your-admin-key"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Thread Execution
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Create and run a thread
|
|
112
|
+
curl -X POST http://localhost:3000/threads \
|
|
113
|
+
-H "X-API-Key: your-key" \
|
|
114
|
+
-H "X-App-Id: my-app" \
|
|
115
|
+
-H "X-User-Id: user-1" \
|
|
116
|
+
-H "Content-Type: application/json" \
|
|
117
|
+
-d '{"mode": "sync", "inputs": [{"kind": "text", "text": "Hello"}]}'
|
|
118
|
+
|
|
119
|
+
# Get thread status
|
|
120
|
+
curl http://localhost:3000/threads/{thread_id} \
|
|
121
|
+
-H "X-API-Key: your-key"
|
|
122
|
+
|
|
123
|
+
# Pause/Resume
|
|
124
|
+
curl -X POST http://localhost:3000/threads/{thread_id}:pause \
|
|
125
|
+
-H "X-API-Key: your-key"
|
|
126
|
+
curl -X POST http://localhost:3000/threads/{thread_id}:resume \
|
|
127
|
+
-H "X-API-Key: your-key"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Webhooks
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Create a webhook
|
|
134
|
+
curl -X POST http://localhost:3000/webhooks \
|
|
135
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
136
|
+
-H "Content-Type: application/json" \
|
|
137
|
+
-d '{
|
|
138
|
+
"url": "https://hooks.example.com/task-events",
|
|
139
|
+
"events": ["thread.succeeded", "thread.failed"],
|
|
140
|
+
"secret": "webhook-signing-secret"
|
|
141
|
+
}'
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Schedules
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Create a schedule
|
|
148
|
+
curl -X POST http://localhost:3000/schedules \
|
|
149
|
+
-H "X-Admin-API-Key: your-admin-key" \
|
|
150
|
+
-H "Content-Type: application/json" \
|
|
151
|
+
-d '{
|
|
152
|
+
"task_id": "my-task",
|
|
153
|
+
"cron": "0 8 * * MON",
|
|
154
|
+
"timezone": "Europe/Paris",
|
|
155
|
+
"inputs": [{"kind": "text", "text": "Weekly run"}]
|
|
156
|
+
}'
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Features
|
|
160
|
+
|
|
161
|
+
- **Multi-task deployment** with isolated code + venv per task
|
|
162
|
+
- **Worker subprocess isolation** with JSON Lines IPC
|
|
163
|
+
- **Progress, pause, resume, cancel** — cooperative task control
|
|
164
|
+
- **Python & Node.js** task runtimes
|
|
165
|
+
- **Web Dashboard** — full CRUD for all resources
|
|
166
|
+
- **Webhook system** — HMAC-signed, scoped, with delivery tracking
|
|
167
|
+
- **Cron scheduling** — with concurrency policies
|
|
168
|
+
- **Artifact management** — local or S3 storage
|
|
169
|
+
- **Credential vault** — AES-encrypted secret storage
|
|
170
|
+
- **Prometheus metrics** — request counts, durations, thread states
|
|
171
|
+
- **Idempotency** — duplicate request detection
|
|
172
|
+
|
|
173
|
+
## Development
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Clone and setup
|
|
177
|
+
git clone https://github.com/Komus-ai/ko-tasks-platform.git
|
|
178
|
+
cd ko-tasks-platform
|
|
179
|
+
uv sync
|
|
180
|
+
|
|
181
|
+
# Run server tests
|
|
182
|
+
uv run --package ko-tasks-server pytest packages/server/tests/ -v
|
|
183
|
+
|
|
184
|
+
# Start dev server
|
|
185
|
+
uv run --package ko-tasks-server python -m komus_tasks_server.server
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
MIT
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ko-tasks-server"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Komus Tasks server — deploy, schedule, and manage task workflows with a web UI, webhooks, and REST API"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.13"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Komus.ai", email = "codir@komus.ai"}
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"task",
|
|
17
|
+
"server",
|
|
18
|
+
"workflow",
|
|
19
|
+
"scheduling",
|
|
20
|
+
"webhooks",
|
|
21
|
+
"fastapi",
|
|
22
|
+
"async",
|
|
23
|
+
"observability",
|
|
24
|
+
]
|
|
25
|
+
classifiers = [
|
|
26
|
+
"Development Status :: 4 - Beta",
|
|
27
|
+
"Intended Audience :: Developers",
|
|
28
|
+
"Intended Audience :: System Administrators",
|
|
29
|
+
"License :: OSI Approved :: MIT License",
|
|
30
|
+
"Operating System :: OS Independent",
|
|
31
|
+
"Programming Language :: Python :: 3",
|
|
32
|
+
"Programming Language :: Python :: 3.13",
|
|
33
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
34
|
+
"Topic :: System :: Distributed Computing",
|
|
35
|
+
"Framework :: FastAPI",
|
|
36
|
+
"Typing :: Typed",
|
|
37
|
+
]
|
|
38
|
+
dependencies = [
|
|
39
|
+
"ko-tasks-sdk>=1.0.0",
|
|
40
|
+
"ko-observability[fastapi,httpx,elasticsearch]>=0.2.0,<0.3",
|
|
41
|
+
"fastapi>=0.115.0",
|
|
42
|
+
"uvicorn[standard]>=0.32.0",
|
|
43
|
+
"aiofiles>=24.1.0",
|
|
44
|
+
"cryptography>=43.0.0",
|
|
45
|
+
"python-multipart>=0.0.9",
|
|
46
|
+
"apscheduler>=3.11.0",
|
|
47
|
+
"jsonschema>=4.23.0",
|
|
48
|
+
"packaging>=24.0",
|
|
49
|
+
"slowapi>=0.1.9",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[project.urls]
|
|
53
|
+
Documentation = "https://github.com/Komus-ai/ko-tasks-platform#readme"
|
|
54
|
+
Repository = "https://github.com/Komus-ai/ko-tasks-platform"
|
|
55
|
+
Issues = "https://github.com/Komus-ai/ko-tasks-platform/issues"
|
|
56
|
+
Changelog = "https://github.com/Komus-ai/ko-tasks-platform/blob/main/CHANGELOG.md"
|
|
57
|
+
|
|
58
|
+
[project.scripts]
|
|
59
|
+
ko-tasks-server = "komus_tasks_server.server:main"
|
|
60
|
+
|
|
61
|
+
[project.optional-dependencies]
|
|
62
|
+
dev = [
|
|
63
|
+
"pytest>=8.3.0",
|
|
64
|
+
"pytest-asyncio>=0.24.0",
|
|
65
|
+
"pytest-cov>=4.1.0",
|
|
66
|
+
"ruff>=0.8.0",
|
|
67
|
+
"httpx>=0.27.0",
|
|
68
|
+
"boto3>=1.35,<2.0",
|
|
69
|
+
"pyyaml>=6.0",
|
|
70
|
+
"hypothesis>=6.100",
|
|
71
|
+
]
|
|
72
|
+
test = [
|
|
73
|
+
"pytest>=8.3.0",
|
|
74
|
+
"pytest-asyncio>=0.24.0",
|
|
75
|
+
"pytest-cov>=4.1.0",
|
|
76
|
+
"httpx>=0.27.0",
|
|
77
|
+
"playwright>=1.40.0",
|
|
78
|
+
"pytest-playwright>=0.4.0",
|
|
79
|
+
]
|
|
80
|
+
elasticsearch = [
|
|
81
|
+
"elasticsearch[async]>=9.0.0",
|
|
82
|
+
]
|
|
83
|
+
s3 = [
|
|
84
|
+
"aiobotocore>=3.4.0",
|
|
85
|
+
"boto3>=1.34.0",
|
|
86
|
+
]
|
|
87
|
+
# Kept so `ko-tasks-server[observability]` still resolves. Bootstrap itself
|
|
88
|
+
# now comes from the main `ko-observability` dependency.
|
|
89
|
+
observability = [
|
|
90
|
+
"ko-observability[fastapi,httpx,elasticsearch]>=0.2.0,<0.3",
|
|
91
|
+
]
|
|
92
|
+
# [platform] extra intentionally omitted until artefact-platform-sdk is
|
|
93
|
+
# published to PyPI. Install via path for local dev:
|
|
94
|
+
# uv pip install -e /path/to/artefact-platform/packages/sdk-python
|
|
95
|
+
# See docs/artefact-backends.md for deployment guidance.
|
|
96
|
+
all = [
|
|
97
|
+
"elasticsearch[async]>=9.0.0",
|
|
98
|
+
"aiobotocore>=3.4.0",
|
|
99
|
+
"boto3>=1.34.0",
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
[tool.hatch.build.targets.wheel]
|
|
103
|
+
packages = ["src/komus_tasks_server"]
|
|
104
|
+
|
|
105
|
+
[tool.hatch.build.targets.sdist]
|
|
106
|
+
include = ["src/komus_tasks_server"]
|
|
107
|
+
|
|
108
|
+
[tool.pytest.ini_options]
|
|
109
|
+
markers = [
|
|
110
|
+
"integration: integration tests against a real server",
|
|
111
|
+
"e2e_cli: E2E CLI tests (real CLI commands against a real server)",
|
|
112
|
+
"e2e_otel: end-to-end OTel pipeline tests (require docker compose)",
|
|
113
|
+
"e2e_otel_hardening: opt-in OTel hardening smoke tests (RUN_OTEL_HARDENING_E2E=1)",
|
|
114
|
+
"e2e_business: opt-in E2E business scenario tests (RUN_E2E_BUSINESS=1)",
|
|
115
|
+
"schema_audit: static strict ES mapping vs sample docs (no live cluster)",
|
|
116
|
+
"prod_e2e_core: Mandatory ★ scenarios on file+local × python",
|
|
117
|
+
"prod_e2e_runtime: Mandatory ★ × both runtimes",
|
|
118
|
+
"prod_e2e_storage: Mandatory ★ × full storage matrix",
|
|
119
|
+
"prod_e2e_full: All 138 scenarios × full matrix × both runtimes",
|
|
120
|
+
"prod_e2e_ui: UI-flow scenarios replaying htmx UI HTTP call sequences (group U)",
|
|
121
|
+
"chaos: Sustained-load or fault-injection scenario",
|
|
122
|
+
"matrix_runtime: Parametrized over python + node runtimes",
|
|
123
|
+
"matrix_storage: Parametrized over file+local, file+s3, es+local, es+s3",
|
|
124
|
+
]
|