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.
Files changed (175) hide show
  1. ko_tasks_server-1.0.0/.gitignore +82 -0
  2. ko_tasks_server-1.0.0/PKG-INFO +253 -0
  3. ko_tasks_server-1.0.0/README.md +190 -0
  4. ko_tasks_server-1.0.0/pyproject.toml +124 -0
  5. ko_tasks_server-1.0.0/src/komus_tasks_server/__init__.py +3 -0
  6. ko_tasks_server-1.0.0/src/komus_tasks_server/access_filter.py +321 -0
  7. ko_tasks_server-1.0.0/src/komus_tasks_server/api/__init__.py +0 -0
  8. ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_environments.py +543 -0
  9. ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_health.py +48 -0
  10. ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_metrics.py +114 -0
  11. ko_tasks_server-1.0.0/src/komus_tasks_server/api/admin_tasks.py +678 -0
  12. ko_tasks_server-1.0.0/src/komus_tasks_server/api/agent.py +286 -0
  13. ko_tasks_server-1.0.0/src/komus_tasks_server/api/artifacts.py +679 -0
  14. ko_tasks_server-1.0.0/src/komus_tasks_server/api/credentials.py +360 -0
  15. ko_tasks_server-1.0.0/src/komus_tasks_server/api/files.py +775 -0
  16. ko_tasks_server-1.0.0/src/komus_tasks_server/api/long_running.py +95 -0
  17. ko_tasks_server-1.0.0/src/komus_tasks_server/api/metadata.py +138 -0
  18. ko_tasks_server-1.0.0/src/komus_tasks_server/api/observability.py +334 -0
  19. ko_tasks_server-1.0.0/src/komus_tasks_server/api/runs.py +248 -0
  20. ko_tasks_server-1.0.0/src/komus_tasks_server/api/schedules.py +723 -0
  21. ko_tasks_server-1.0.0/src/komus_tasks_server/api/settings.py +140 -0
  22. ko_tasks_server-1.0.0/src/komus_tasks_server/api/threads.py +1192 -0
  23. ko_tasks_server-1.0.0/src/komus_tasks_server/api/webhooks.py +511 -0
  24. ko_tasks_server-1.0.0/src/komus_tasks_server/app_middleware.py +330 -0
  25. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/__init__.py +16 -0
  26. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/factory.py +117 -0
  27. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/local.py +47 -0
  28. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/mapping.py +222 -0
  29. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/platform.py +188 -0
  30. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/protocol.py +57 -0
  31. ko_tasks_server-1.0.0/src/komus_tasks_server/artefact_backends/scope_lifecycle.py +80 -0
  32. ko_tasks_server-1.0.0/src/komus_tasks_server/auth.py +108 -0
  33. ko_tasks_server-1.0.0/src/komus_tasks_server/cli/__init__.py +13 -0
  34. ko_tasks_server-1.0.0/src/komus_tasks_server/cli/run_inline.py +155 -0
  35. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/__init__.py +2 -0
  36. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/delivery_engine.py +685 -0
  37. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/event_publisher.py +411 -0
  38. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/filter.py +135 -0
  39. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/payload_builder.py +263 -0
  40. ko_tasks_server-1.0.0/src/komus_tasks_server/delivery/signature.py +133 -0
  41. ko_tasks_server-1.0.0/src/komus_tasks_server/dependencies.py +594 -0
  42. ko_tasks_server-1.0.0/src/komus_tasks_server/errors.py +62 -0
  43. ko_tasks_server-1.0.0/src/komus_tasks_server/execution.py +1015 -0
  44. ko_tasks_server-1.0.0/src/komus_tasks_server/framework.py +744 -0
  45. ko_tasks_server-1.0.0/src/komus_tasks_server/health_endpoints.py +174 -0
  46. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/__init__.py +21 -0
  47. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/database.py +242 -0
  48. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/deployment_tracker_store.py +90 -0
  49. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/idempotency.py +41 -0
  50. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/logger.py +34 -0
  51. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/scheduler.py +31 -0
  52. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/storage.py +102 -0
  53. ko_tasks_server-1.0.0/src/komus_tasks_server/interfaces/task_registry_store.py +139 -0
  54. ko_tasks_server-1.0.0/src/komus_tasks_server/key_hasher.py +58 -0
  55. ko_tasks_server-1.0.0/src/komus_tasks_server/lifecycle.py +494 -0
  56. ko_tasks_server-1.0.0/src/komus_tasks_server/middleware/__init__.py +2 -0
  57. ko_tasks_server-1.0.0/src/komus_tasks_server/middleware/admin_auth.py +85 -0
  58. ko_tasks_server-1.0.0/src/komus_tasks_server/observability/__init__.py +5 -0
  59. ko_tasks_server-1.0.0/src/komus_tasks_server/observability/metrics.py +314 -0
  60. ko_tasks_server-1.0.0/src/komus_tasks_server/observability/otel.py +69 -0
  61. ko_tasks_server-1.0.0/src/komus_tasks_server/observability/structlog_otel.py +33 -0
  62. ko_tasks_server-1.0.0/src/komus_tasks_server/openapi_meta.py +117 -0
  63. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/__init__.py +14 -0
  64. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/__init__.py +37 -0
  65. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/base.py +413 -0
  66. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/client.py +270 -0
  67. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/config_store.py +478 -0
  68. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/credential_store.py +304 -0
  69. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/database.py +751 -0
  70. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/deployment_tracker.py +184 -0
  71. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/file_store.py +228 -0
  72. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/idempotency.py +88 -0
  73. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/index_manager.py +286 -0
  74. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/locks.py +544 -0
  75. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/mapping_validation.py +82 -0
  76. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/mappings.py +447 -0
  77. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/schema_audit.py +510 -0
  78. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/settings_store.py +170 -0
  79. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/task_registry_store.py +254 -0
  80. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/elasticsearch/webhook_db.py +242 -0
  81. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_db.py +1242 -0
  82. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_idempotency.py +106 -0
  83. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/file_task_registry_store.py +374 -0
  84. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/s3/__init__.py +7 -0
  85. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/s3/task_storage.py +304 -0
  86. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/task_deployment_tracker.py +457 -0
  87. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/task_storage.py +468 -0
  88. ko_tasks_server-1.0.0/src/komus_tasks_server/repositories/webhook_db.py +402 -0
  89. ko_tasks_server-1.0.0/src/komus_tasks_server/routers.py +105 -0
  90. ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/__init__.py +2 -0
  91. ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/concurrency.py +267 -0
  92. ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/retry.py +83 -0
  93. ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/scheduler.py +89 -0
  94. ko_tasks_server-1.0.0/src/komus_tasks_server/scheduler/utils.py +69 -0
  95. ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/__init__.py +28 -0
  96. ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/artifact_publisher_impl.py +70 -0
  97. ko_tasks_server-1.0.0/src/komus_tasks_server/sdk_bindings/log_configurator_impl.py +34 -0
  98. ko_tasks_server-1.0.0/src/komus_tasks_server/server.py +157 -0
  99. ko_tasks_server-1.0.0/src/komus_tasks_server/services/__init__.py +14 -0
  100. ko_tasks_server-1.0.0/src/komus_tasks_server/services/agent_gateway.py +623 -0
  101. ko_tasks_server-1.0.0/src/komus_tasks_server/services/artifact_service.py +518 -0
  102. ko_tasks_server-1.0.0/src/komus_tasks_server/services/concurrency_manager.py +261 -0
  103. ko_tasks_server-1.0.0/src/komus_tasks_server/services/configuration_service.py +483 -0
  104. ko_tasks_server-1.0.0/src/komus_tasks_server/services/credential_service.py +295 -0
  105. ko_tasks_server-1.0.0/src/komus_tasks_server/services/encryption_service.py +200 -0
  106. ko_tasks_server-1.0.0/src/komus_tasks_server/services/environment_registry.py +793 -0
  107. ko_tasks_server-1.0.0/src/komus_tasks_server/services/file_log_sink.py +106 -0
  108. ko_tasks_server-1.0.0/src/komus_tasks_server/services/file_service.py +311 -0
  109. ko_tasks_server-1.0.0/src/komus_tasks_server/services/long_running_activation.py +213 -0
  110. ko_tasks_server-1.0.0/src/komus_tasks_server/services/long_running_supervisor.py +731 -0
  111. ko_tasks_server-1.0.0/src/komus_tasks_server/services/observability_service.py +1129 -0
  112. ko_tasks_server-1.0.0/src/komus_tasks_server/services/registry_sync.py +234 -0
  113. ko_tasks_server-1.0.0/src/komus_tasks_server/services/run_service.py +525 -0
  114. ko_tasks_server-1.0.0/src/komus_tasks_server/services/scheduler_service.py +972 -0
  115. ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_bundle.py +187 -0
  116. ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_deployment.py +817 -0
  117. ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_loader.py +729 -0
  118. ko_tasks_server-1.0.0/src/komus_tasks_server/services/task_registry.py +553 -0
  119. ko_tasks_server-1.0.0/src/komus_tasks_server/services/thread_log_buffer.py +343 -0
  120. ko_tasks_server-1.0.0/src/komus_tasks_server/services/thread_service.py +1018 -0
  121. ko_tasks_server-1.0.0/src/komus_tasks_server/services/webhook_service.py +776 -0
  122. ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_manager.py +1060 -0
  123. ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_pool.py +91 -0
  124. ko_tasks_server-1.0.0/src/komus_tasks_server/services/worker_transport.py +432 -0
  125. ko_tasks_server-1.0.0/src/komus_tasks_server/state_transition.py +416 -0
  126. ko_tasks_server-1.0.0/src/komus_tasks_server/storage/__init__.py +7 -0
  127. ko_tasks_server-1.0.0/src/komus_tasks_server/storage/local.py +298 -0
  128. ko_tasks_server-1.0.0/src/komus_tasks_server/storage/s3.py +508 -0
  129. ko_tasks_server-1.0.0/src/komus_tasks_server/storage_factory.py +532 -0
  130. ko_tasks_server-1.0.0/src/komus_tasks_server/tracing.py +205 -0
  131. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/ARCHITECTURE.md +1402 -0
  132. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/README.md +681 -0
  133. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/__init__.py +875 -0
  134. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/api-utils.html +218 -0
  135. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/deliveries-table.html +591 -0
  136. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/live-updates.html +248 -0
  137. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/runs-table.html +613 -0
  138. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/sidebar.html +681 -0
  139. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/components/task-selector.html +403 -0
  140. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/agent-detail.html +231 -0
  141. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/agents.html +222 -0
  142. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/artifacts.html +1418 -0
  143. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/credential-create.html +489 -0
  144. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/credentials.html +481 -0
  145. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/environment-detail.html +1825 -0
  146. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/environments.html +659 -0
  147. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/file-upload.html +855 -0
  148. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/files.html +796 -0
  149. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/index.html +372 -0
  150. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/komus-tasks-console.html +2021 -0
  151. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/long-running.html +352 -0
  152. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/metadata.html +863 -0
  153. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/observability.html +180 -0
  154. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedule-create.html +1045 -0
  155. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedule-details.html +552 -0
  156. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/schedules.html +800 -0
  157. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/settings.html +515 -0
  158. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/system-settings.html +238 -0
  159. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-config.html +596 -0
  160. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-details.html +690 -0
  161. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-upload.html +494 -0
  162. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/task-versions.html +468 -0
  163. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/tasks.html +775 -0
  164. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-artifacts.html +958 -0
  165. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-create.html +1596 -0
  166. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/thread-detail.html +1669 -0
  167. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/threads.html +1257 -0
  168. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhook-create.html +720 -0
  169. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhook-details.html +657 -0
  170. ko_tasks_server-1.0.0/src/komus_tasks_server/ui/pages/webhooks.html +874 -0
  171. ko_tasks_server-1.0.0/src/komus_tasks_server/ui_spa.py +43 -0
  172. ko_tasks_server-1.0.0/src/komus_tasks_server/utils/__init__.py +0 -0
  173. ko_tasks_server-1.0.0/src/komus_tasks_server/utils/metrics_helpers.py +63 -0
  174. ko_tasks_server-1.0.0/src/komus_tasks_server/utils/registry_paths.py +63 -0
  175. 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
+ ]
@@ -0,0 +1,3 @@
1
+ """Komus Tasks Server — Production task execution server."""
2
+
3
+ __all__ = ["KomusTasksServer"]