tqdaemon 0.8.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 (625) hide show
  1. tqdaemon-0.8.0/.github/ISSUE_TEMPLATE/bug_report.yml +28 -0
  2. tqdaemon-0.8.0/.github/ISSUE_TEMPLATE/config.yml +1 -0
  3. tqdaemon-0.8.0/.github/ISSUE_TEMPLATE/feature_request.yml +15 -0
  4. tqdaemon-0.8.0/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  5. tqdaemon-0.8.0/.github/dependabot.yml +14 -0
  6. tqdaemon-0.8.0/.github/workflows/ci.yml +36 -0
  7. tqdaemon-0.8.0/.github/workflows/pages.yml +33 -0
  8. tqdaemon-0.8.0/.gitignore +18 -0
  9. tqdaemon-0.8.0/AGENTS.md +27 -0
  10. tqdaemon-0.8.0/CHANGELOG.md +56 -0
  11. tqdaemon-0.8.0/CLAUDE.md +10 -0
  12. tqdaemon-0.8.0/CODE_OF_CONDUCT.md +5 -0
  13. tqdaemon-0.8.0/CONTRIBUTING.md +28 -0
  14. tqdaemon-0.8.0/LICENSE +21 -0
  15. tqdaemon-0.8.0/PKG-INFO +96 -0
  16. tqdaemon-0.8.0/README.ar.md +65 -0
  17. tqdaemon-0.8.0/README.md +73 -0
  18. tqdaemon-0.8.0/README.pl.md +65 -0
  19. tqdaemon-0.8.0/README.zh.md +63 -0
  20. tqdaemon-0.8.0/SECURITY.md +9 -0
  21. tqdaemon-0.8.0/clients/README.md +86 -0
  22. tqdaemon-0.8.0/clients/cpp/example_checkpoint.cpp +24 -0
  23. tqdaemon-0.8.0/clients/cpp/example_progress.cpp +12 -0
  24. tqdaemon-0.8.0/clients/cpp/tq_client.hpp +337 -0
  25. tqdaemon-0.8.0/clients/python/tq_client.py +304 -0
  26. tqdaemon-0.8.0/docs/README.md +40 -0
  27. tqdaemon-0.8.0/docs/WORKER_SETUP.md +499 -0
  28. tqdaemon-0.8.0/docs/agents/README.md +13 -0
  29. tqdaemon-0.8.0/docs/agents/recipes.md +120 -0
  30. tqdaemon-0.8.0/docs/agents/task-script-cookbook.md +92 -0
  31. tqdaemon-0.8.0/docs/assets/demo.gif +0 -0
  32. tqdaemon-0.8.0/docs/assets/demo.gif.sha +1 -0
  33. tqdaemon-0.8.0/docs/assets/hero.jpg +0 -0
  34. tqdaemon-0.8.0/docs/assets/icon.png +0 -0
  35. tqdaemon-0.8.0/docs/assets/social.jpg +0 -0
  36. tqdaemon-0.8.0/docs/capabilities.md +124 -0
  37. tqdaemon-0.8.0/docs/code_ownership.md +14 -0
  38. tqdaemon-0.8.0/docs/errors.md +126 -0
  39. tqdaemon-0.8.0/docs/help/block-project.md +15 -0
  40. tqdaemon-0.8.0/docs/help/cooperative-control.md +46 -0
  41. tqdaemon-0.8.0/docs/help/dependencies.md +13 -0
  42. tqdaemon-0.8.0/docs/help/force-run.md +11 -0
  43. tqdaemon-0.8.0/docs/help/groups.md +15 -0
  44. tqdaemon-0.8.0/docs/help/page-alerts.md +39 -0
  45. tqdaemon-0.8.0/docs/help/page-api.md +25 -0
  46. tqdaemon-0.8.0/docs/help/page-audit.md +17 -0
  47. tqdaemon-0.8.0/docs/help/page-config.md +17 -0
  48. tqdaemon-0.8.0/docs/help/page-dashboard.md +18 -0
  49. tqdaemon-0.8.0/docs/help/page-deps.md +17 -0
  50. tqdaemon-0.8.0/docs/help/page-groups.md +13 -0
  51. tqdaemon-0.8.0/docs/help/page-history.md +27 -0
  52. tqdaemon-0.8.0/docs/help/page-queue.md +35 -0
  53. tqdaemon-0.8.0/docs/help/page-resources.md +13 -0
  54. tqdaemon-0.8.0/docs/help/page-schedule.md +16 -0
  55. tqdaemon-0.8.0/docs/help/page-tasks.md +15 -0
  56. tqdaemon-0.8.0/docs/help/page-timeline.md +21 -0
  57. tqdaemon-0.8.0/docs/help/page-usage.md +15 -0
  58. tqdaemon-0.8.0/docs/help/page-workers.md +13 -0
  59. tqdaemon-0.8.0/docs/help/prod-vs-dev.md +11 -0
  60. tqdaemon-0.8.0/docs/help/project-sets.md +50 -0
  61. tqdaemon-0.8.0/docs/help/queue-hygiene.md +33 -0
  62. tqdaemon-0.8.0/docs/help/tq-metric.md +50 -0
  63. tqdaemon-0.8.0/docs/manifest.json +159 -0
  64. tqdaemon-0.8.0/docs/master_worker.md +206 -0
  65. tqdaemon-0.8.0/docs/mcp.md +604 -0
  66. tqdaemon-0.8.0/docs/operators/README.md +12 -0
  67. tqdaemon-0.8.0/docs/operators/cli.md +102 -0
  68. tqdaemon-0.8.0/docs/operators/discoverability.md +16 -0
  69. tqdaemon-0.8.0/docs/operators/quickstart.md +96 -0
  70. tqdaemon-0.8.0/docs/operators/web-ui.md +74 -0
  71. tqdaemon-0.8.0/docs/progress_guide.md +9 -0
  72. tqdaemon-0.8.0/docs/scheduler.md +529 -0
  73. tqdaemon-0.8.0/docs/security.md +197 -0
  74. tqdaemon-0.8.0/docs/surface_map.json +41 -0
  75. tqdaemon-0.8.0/docs/task_standards.md +665 -0
  76. tqdaemon-0.8.0/examples/README.md +21 -0
  77. tqdaemon-0.8.0/examples/checkpointable/README.md +20 -0
  78. tqdaemon-0.8.0/examples/checkpointable/experiments/operator_queue/train-demo.yaml +13 -0
  79. tqdaemon-0.8.0/examples/checkpointable/scripts/train_demo.py +55 -0
  80. tqdaemon-0.8.0/examples/minimal/README.md +21 -0
  81. tqdaemon-0.8.0/examples/minimal/experiments/operator_queue/hello-progress.yaml +11 -0
  82. tqdaemon-0.8.0/examples/minimal/scripts/hello_progress.py +22 -0
  83. tqdaemon-0.8.0/examples/pipeline/README.md +17 -0
  84. tqdaemon-0.8.0/examples/pipeline/experiments/operator_queue/preprocess.yaml +11 -0
  85. tqdaemon-0.8.0/examples/pipeline/experiments/operator_queue/train.yaml +10 -0
  86. tqdaemon-0.8.0/examples/pipeline/scripts/preprocess.py +26 -0
  87. tqdaemon-0.8.0/examples/pipeline/scripts/train.py +27 -0
  88. tqdaemon-0.8.0/examples/scheduled/README.md +12 -0
  89. tqdaemon-0.8.0/examples/scheduled/experiments/operator_queue/nightly-ci.yaml +11 -0
  90. tqdaemon-0.8.0/examples/scheduled/scripts/nightly_ci.py +23 -0
  91. tqdaemon-0.8.0/examples/snippets/README.md +10 -0
  92. tqdaemon-0.8.0/examples/snippets/gpu_require.yaml +10 -0
  93. tqdaemon-0.8.0/examples/snippets/matrix.yaml +9 -0
  94. tqdaemon-0.8.0/examples/snippets/ollama_service.yaml +10 -0
  95. tqdaemon-0.8.0/examples/snippets/remote_transfer.yaml +12 -0
  96. tqdaemon-0.8.0/fixtures/demo/demo_task.py +26 -0
  97. tqdaemon-0.8.0/fixtures/tqdemo/README.md +79 -0
  98. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/api-latency-soak.yaml +23 -0
  99. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-alloc-ram.yaml +11 -0
  100. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-ask-cpu.yaml +11 -0
  101. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-ask-gpu.yaml +11 -0
  102. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-cap.yaml +10 -0
  103. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-deps-a.yaml +10 -0
  104. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-deps-b.yaml +11 -0
  105. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-exclusive-project.yaml +11 -0
  106. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-exclusive.yaml +11 -0
  107. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-fail.yaml +10 -0
  108. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-frozen.yaml +10 -0
  109. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-hold.yaml +11 -0
  110. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-lie-progress.yaml +10 -0
  111. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-pipe-a.yaml +12 -0
  112. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-pipe-b.yaml +13 -0
  113. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-pipe-check.yaml +13 -0
  114. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-progress.yaml +11 -0
  115. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-resume.yaml +12 -0
  116. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/dummy-suspend.yaml +12 -0
  117. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-at-most-once.yaml +7 -0
  118. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-biglog.yaml +15 -0
  119. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-dispatch-any.yaml +5 -0
  120. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-dispatch-local.yaml +5 -0
  121. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-dispatch-remote.yaml +5 -0
  122. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-idempotent-reclaim.yaml +7 -0
  123. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/mw-transfer-roundtrip.yaml +15 -0
  124. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/stress-biglog.yaml +11 -0
  125. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/stress-cleanup.yaml +11 -0
  126. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/stress-generate.yaml +11 -0
  127. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/test-scale.yaml +11 -0
  128. tqdaemon-0.8.0/fixtures/tqdemo/experiments/operator_queue/test-stress.yaml +11 -0
  129. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_alloc_ram.py +27 -0
  130. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_fail.py +16 -0
  131. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_hang.py +19 -0
  132. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_hold.py +23 -0
  133. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_lie_progress.py +16 -0
  134. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_pipe_check.py +26 -0
  135. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_pipe_produce.py +21 -0
  136. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_progress.py +29 -0
  137. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_resume.py +55 -0
  138. tqdaemon-0.8.0/fixtures/tqdemo/scripts/dummy_suspend.py +26 -0
  139. tqdaemon-0.8.0/fixtures/tqdemo/scripts/run_api_latency_soak.py +21 -0
  140. tqdaemon-0.8.0/fixtures/tqdemo/scripts/run_pytest.py +74 -0
  141. tqdaemon-0.8.0/fixtures/tqdemo/scripts/stress_biglog.py +61 -0
  142. tqdaemon-0.8.0/fixtures/tqdemo/scripts/stress_cleanup.py +43 -0
  143. tqdaemon-0.8.0/fixtures/tqdemo/scripts/stress_generate.py +115 -0
  144. tqdaemon-0.8.0/llms.txt +32 -0
  145. tqdaemon-0.8.0/pyproject.toml +156 -0
  146. tqdaemon-0.8.0/scripts/build_docs.py +48 -0
  147. tqdaemon-0.8.0/scripts/check_docs.py +102 -0
  148. tqdaemon-0.8.0/scripts/install_tq_autostart.ps1 +98 -0
  149. tqdaemon-0.8.0/scripts/record_demo.py +182 -0
  150. tqdaemon-0.8.0/site/README.md +19 -0
  151. tqdaemon-0.8.0/site/google70720338e0635e09.html +1 -0
  152. tqdaemon-0.8.0/site/hero.jpg +0 -0
  153. tqdaemon-0.8.0/site/icon.png +0 -0
  154. tqdaemon-0.8.0/site/index.html +139 -0
  155. tqdaemon-0.8.0/site/robots.txt +4 -0
  156. tqdaemon-0.8.0/site/sitemap.xml +8 -0
  157. tqdaemon-0.8.0/site/social.jpg +0 -0
  158. tqdaemon-0.8.0/tests/__init__.py +0 -0
  159. tqdaemon-0.8.0/tests/conftest.py +32 -0
  160. tqdaemon-0.8.0/tests/fixtures/client_protocol/progress_lines.json +10 -0
  161. tqdaemon-0.8.0/tests/helpers/__init__.py +1 -0
  162. tqdaemon-0.8.0/tests/helpers/master_worker.py +397 -0
  163. tqdaemon-0.8.0/tests/helpers/wait.py +17 -0
  164. tqdaemon-0.8.0/tests/js_dom_stub.mjs +233 -0
  165. tqdaemon-0.8.0/tests/test_admission.py +271 -0
  166. tqdaemon-0.8.0/tests/test_admit_handoff.py +83 -0
  167. tqdaemon-0.8.0/tests/test_admit_helpers.py +49 -0
  168. tqdaemon-0.8.0/tests/test_adopt_on_restart.py +210 -0
  169. tqdaemon-0.8.0/tests/test_agent_stats.py +98 -0
  170. tqdaemon-0.8.0/tests/test_api_docs.py +105 -0
  171. tqdaemon-0.8.0/tests/test_archive.py +101 -0
  172. tqdaemon-0.8.0/tests/test_broken_deps_cache.py +83 -0
  173. tqdaemon-0.8.0/tests/test_broken_deps_health.py +172 -0
  174. tqdaemon-0.8.0/tests/test_cap_auto_retry.py +160 -0
  175. tqdaemon-0.8.0/tests/test_cap_false_completed.py +110 -0
  176. tqdaemon-0.8.0/tests/test_capacity_validate.py +182 -0
  177. tqdaemon-0.8.0/tests/test_cas_blob_auth.py +27 -0
  178. tqdaemon-0.8.0/tests/test_cas_blob_truncated.py +30 -0
  179. tqdaemon-0.8.0/tests/test_change_tracker.py +37 -0
  180. tqdaemon-0.8.0/tests/test_checkpoint_cadence.py +108 -0
  181. tqdaemon-0.8.0/tests/test_cli_6b2_fixes.py +100 -0
  182. tqdaemon-0.8.0/tests/test_cli_agent_ux_pr1.py +193 -0
  183. tqdaemon-0.8.0/tests/test_cli_agent_ux_pr2.py +92 -0
  184. tqdaemon-0.8.0/tests/test_cli_agent_ux_pr3.py +121 -0
  185. tqdaemon-0.8.0/tests/test_cli_daemon_guard.py +69 -0
  186. tqdaemon-0.8.0/tests/test_cli_exit_codes.py +126 -0
  187. tqdaemon-0.8.0/tests/test_cli_readonly_nomigrate.py +38 -0
  188. tqdaemon-0.8.0/tests/test_cli_retry_set_validation.py +27 -0
  189. tqdaemon-0.8.0/tests/test_cli_sync_fast.py +149 -0
  190. tqdaemon-0.8.0/tests/test_cli_table.py +26 -0
  191. tqdaemon-0.8.0/tests/test_client_protocol_golden.py +51 -0
  192. tqdaemon-0.8.0/tests/test_client_require_gpu.py +59 -0
  193. tqdaemon-0.8.0/tests/test_client_suspend.py +88 -0
  194. tqdaemon-0.8.0/tests/test_clock_jump_flap.py +136 -0
  195. tqdaemon-0.8.0/tests/test_clone.py +46 -0
  196. tqdaemon-0.8.0/tests/test_config_audit_rollback.py +40 -0
  197. tqdaemon-0.8.0/tests/test_config_cache.py +39 -0
  198. tqdaemon-0.8.0/tests/test_cpp_client.py +80 -0
  199. tqdaemon-0.8.0/tests/test_cron.py +224 -0
  200. tqdaemon-0.8.0/tests/test_daemon_admission_phase.py +94 -0
  201. tqdaemon-0.8.0/tests/test_daemon_events.py +187 -0
  202. tqdaemon-0.8.0/tests/test_daemon_lease_wait_signal.py +34 -0
  203. tqdaemon-0.8.0/tests/test_daemon_log_rotation.py +36 -0
  204. tqdaemon-0.8.0/tests/test_daemon_startup_helpers.py +75 -0
  205. tqdaemon-0.8.0/tests/test_daemon_tick.py +171 -0
  206. tqdaemon-0.8.0/tests/test_daemon_tick_helpers.py +377 -0
  207. tqdaemon-0.8.0/tests/test_daemon_tick_recovery.py +24 -0
  208. tqdaemon-0.8.0/tests/test_decide_terminal_status.py +98 -0
  209. tqdaemon-0.8.0/tests/test_dedupe_helpers.py +163 -0
  210. tqdaemon-0.8.0/tests/test_deprefs.py +25 -0
  211. tqdaemon-0.8.0/tests/test_deps_invalidate.py +117 -0
  212. tqdaemon-0.8.0/tests/test_detect_system_cache.py +12 -0
  213. tqdaemon-0.8.0/tests/test_docs_loader.py +111 -0
  214. tqdaemon-0.8.0/tests/test_docs_loader_hardening.py +25 -0
  215. tqdaemon-0.8.0/tests/test_docs_surface.py +24 -0
  216. tqdaemon-0.8.0/tests/test_doctor.py +65 -0
  217. tqdaemon-0.8.0/tests/test_doctor_checks.py +86 -0
  218. tqdaemon-0.8.0/tests/test_errors.py +67 -0
  219. tqdaemon-0.8.0/tests/test_estimate_cache_key.py +17 -0
  220. tqdaemon-0.8.0/tests/test_eta.py +171 -0
  221. tqdaemon-0.8.0/tests/test_eviction.py +119 -0
  222. tqdaemon-0.8.0/tests/test_excess_stop_order.py +69 -0
  223. tqdaemon-0.8.0/tests/test_exclusive_drain.py +20 -0
  224. tqdaemon-0.8.0/tests/test_export_import.py +82 -0
  225. tqdaemon-0.8.0/tests/test_f074_master_lease.py +140 -0
  226. tqdaemon-0.8.0/tests/test_f150_f158_correctness.py +158 -0
  227. tqdaemon-0.8.0/tests/test_f192_deep_health_wave0.py +81 -0
  228. tqdaemon-0.8.0/tests/test_f212_wave1.py +74 -0
  229. tqdaemon-0.8.0/tests/test_f245_f246_mutate.py +77 -0
  230. tqdaemon-0.8.0/tests/test_finalize_atomic.py +53 -0
  231. tqdaemon-0.8.0/tests/test_fixtures_e2e.py +120 -0
  232. tqdaemon-0.8.0/tests/test_get_prefix_routes.py +75 -0
  233. tqdaemon-0.8.0/tests/test_gpu_fits.py +22 -0
  234. tqdaemon-0.8.0/tests/test_gpu_hours_budget.py +52 -0
  235. tqdaemon-0.8.0/tests/test_gpu_lock.py +73 -0
  236. tqdaemon-0.8.0/tests/test_gpu_mock.py +137 -0
  237. tqdaemon-0.8.0/tests/test_gpu_probe.py +654 -0
  238. tqdaemon-0.8.0/tests/test_gpu_task_metrics.py +159 -0
  239. tqdaemon-0.8.0/tests/test_group_bulk_safety.py +185 -0
  240. tqdaemon-0.8.0/tests/test_hard_evict_dying.py +11 -0
  241. tqdaemon-0.8.0/tests/test_hard_pressure_eviction.py +105 -0
  242. tqdaemon-0.8.0/tests/test_health.py +164 -0
  243. tqdaemon-0.8.0/tests/test_help_topics.py +36 -0
  244. tqdaemon-0.8.0/tests/test_hold_control.py +63 -0
  245. tqdaemon-0.8.0/tests/test_http_backlog.py +29 -0
  246. tqdaemon-0.8.0/tests/test_hygiene.py +137 -0
  247. tqdaemon-0.8.0/tests/test_js_app.py +215 -0
  248. tqdaemon-0.8.0/tests/test_js_cfgmodal.py +112 -0
  249. tqdaemon-0.8.0/tests/test_js_columns.py +25 -0
  250. tqdaemon-0.8.0/tests/test_js_deps.py +124 -0
  251. tqdaemon-0.8.0/tests/test_js_docs.py +166 -0
  252. tqdaemon-0.8.0/tests/test_js_drawer.py +378 -0
  253. tqdaemon-0.8.0/tests/test_js_filterbars.py +134 -0
  254. tqdaemon-0.8.0/tests/test_js_fitsnow.py +61 -0
  255. tqdaemon-0.8.0/tests/test_js_groups.py +174 -0
  256. tqdaemon-0.8.0/tests/test_js_labels.py +112 -0
  257. tqdaemon-0.8.0/tests/test_js_loader.py +101 -0
  258. tqdaemon-0.8.0/tests/test_js_logdock.py +189 -0
  259. tqdaemon-0.8.0/tests/test_js_mobpicker.py +88 -0
  260. tqdaemon-0.8.0/tests/test_js_modals.py +252 -0
  261. tqdaemon-0.8.0/tests/test_js_modules.py +679 -0
  262. tqdaemon-0.8.0/tests/test_js_nav.py +102 -0
  263. tqdaemon-0.8.0/tests/test_js_notifications.py +130 -0
  264. tqdaemon-0.8.0/tests/test_js_palette.py +27 -0
  265. tqdaemon-0.8.0/tests/test_js_prefs.py +108 -0
  266. tqdaemon-0.8.0/tests/test_js_progress_badges.py +25 -0
  267. tqdaemon-0.8.0/tests/test_js_queuefilters.py +249 -0
  268. tqdaemon-0.8.0/tests/test_js_refresh.py +243 -0
  269. tqdaemon-0.8.0/tests/test_js_resources.py +114 -0
  270. tqdaemon-0.8.0/tests/test_js_runlogs.py +164 -0
  271. tqdaemon-0.8.0/tests/test_js_runmetrics.py +114 -0
  272. tqdaemon-0.8.0/tests/test_js_shortcuts.py +155 -0
  273. tqdaemon-0.8.0/tests/test_js_smoke.py +152 -0
  274. tqdaemon-0.8.0/tests/test_js_sparks.py +129 -0
  275. tqdaemon-0.8.0/tests/test_js_taskactions.py +301 -0
  276. tqdaemon-0.8.0/tests/test_js_taskstats.py +96 -0
  277. tqdaemon-0.8.0/tests/test_js_timeline.py +150 -0
  278. tqdaemon-0.8.0/tests/test_js_url.py +172 -0
  279. tqdaemon-0.8.0/tests/test_js_views.py +457 -0
  280. tqdaemon-0.8.0/tests/test_last_run_progress.py +44 -0
  281. tqdaemon-0.8.0/tests/test_leases.py +194 -0
  282. tqdaemon-0.8.0/tests/test_legacy_shim.py +49 -0
  283. tqdaemon-0.8.0/tests/test_locales.py +65 -0
  284. tqdaemon-0.8.0/tests/test_log_gzip.py +87 -0
  285. tqdaemon-0.8.0/tests/test_logio.py +89 -0
  286. tqdaemon-0.8.0/tests/test_logs_follow.py +52 -0
  287. tqdaemon-0.8.0/tests/test_m3_backend.py +89 -0
  288. tqdaemon-0.8.0/tests/test_m7_features.py +61 -0
  289. tqdaemon-0.8.0/tests/test_master_migrate_gate.py +53 -0
  290. tqdaemon-0.8.0/tests/test_master_mutations.py +101 -0
  291. tqdaemon-0.8.0/tests/test_mcp_errors.py +39 -0
  292. tqdaemon-0.8.0/tests/test_mcp_log_tail.py +50 -0
  293. tqdaemon-0.8.0/tests/test_mcp_offline_submit.py +28 -0
  294. tqdaemon-0.8.0/tests/test_mcp_retry_overrides.py +38 -0
  295. tqdaemon-0.8.0/tests/test_metric_series.py +62 -0
  296. tqdaemon-0.8.0/tests/test_metrics_snapshot.py +42 -0
  297. tqdaemon-0.8.0/tests/test_migration_requires_paths.py +32 -0
  298. tqdaemon-0.8.0/tests/test_mw_disconnect.py +137 -0
  299. tqdaemon-0.8.0/tests/test_mw_dispatch.py +203 -0
  300. tqdaemon-0.8.0/tests/test_mw_hung_remote.py +71 -0
  301. tqdaemon-0.8.0/tests/test_mw_integration.py +56 -0
  302. tqdaemon-0.8.0/tests/test_mw_log_chunk.py +201 -0
  303. tqdaemon-0.8.0/tests/test_mw_package_bundle.py +60 -0
  304. tqdaemon-0.8.0/tests/test_mw_transfer.py +151 -0
  305. tqdaemon-0.8.0/tests/test_negative_exit.py +69 -0
  306. tqdaemon-0.8.0/tests/test_netutil_probe.py +130 -0
  307. tqdaemon-0.8.0/tests/test_next_cron_fire.py +27 -0
  308. tqdaemon-0.8.0/tests/test_notify.py +308 -0
  309. tqdaemon-0.8.0/tests/test_notify_default.py +143 -0
  310. tqdaemon-0.8.0/tests/test_occupancy_estimate_running.py +126 -0
  311. tqdaemon-0.8.0/tests/test_ollama_ps_cache.py +37 -0
  312. tqdaemon-0.8.0/tests/test_operator_features.py +384 -0
  313. tqdaemon-0.8.0/tests/test_p0.py +146 -0
  314. tqdaemon-0.8.0/tests/test_p3_slots.py +111 -0
  315. tqdaemon-0.8.0/tests/test_p4_fencing.py +214 -0
  316. tqdaemon-0.8.0/tests/test_p5_provision.py +117 -0
  317. tqdaemon-0.8.0/tests/test_p6_master_api.py +114 -0
  318. tqdaemon-0.8.0/tests/test_p6_p9.py +285 -0
  319. tqdaemon-0.8.0/tests/test_p6_reservation_top.py +21 -0
  320. tqdaemon-0.8.0/tests/test_p7_longpoll.py +38 -0
  321. tqdaemon-0.8.0/tests/test_paused_skips_service_probe.py +24 -0
  322. tqdaemon-0.8.0/tests/test_perf_micro_6x.py +28 -0
  323. tqdaemon-0.8.0/tests/test_phase1_security.py +66 -0
  324. tqdaemon-0.8.0/tests/test_phase1_writes.py +523 -0
  325. tqdaemon-0.8.0/tests/test_pipeline_doctrine.py +358 -0
  326. tqdaemon-0.8.0/tests/test_placement_best_fit.py +310 -0
  327. tqdaemon-0.8.0/tests/test_plan.py +88 -0
  328. tqdaemon-0.8.0/tests/test_priority_desc.py +146 -0
  329. tqdaemon-0.8.0/tests/test_progress_health.py +93 -0
  330. tqdaemon-0.8.0/tests/test_project_colors.py +33 -0
  331. tqdaemon-0.8.0/tests/test_project_relocate.py +215 -0
  332. tqdaemon-0.8.0/tests/test_project_sets.py +188 -0
  333. tqdaemon-0.8.0/tests/test_project_sync.py +77 -0
  334. tqdaemon-0.8.0/tests/test_provenance.py +84 -0
  335. tqdaemon-0.8.0/tests/test_pwa_shell.py +62 -0
  336. tqdaemon-0.8.0/tests/test_queries_wp4.py +77 -0
  337. tqdaemon-0.8.0/tests/test_queue.py +526 -0
  338. tqdaemon-0.8.0/tests/test_queue_last_run_join.py +77 -0
  339. tqdaemon-0.8.0/tests/test_queue_page_two_phase.py +93 -0
  340. tqdaemon-0.8.0/tests/test_queue_slim_columns.py +28 -0
  341. tqdaemon-0.8.0/tests/test_queue_sort_deps.py +46 -0
  342. tqdaemon-0.8.0/tests/test_queue_sort_order.py +51 -0
  343. tqdaemon-0.8.0/tests/test_queue_window_head_of_line.py +72 -0
  344. tqdaemon-0.8.0/tests/test_r11_wave_a.py +276 -0
  345. tqdaemon-0.8.0/tests/test_r11_wave_b.py +66 -0
  346. tqdaemon-0.8.0/tests/test_r11_wave_c.py +51 -0
  347. tqdaemon-0.8.0/tests/test_r12_post.py +73 -0
  348. tqdaemon-0.8.0/tests/test_r12_wave_a.py +161 -0
  349. tqdaemon-0.8.0/tests/test_r12_wave_b.py +59 -0
  350. tqdaemon-0.8.0/tests/test_r12_wave_d.py +64 -0
  351. tqdaemon-0.8.0/tests/test_r2_fencing.py +205 -0
  352. tqdaemon-0.8.0/tests/test_r3_invariants.py +347 -0
  353. tqdaemon-0.8.0/tests/test_r3_remaining.py +132 -0
  354. tqdaemon-0.8.0/tests/test_r3_wave_b.py +84 -0
  355. tqdaemon-0.8.0/tests/test_r3_wave_cd.py +111 -0
  356. tqdaemon-0.8.0/tests/test_r5_ds.py +151 -0
  357. tqdaemon-0.8.0/tests/test_r7_ds.py +191 -0
  358. tqdaemon-0.8.0/tests/test_r7_ds2.py +213 -0
  359. tqdaemon-0.8.0/tests/test_r8_mine_scope.py +83 -0
  360. tqdaemon-0.8.0/tests/test_r8_ownership.py +83 -0
  361. tqdaemon-0.8.0/tests/test_r9_health.py +82 -0
  362. tqdaemon-0.8.0/tests/test_ram_hints.py +113 -0
  363. tqdaemon-0.8.0/tests/test_reader_db_errors.py +53 -0
  364. tqdaemon-0.8.0/tests/test_reap.py +178 -0
  365. tqdaemon-0.8.0/tests/test_rename_compat.py +57 -0
  366. tqdaemon-0.8.0/tests/test_retention_maintenance.py +193 -0
  367. tqdaemon-0.8.0/tests/test_retry_backoff.py +107 -0
  368. tqdaemon-0.8.0/tests/test_run_anomaly.py +57 -0
  369. tqdaemon-0.8.0/tests/test_run_anomaly_flag.py +47 -0
  370. tqdaemon-0.8.0/tests/test_run_diff.py +46 -0
  371. tqdaemon-0.8.0/tests/test_run_rerun.py +54 -0
  372. tqdaemon-0.8.0/tests/test_runner_start_cleanup.py +48 -0
  373. tqdaemon-0.8.0/tests/test_scale.py +439 -0
  374. tqdaemon-0.8.0/tests/test_scale_guards.py +123 -0
  375. tqdaemon-0.8.0/tests/test_scheduler_admit_helpers.py +134 -0
  376. tqdaemon-0.8.0/tests/test_security.py +278 -0
  377. tqdaemon-0.8.0/tests/test_service_probe_background.py +87 -0
  378. tqdaemon-0.8.0/tests/test_service_proxy_hardening.py +70 -0
  379. tqdaemon-0.8.0/tests/test_set_limits.py +151 -0
  380. tqdaemon-0.8.0/tests/test_slice_e.py +93 -0
  381. tqdaemon-0.8.0/tests/test_slice_g.py +152 -0
  382. tqdaemon-0.8.0/tests/test_slice_h.py +140 -0
  383. tqdaemon-0.8.0/tests/test_sqlite_snapshot_cleanup.py +42 -0
  384. tqdaemon-0.8.0/tests/test_sse_cap_wheel.py +58 -0
  385. tqdaemon-0.8.0/tests/test_sse_events.py +68 -0
  386. tqdaemon-0.8.0/tests/test_sse_log_stream.py +115 -0
  387. tqdaemon-0.8.0/tests/test_sse_ticket.py +45 -0
  388. tqdaemon-0.8.0/tests/test_stop_summary.py +50 -0
  389. tqdaemon-0.8.0/tests/test_stop_vram_code.py +12 -0
  390. tqdaemon-0.8.0/tests/test_stress.py +573 -0
  391. tqdaemon-0.8.0/tests/test_submit_keys.py +109 -0
  392. tqdaemon-0.8.0/tests/test_sync_bundle_determinism.py +40 -0
  393. tqdaemon-0.8.0/tests/test_system_alerts.py +358 -0
  394. tqdaemon-0.8.0/tests/test_t026_parity.py +216 -0
  395. tqdaemon-0.8.0/tests/test_t204_scavenger.py +154 -0
  396. tqdaemon-0.8.0/tests/test_t205_min_tasks.py +47 -0
  397. tqdaemon-0.8.0/tests/test_t206_dep_cancel.py +114 -0
  398. tqdaemon-0.8.0/tests/test_tasks_bulk.py +87 -0
  399. tqdaemon-0.8.0/tests/test_taskspec_gaps.py +31 -0
  400. tqdaemon-0.8.0/tests/test_timeline_forecast_estimates.py +70 -0
  401. tqdaemon-0.8.0/tests/test_timeline_perf.py +76 -0
  402. tqdaemon-0.8.0/tests/test_timeline_prefetch.py +56 -0
  403. tqdaemon-0.8.0/tests/test_token_project_scope.py +103 -0
  404. tqdaemon-0.8.0/tests/test_top.py +86 -0
  405. tqdaemon-0.8.0/tests/test_tq_explain.py +30 -0
  406. tqdaemon-0.8.0/tests/test_transition_task.py +37 -0
  407. tqdaemon-0.8.0/tests/test_ui_6b3_fixes.py +61 -0
  408. tqdaemon-0.8.0/tests/test_ui_browser_smoke.py +85 -0
  409. tqdaemon-0.8.0/tests/test_ui_inline_handlers.py +29 -0
  410. tqdaemon-0.8.0/tests/test_usability_wave.py +207 -0
  411. tqdaemon-0.8.0/tests/test_usage_gpu_today.py +32 -0
  412. tqdaemon-0.8.0/tests/test_usage_track.py +201 -0
  413. tqdaemon-0.8.0/tests/test_w0_regressions.py +174 -0
  414. tqdaemon-0.8.0/tests/test_wait_hints.py +77 -0
  415. tqdaemon-0.8.0/tests/test_waiting.py +261 -0
  416. tqdaemon-0.8.0/tests/test_wave1_hardening.py +181 -0
  417. tqdaemon-0.8.0/tests/test_wave_d_fixes.py +764 -0
  418. tqdaemon-0.8.0/tests/test_web_routes.py +652 -0
  419. tqdaemon-0.8.0/tests/test_why.py +53 -0
  420. tqdaemon-0.8.0/tests/test_win_console.py +44 -0
  421. tqdaemon-0.8.0/tests/test_worker_api.py +289 -0
  422. tqdaemon-0.8.0/tests/test_worker_api_helpers.py +58 -0
  423. tqdaemon-0.8.0/tests/test_worker_auth_streak.py +49 -0
  424. tqdaemon-0.8.0/tests/test_worker_bundle_verify.py +26 -0
  425. tqdaemon-0.8.0/tests/test_worker_credential_enforcement.py +132 -0
  426. tqdaemon-0.8.0/tests/test_worker_join.py +146 -0
  427. tqdaemon-0.8.0/tests/test_worker_setup_merge.py +42 -0
  428. tqdaemon-0.8.0/tests/test_worker_slot_run.py +59 -0
  429. tqdaemon-0.8.0/tests/test_worker_upgrade.py +68 -0
  430. tqdaemon-0.8.0/tests/test_wpa_recovery.py +134 -0
  431. tqdaemon-0.8.0/tests/test_wpb_remote.py +82 -0
  432. tqdaemon-0.8.0/tests/test_wpd_hygiene.py +24 -0
  433. tqdaemon-0.8.0/tests/test_yaml_legacy.py +258 -0
  434. tqdaemon-0.8.0/tqdaemon/__init__.py +3 -0
  435. tqdaemon-0.8.0/tqdaemon/_cli_admin.py +1726 -0
  436. tqdaemon-0.8.0/tqdaemon/_cli_helpers.py +296 -0
  437. tqdaemon-0.8.0/tqdaemon/_cli_project.py +1031 -0
  438. tqdaemon-0.8.0/tqdaemon/_cli_prune.py +418 -0
  439. tqdaemon-0.8.0/tqdaemon/_cli_task.py +1821 -0
  440. tqdaemon-0.8.0/tqdaemon/_cli_worker.py +521 -0
  441. tqdaemon-0.8.0/tqdaemon/_db_runs.py +724 -0
  442. tqdaemon-0.8.0/tqdaemon/_db_tasks.py +1536 -0
  443. tqdaemon-0.8.0/tqdaemon/_fmt.py +83 -0
  444. tqdaemon-0.8.0/tqdaemon/_time.py +25 -0
  445. tqdaemon-0.8.0/tqdaemon/_win_sitecustomize/sitecustomize.py +35 -0
  446. tqdaemon-0.8.0/tqdaemon/admit_context.py +231 -0
  447. tqdaemon-0.8.0/tqdaemon/adopt.py +145 -0
  448. tqdaemon-0.8.0/tqdaemon/agent_stats.py +195 -0
  449. tqdaemon-0.8.0/tqdaemon/archive.py +94 -0
  450. tqdaemon-0.8.0/tqdaemon/arg_overrides.py +57 -0
  451. tqdaemon-0.8.0/tqdaemon/auth.py +61 -0
  452. tqdaemon-0.8.0/tqdaemon/backoff.py +143 -0
  453. tqdaemon-0.8.0/tqdaemon/bundle.py +99 -0
  454. tqdaemon-0.8.0/tqdaemon/capacity.py +198 -0
  455. tqdaemon-0.8.0/tqdaemon/cli.py +2031 -0
  456. tqdaemon-0.8.0/tqdaemon/cli_table.py +86 -0
  457. tqdaemon-0.8.0/tqdaemon/clone.py +70 -0
  458. tqdaemon-0.8.0/tqdaemon/config.py +335 -0
  459. tqdaemon-0.8.0/tqdaemon/config_audit.py +61 -0
  460. tqdaemon-0.8.0/tqdaemon/cron.py +124 -0
  461. tqdaemon-0.8.0/tqdaemon/daemon.py +2678 -0
  462. tqdaemon-0.8.0/tqdaemon/daemon_clock.py +17 -0
  463. tqdaemon-0.8.0/tqdaemon/data/__init__.py +1 -0
  464. tqdaemon-0.8.0/tqdaemon/data/manifest.py +121 -0
  465. tqdaemon-0.8.0/tqdaemon/data/service_broker.py +107 -0
  466. tqdaemon-0.8.0/tqdaemon/db.py +608 -0
  467. tqdaemon-0.8.0/tqdaemon/dbtxn.py +28 -0
  468. tqdaemon-0.8.0/tqdaemon/deprefs.py +42 -0
  469. tqdaemon-0.8.0/tqdaemon/diagnose.py +85 -0
  470. tqdaemon-0.8.0/tqdaemon/docs_loader.py +579 -0
  471. tqdaemon-0.8.0/tqdaemon/doctor_checks.py +258 -0
  472. tqdaemon-0.8.0/tqdaemon/dt_utils.py +46 -0
  473. tqdaemon-0.8.0/tqdaemon/dto.py +27 -0
  474. tqdaemon-0.8.0/tqdaemon/errors.py +173 -0
  475. tqdaemon-0.8.0/tqdaemon/estimate.py +264 -0
  476. tqdaemon-0.8.0/tqdaemon/eta.py +162 -0
  477. tqdaemon-0.8.0/tqdaemon/export_import.py +164 -0
  478. tqdaemon-0.8.0/tqdaemon/fencing.py +79 -0
  479. tqdaemon-0.8.0/tqdaemon/finalize_hooks.py +145 -0
  480. tqdaemon-0.8.0/tqdaemon/fsutil.py +24 -0
  481. tqdaemon-0.8.0/tqdaemon/gpu_lock.py +164 -0
  482. tqdaemon-0.8.0/tqdaemon/health.py +159 -0
  483. tqdaemon-0.8.0/tqdaemon/hygiene.py +437 -0
  484. tqdaemon-0.8.0/tqdaemon/jsonutil.py +11 -0
  485. tqdaemon-0.8.0/tqdaemon/lease.py +231 -0
  486. tqdaemon-0.8.0/tqdaemon/log_issues.py +228 -0
  487. tqdaemon-0.8.0/tqdaemon/logio.py +161 -0
  488. tqdaemon-0.8.0/tqdaemon/master_client.py +185 -0
  489. tqdaemon-0.8.0/tqdaemon/mcp_server.py +1629 -0
  490. tqdaemon-0.8.0/tqdaemon/metrics_export.py +65 -0
  491. tqdaemon-0.8.0/tqdaemon/metrics_snapshot.py +233 -0
  492. tqdaemon-0.8.0/tqdaemon/migrations.py +921 -0
  493. tqdaemon-0.8.0/tqdaemon/models.py +116 -0
  494. tqdaemon-0.8.0/tqdaemon/mutate.py +51 -0
  495. tqdaemon-0.8.0/tqdaemon/mutations.py +294 -0
  496. tqdaemon-0.8.0/tqdaemon/netutil.py +85 -0
  497. tqdaemon-0.8.0/tqdaemon/notify.py +878 -0
  498. tqdaemon-0.8.0/tqdaemon/operator_features.py +996 -0
  499. tqdaemon-0.8.0/tqdaemon/ownership.py +36 -0
  500. tqdaemon-0.8.0/tqdaemon/placement.py +332 -0
  501. tqdaemon-0.8.0/tqdaemon/plan.py +125 -0
  502. tqdaemon-0.8.0/tqdaemon/platform_proc.py +194 -0
  503. tqdaemon-0.8.0/tqdaemon/platform_utils.py +94 -0
  504. tqdaemon-0.8.0/tqdaemon/power.py +35 -0
  505. tqdaemon-0.8.0/tqdaemon/priority_migrate.py +94 -0
  506. tqdaemon-0.8.0/tqdaemon/progress_sanity.py +117 -0
  507. tqdaemon-0.8.0/tqdaemon/project_colors.py +94 -0
  508. tqdaemon-0.8.0/tqdaemon/project_limits.py +255 -0
  509. tqdaemon-0.8.0/tqdaemon/project_relocate.py +190 -0
  510. tqdaemon-0.8.0/tqdaemon/project_sets.py +321 -0
  511. tqdaemon-0.8.0/tqdaemon/project_sync.py +339 -0
  512. tqdaemon-0.8.0/tqdaemon/provision.py +411 -0
  513. tqdaemon-0.8.0/tqdaemon/queries.py +612 -0
  514. tqdaemon-0.8.0/tqdaemon/reap.py +104 -0
  515. tqdaemon-0.8.0/tqdaemon/reports.py +77 -0
  516. tqdaemon-0.8.0/tqdaemon/resources.py +1143 -0
  517. tqdaemon-0.8.0/tqdaemon/rows.py +83 -0
  518. tqdaemon-0.8.0/tqdaemon/run_diff.py +76 -0
  519. tqdaemon-0.8.0/tqdaemon/run_wrapper.py +67 -0
  520. tqdaemon-0.8.0/tqdaemon/runner.py +1286 -0
  521. tqdaemon-0.8.0/tqdaemon/safetar.py +66 -0
  522. tqdaemon-0.8.0/tqdaemon/sched_wake.py +33 -0
  523. tqdaemon-0.8.0/tqdaemon/scheduler.py +2575 -0
  524. tqdaemon-0.8.0/tqdaemon/sse_ticket.py +54 -0
  525. tqdaemon-0.8.0/tqdaemon/static/app.css +1055 -0
  526. tqdaemon-0.8.0/tqdaemon/static/app.js +3 -0
  527. tqdaemon-0.8.0/tqdaemon/static/error_labels.json +32 -0
  528. tqdaemon-0.8.0/tqdaemon/static/help-bundle.en.json +2255 -0
  529. tqdaemon-0.8.0/tqdaemon/static/i18n.js +73 -0
  530. tqdaemon-0.8.0/tqdaemon/static/index.html +865 -0
  531. tqdaemon-0.8.0/tqdaemon/static/js/components/cfgmodal.js +268 -0
  532. tqdaemon-0.8.0/tqdaemon/static/js/components/columns.js +70 -0
  533. tqdaemon-0.8.0/tqdaemon/static/js/components/drawer.js +425 -0
  534. tqdaemon-0.8.0/tqdaemon/static/js/components/filterbars.js +180 -0
  535. tqdaemon-0.8.0/tqdaemon/static/js/components/fitsnow.js +61 -0
  536. tqdaemon-0.8.0/tqdaemon/static/js/components/logdock.js +147 -0
  537. tqdaemon-0.8.0/tqdaemon/static/js/components/logpanel.js +271 -0
  538. tqdaemon-0.8.0/tqdaemon/static/js/components/logview.js +102 -0
  539. tqdaemon-0.8.0/tqdaemon/static/js/components/mobpicker.js +74 -0
  540. tqdaemon-0.8.0/tqdaemon/static/js/components/modals.js +456 -0
  541. tqdaemon-0.8.0/tqdaemon/static/js/components/notifications.js +210 -0
  542. tqdaemon-0.8.0/tqdaemon/static/js/components/palette.js +155 -0
  543. tqdaemon-0.8.0/tqdaemon/static/js/components/prefs.js +143 -0
  544. tqdaemon-0.8.0/tqdaemon/static/js/components/queuefilters.js +414 -0
  545. tqdaemon-0.8.0/tqdaemon/static/js/components/runlogs.js +417 -0
  546. tqdaemon-0.8.0/tqdaemon/static/js/components/runmetrics.js +251 -0
  547. tqdaemon-0.8.0/tqdaemon/static/js/components/setfilter.js +263 -0
  548. tqdaemon-0.8.0/tqdaemon/static/js/components/shortcuts.js +130 -0
  549. tqdaemon-0.8.0/tqdaemon/static/js/components/sparks.js +246 -0
  550. tqdaemon-0.8.0/tqdaemon/static/js/components/taskactions.js +507 -0
  551. tqdaemon-0.8.0/tqdaemon/static/js/core/actions.js +84 -0
  552. tqdaemon-0.8.0/tqdaemon/static/js/core/api.js +190 -0
  553. tqdaemon-0.8.0/tqdaemon/static/js/core/loader.js +120 -0
  554. tqdaemon-0.8.0/tqdaemon/static/js/core/nav.js +90 -0
  555. tqdaemon-0.8.0/tqdaemon/static/js/core/refresh.js +742 -0
  556. tqdaemon-0.8.0/tqdaemon/static/js/core/state.js +99 -0
  557. tqdaemon-0.8.0/tqdaemon/static/js/core/url.js +278 -0
  558. tqdaemon-0.8.0/tqdaemon/static/js/main.js +263 -0
  559. tqdaemon-0.8.0/tqdaemon/static/js/util/a11y.js +44 -0
  560. tqdaemon-0.8.0/tqdaemon/static/js/util/colors.js +13 -0
  561. tqdaemon-0.8.0/tqdaemon/static/js/util/format.js +102 -0
  562. tqdaemon-0.8.0/tqdaemon/static/js/util/labels.js +132 -0
  563. tqdaemon-0.8.0/tqdaemon/static/js/util/projcolor.js +17 -0
  564. tqdaemon-0.8.0/tqdaemon/static/js/views/alerts.js +100 -0
  565. tqdaemon-0.8.0/tqdaemon/static/js/views/audit.js +67 -0
  566. tqdaemon-0.8.0/tqdaemon/static/js/views/dashboard.js +258 -0
  567. tqdaemon-0.8.0/tqdaemon/static/js/views/deps.js +635 -0
  568. tqdaemon-0.8.0/tqdaemon/static/js/views/docs.js +302 -0
  569. tqdaemon-0.8.0/tqdaemon/static/js/views/groups.js +184 -0
  570. tqdaemon-0.8.0/tqdaemon/static/js/views/history.js +332 -0
  571. tqdaemon-0.8.0/tqdaemon/static/js/views/queue.js +646 -0
  572. tqdaemon-0.8.0/tqdaemon/static/js/views/resources.js +307 -0
  573. tqdaemon-0.8.0/tqdaemon/static/js/views/schedule.js +68 -0
  574. tqdaemon-0.8.0/tqdaemon/static/js/views/taskstats.js +70 -0
  575. tqdaemon-0.8.0/tqdaemon/static/js/views/timeline.js +135 -0
  576. tqdaemon-0.8.0/tqdaemon/static/js/views/tokens.js +47 -0
  577. tqdaemon-0.8.0/tqdaemon/static/js/views/usage.js +332 -0
  578. tqdaemon-0.8.0/tqdaemon/static/locales/ar.json +764 -0
  579. tqdaemon-0.8.0/tqdaemon/static/locales/en-XX.json +764 -0
  580. tqdaemon-0.8.0/tqdaemon/static/locales/en.json +764 -0
  581. tqdaemon-0.8.0/tqdaemon/static/locales/pl.json +762 -0
  582. tqdaemon-0.8.0/tqdaemon/static/locales/zh.json +764 -0
  583. tqdaemon-0.8.0/tqdaemon/static/manifest.webmanifest +10 -0
  584. tqdaemon-0.8.0/tqdaemon/static/sw.js +37 -0
  585. tqdaemon-0.8.0/tqdaemon/static/theme-boot.js +22 -0
  586. tqdaemon-0.8.0/tqdaemon/statuses.py +41 -0
  587. tqdaemon-0.8.0/tqdaemon/stop_reasons.py +24 -0
  588. tqdaemon-0.8.0/tqdaemon/stop_summary.py +120 -0
  589. tqdaemon-0.8.0/tqdaemon/submit.py +109 -0
  590. tqdaemon-0.8.0/tqdaemon/submit_keys.py +94 -0
  591. tqdaemon-0.8.0/tqdaemon/system_alerts.py +617 -0
  592. tqdaemon-0.8.0/tqdaemon/taskspec.py +545 -0
  593. tqdaemon-0.8.0/tqdaemon/timeline_forecast.py +812 -0
  594. tqdaemon-0.8.0/tqdaemon/top.py +108 -0
  595. tqdaemon-0.8.0/tqdaemon/usage_track.py +238 -0
  596. tqdaemon-0.8.0/tqdaemon/validate.py +269 -0
  597. tqdaemon-0.8.0/tqdaemon/victim.py +141 -0
  598. tqdaemon-0.8.0/tqdaemon/waiting.py +340 -0
  599. tqdaemon-0.8.0/tqdaemon/web/__init__.py +171 -0
  600. tqdaemon-0.8.0/tqdaemon/web/api_docs.py +559 -0
  601. tqdaemon-0.8.0/tqdaemon/web/change_tracker.py +58 -0
  602. tqdaemon-0.8.0/tqdaemon/web/context.py +37 -0
  603. tqdaemon-0.8.0/tqdaemon/web/deps.py +128 -0
  604. tqdaemon-0.8.0/tqdaemon/web/handler.py +1041 -0
  605. tqdaemon-0.8.0/tqdaemon/web/hardware.py +210 -0
  606. tqdaemon-0.8.0/tqdaemon/web/responses.py +1465 -0
  607. tqdaemon-0.8.0/tqdaemon/web/routes_read.py +1535 -0
  608. tqdaemon-0.8.0/tqdaemon/web/routes_transfer.py +876 -0
  609. tqdaemon-0.8.0/tqdaemon/web/routes_worker.py +1143 -0
  610. tqdaemon-0.8.0/tqdaemon/web/routes_write.py +1619 -0
  611. tqdaemon-0.8.0/tqdaemon/web/sse.py +354 -0
  612. tqdaemon-0.8.0/tqdaemon/web/standby.py +137 -0
  613. tqdaemon-0.8.0/tqdaemon/why.py +106 -0
  614. tqdaemon-0.8.0/tqdaemon/win_console.py +53 -0
  615. tqdaemon-0.8.0/tqdaemon/worker.py +1167 -0
  616. tqdaemon-0.8.0/tqdaemon/worker_api.py +621 -0
  617. tqdaemon-0.8.0/tqdaemon/worker_http.py +85 -0
  618. tqdaemon-0.8.0/tqdaemon/worker_join.py +106 -0
  619. tqdaemon-0.8.0/tqdaemon/worker_journal.py +99 -0
  620. tqdaemon-0.8.0/tqdaemon/worker_outbox.py +64 -0
  621. tqdaemon-0.8.0/tqdaemon/worker_slot.py +849 -0
  622. tqdaemon-0.8.0/tqdaemon/yaml_legacy.py +128 -0
  623. tqdaemon-0.8.0/tqdaemon/yaml_patch.py +91 -0
  624. tqdaemon-0.8.0/tqdaemon/yaml_sync.py +380 -0
  625. tqdaemon-0.8.0/uv.lock +816 -0
@@ -0,0 +1,28 @@
1
+ name: Bug report
2
+ description: Something in tq, the daemon or the web UI does not work as documented
3
+ labels: [bug]
4
+ body:
5
+ - type: textarea
6
+ id: what
7
+ attributes:
8
+ label: What happened
9
+ description: What you did, what you expected, what you got.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: repro
14
+ attributes:
15
+ label: Steps to reproduce
16
+ description: Minimal task YAML and commands if possible.
17
+ - type: input
18
+ id: version
19
+ attributes:
20
+ label: Version and OS
21
+ description: Output of `tq doctor` (version, OS, Python).
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: logs
26
+ attributes:
27
+ label: Logs
28
+ render: shell
@@ -0,0 +1 @@
1
+ blank_issues_enabled: true
@@ -0,0 +1,15 @@
1
+ name: Feature request
2
+ description: Suggest an improvement
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem
9
+ description: What are you trying to do that is hard today?
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: Proposed solution
@@ -0,0 +1,7 @@
1
+ ## What and why
2
+
3
+ ## Checklist
4
+
5
+ - [ ] Focused tests pass (`uv run pytest tests/<module>.py`)
6
+ - [ ] Docs / CHANGELOG updated if behaviour changed
7
+ - [ ] No secrets or machine-specific paths added
@@ -0,0 +1,14 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ - package-ecosystem: pip
8
+ directory: /
9
+ schedule:
10
+ interval: weekly
11
+ - package-ecosystem: npm
12
+ directory: /
13
+ schedule:
14
+ interval: weekly
@@ -0,0 +1,36 @@
1
+ # CI POSTPONED 2026-08-28 — GitHub Actions billing / spending limit exhausted.
2
+ # Auto triggers removed so this does not burn Actions minutes.
3
+ # Manual `workflow_dispatch` kept for optional resume after billing is restored.
4
+ # F-209: single source of truth is scripts/ci.ps1 (local + Actions).
5
+ # See plan/CI_POSTPONED.md.
6
+
7
+ name: ci
8
+
9
+ on:
10
+ workflow_dispatch:
11
+ inputs:
12
+ suite:
13
+ description: "CI suite"
14
+ required: true
15
+ default: fast
16
+ type: choice
17
+ options: [fast, full, nightly]
18
+
19
+ jobs:
20
+ gate:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: astral-sh/setup-uv@v5
25
+ with:
26
+ python-version: "3.12"
27
+ - uses: actions/setup-node@v4
28
+ if: inputs.suite != 'fast'
29
+ with:
30
+ node-version: "22"
31
+ - name: Sync (locked)
32
+ run: uv sync --locked --group dev
33
+ - name: Run scripts/ci.ps1
34
+ shell: pwsh
35
+ # F-209 / deep-audit: one source of truth — including nightly (was a divergent subset).
36
+ run: pwsh scripts/ci.ps1 -Mode "${{ inputs.suite }}"
@@ -0,0 +1,33 @@
1
+ # Deploy top-level site/ to GitHub Pages (legacy branch Sources only allow / or /docs).
2
+ name: pages
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "site/**"
8
+ - ".github/workflows/pages.yml"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ concurrency:
17
+ group: pages
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ deploy:
22
+ environment:
23
+ name: github-pages
24
+ url: ${{ steps.deployment.outputs.page_url }}
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/configure-pages@v5
29
+ - uses: actions/upload-pages-artifact@v3
30
+ with:
31
+ path: site
32
+ - id: deployment
33
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,18 @@
1
+ # Generated by house publish export — do not commit local verify debris.
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ .venv/
6
+ venv/
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ *.egg-info/
10
+ dist/
11
+ build/
12
+ .publish/
13
+ .DS_Store
14
+ *.db
15
+ *.pkl
16
+ .env
17
+ .env.*
18
+ !.env.example
@@ -0,0 +1,27 @@
1
+ # AGENTS.md — tqdaemon (public)
2
+
3
+ Bootstrap for agents on the **public** tqdaemon tree.
4
+
5
+ 1. [README.md](README.md) — pitch, install, first win
6
+ 2. [llms.txt](llms.txt) — compact agent index
7
+ 3. [docs/mcp.md](docs/mcp.md) — MCP setup + tools
8
+ 4. [docs/task_standards.md](docs/task_standards.md) — YAML fields
9
+ 5. [docs/agents/task-script-cookbook.md](docs/agents/task-script-cookbook.md) — long jobs with `tq_client`
10
+ 6. [docs/operators/cli.md](docs/operators/cli.md) — full `tq` reference
11
+ 7. [CONTRIBUTING.md](CONTRIBUTING.md) — tests and PRs
12
+
13
+ ## Hard constraints
14
+
15
+ - Long jobs → operator-queue YAML (not in-session shells).
16
+ - **Create:** MCP `submit_task` (preferred) or YAML under `experiments/operator_queue/` + `tq sync`. `enqueue_task` only retries terminal tasks.
17
+ - Do not invent CLI commands or YAML keys.
18
+ - Prefer `tq wait` / MCP `wait_for_task` over sleep polling.
19
+ - Set `TQ_OPERATOR` so `started_by` / `my_tasks` work.
20
+ - Default home `~/.tqdaemon`, UI **8765**.
21
+
22
+ ## Tests
23
+
24
+ ```text
25
+ uv sync --group dev
26
+ uv run pytest -q -m "not stress"
27
+ ```
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here.
4
+ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
5
+ this project uses [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.8.0] - 2026-11-11
10
+
11
+ ### Changed
12
+
13
+ - **Renamed the project from `taskqueue` to `tqdaemon`** (PyPI distribution `tqdaemon`; `taskqueue`, `tq` and `task-queue` were taken). The `tq` command is unchanged; the Python package is now `tqdaemon`.
14
+ - New names: `TQDAEMON_HOME` (env), `~/.tqdaemon` (state home), `.tqdaemon/project.yaml` (per-project config), MCP server name `tqdaemon`.
15
+ - Migration: the old env var `TASKQUEUE_HOME`, an existing `~/.taskqueue` home, `.taskqueue/project.yaml` and runs started under the old wrapper module are still recognised. To migrate by hand: stop the daemon, rename `~/.taskqueue` to `~/.tqdaemon`, reinstall (`pip install -U tqdaemon`), `tq start`.
16
+
17
+ ### Added
18
+
19
+ - Automated demo GIF (`scripts/record_demo.py`), issue/PR templates and Dependabot config; PyPI publishing wired into the house publish flow.
20
+
21
+ ## [0.7.6] - 2026-11-08
22
+
23
+ ### Added
24
+
25
+ - Slim stranger-facing README (EN/PL/ZH/AR) with hero image, agent CTA, and transparency note (no product phone-home).
26
+ - Marketing GitHub Pages tree under `site/` (landing, sitemap, robots); CLI encyclopedia moved to `docs/operators/cli.md`.
27
+ - Root `llms.txt` and expanded package keywords for discoverability.
28
+
29
+ ### Fixed
30
+
31
+ - Deep-audit reliability work for remote `stopped` claim paths, MCP mutate helpers, scheduler admit hot path, and web UI SSE/log races (F-244–F-258).
32
+
33
+ ## [0.7.5] - 2026-11-01
34
+
35
+ ### Added
36
+
37
+ - Queue hygiene report: `tq hygiene` / `tq report --hygiene`, MCP `report` with `kind=hygiene`, and `GET /api/hygiene` — churn rates, multi-use vs flaky classification, and honest archive proposals (`agent_prompt`; never auto-archives).
38
+ - `tq archive --max-completed-runs N` so archive proposals can skip multi-use tasks (hygiene uses `1`).
39
+ - Tasks keep `completed_run_count` / `total_run_count` (schema 33); `tq list` reads them instead of scanning all runs.
40
+ - History tab pages with a fixed offset (Prev/Next) and mounts log/history expand rows only when opened.
41
+ - Help topic `queue-hygiene` and operator/docs notes distinguishing hygiene from retention prune and agent usage summaries.
42
+ - House `publish.manifest.yaml` and dual-tree export readiness for the public GitHub mirror.
43
+
44
+ ### Changed
45
+
46
+ - Unscoped queue `sort=deps` / `sort=order` require a project filter when more than 2000 tasks match.
47
+ - `/api/deps` applies project, suite, and `project/task_id` focus in SQL before building the graph; unscoped graphs cap the SELECT at 500 nodes.
48
+ - `GET /api/tasks/<project>/<task_id>/runs` is paginated (`limit` default 50, max 200; `offset`).
49
+ - Unscoped `GET /api/task-stats` returns at most 500 tasks (prefer `project=`).
50
+ - History anomaly badges are computed in a batched pass per page instead of one query per completed run.
51
+
52
+ ## [0.7.4] - 2026-10-26
53
+
54
+ ### Added
55
+
56
+ - Initial public changelog baseline matching `pyproject.toml` version 0.7.4.
@@ -0,0 +1,10 @@
1
+ # CLAUDE.md — tqdaemon (public)
2
+
3
+ Public checkout guidance. Prefer [AGENTS.md](AGENTS.md) and [docs/](docs/).
4
+
5
+ - Package: `tqdaemon/` (`cli.py`, `daemon.py`, `db.py`, `worker.py`, …)
6
+ - Web UI: `tqdaemon/static/` + ES modules under `tqdaemon/static/js/`
7
+ - Scheduler tick: `daemon.daemon_tick` — see `tests/test_daemon_tick.py`
8
+ - Docs hub: [docs/README.md](docs/README.md)
9
+
10
+ Do not assume a sibling `devkit` or shared inbox layout; this repository is standalone for public users.
@@ -0,0 +1,5 @@
1
+ # Code of Conduct
2
+
3
+ Be respectful in issues, discussions, and PRs. Harassment, spam, or deliberate sabotage of the project or its users is not welcome. Maintainers may moderate or ban accounts that violate this standard.
4
+
5
+ This project follows the spirit of the [Contributor Covenant](https://www.contributor-covenant.org/) v2.1.
@@ -0,0 +1,28 @@
1
+ # Contributing
2
+
3
+ ## Setup
4
+
5
+ ```text
6
+ git clone https://github.com/wwylon/tqdaemon.git
7
+ cd tqdaemon
8
+ uv sync --group dev
9
+ uv run tq doctor
10
+ ```
11
+
12
+ ## Tests
13
+
14
+ ```text
15
+ uv run ruff check tqdaemon/ tests/
16
+ uv run pytest -q -m "not stress"
17
+ uv run python scripts/build_docs.py --check
18
+ ```
19
+
20
+ ## Pull requests
21
+
22
+ - Open PRs against the public repository.
23
+ - Link an issue when fixing a bug; include `tq doctor` / OS / version for runtime problems.
24
+ - Maintainers may replay accepted changes through an internal mirror; your commits can appear rewritten in the next public export. Attribution is preserved in CHANGELOG / PR comments when practical.
25
+
26
+ ## Security
27
+
28
+ See [SECURITY.md](SECURITY.md). Do not file vulnerabilities in public issues.
tqdaemon-0.8.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 tqdaemon contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,96 @@
1
+ Metadata-Version: 2.5
2
+ Name: tqdaemon
3
+ Version: 0.8.0
4
+ Summary: Local resource-aware task queue daemon (CLI, web UI, MCP, remote workers)
5
+ Project-URL: Homepage, https://github.com/wwylon/tqdaemon
6
+ Project-URL: Repository, https://github.com/wwylon/tqdaemon
7
+ Project-URL: Issues, https://github.com/wwylon/tqdaemon/issues
8
+ Project-URL: Documentation, https://github.com/wwylon/tqdaemon/tree/main/docs
9
+ Author: tqdaemon contributors
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: ai-agents,cli,daemon,gpu,job-scheduler,local-first,mcp,resource-management,task-queue,web-ui,yaml
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.12
17
+ Requires-Dist: nvidia-ml-py>=12.0
18
+ Requires-Dist: psutil>=5.9
19
+ Requires-Dist: pyyaml>=6.0
20
+ Provides-Extra: toast
21
+ Requires-Dist: winotify>=1.1.0; extra == 'toast'
22
+ Description-Content-Type: text/markdown
23
+
24
+ # tqdaemon
25
+
26
+ [English](README.md) | [Polski](README.pl.md) | [中文](README.zh.md) | [العربية](README.ar.md)
27
+
28
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
29
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
30
+ [![CI](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml/badge.svg)](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml)
31
+ [![PyPI](https://img.shields.io/pypi/v/tqdaemon)](https://pypi.org/project/tqdaemon/)
32
+ [![Latest tag](https://img.shields.io/github/v/tag/wwylon/tqdaemon?label=version)](https://github.com/wwylon/tqdaemon/tags)
33
+
34
+ ![tqdaemon — local jobs, agents, workers](https://raw.githubusercontent.com/wwylon/tqdaemon/main/docs/assets/demo.gif)
35
+
36
+ **tqdaemon** runs long jobs on your own machines without melting them.
37
+ Describe each job in YAML. A local **daemon** starts work only when there is
38
+ enough CPU, RAM, and GPU memory. Watch progress in a **web UI**, the **`tq`**
39
+ CLI, or from an **AI coding agent** (MCP).
40
+
41
+ Not Celery, Kubernetes, or CI. Not the 2011 AMQP/Debian
42
+ [rojkov/taskqueue](https://github.com/rojkov/taskqueue) (simpletaskqueue).
43
+
44
+ ## Why use it
45
+
46
+ - Resource-aware admission (CPU / RAM / GPU VRAM) on one PC or with remote workers
47
+ - YAML jobs with checkpoints, deps, priorities, and stable error codes
48
+ - Built for **agents**: submit, wait, diagnose over MCP
49
+ - Local-first — no cloud SaaS account
50
+
51
+ ## Best start: ask your agent
52
+
53
+ Tell your coding agent (Cursor, Claude Code, …) to use **tqdaemon** for long
54
+ jobs: wire MCP (`tq mcp`), submit YAML tasks, and `wait_for_task` instead of
55
+ blocking the chat. Setup: **[docs/mcp.md](docs/mcp.md)**.
56
+
57
+ ## Install
58
+
59
+ **Need:** Python **3.12+**, [Git](https://git-scm.com/), [`uv`](https://docs.astral.sh/uv/).
60
+
61
+ **From PyPI:** `uvx --from tqdaemon tq doctor` (or `pipx install tqdaemon`). From source:
62
+
63
+ ```powershell
64
+ git clone https://github.com/wwylon/tqdaemon.git
65
+ cd tqdaemon
66
+ uv sync
67
+ uv run tq doctor
68
+ uv run tq start
69
+ ```
70
+
71
+ Open **http://127.0.0.1:8765**. Try the sample in
72
+ [`examples/minimal`](examples/minimal/) (register it as a project, then
73
+ `tq sync` / enable / `tq wait` — see that folder’s README).
74
+
75
+ Optional Windows toasts: `uv sync --extra toast`. Autostart:
76
+ `scripts/install_tq_autostart.ps1`.
77
+
78
+ ## Docs
79
+
80
+ | Audience | Start here |
81
+ |----------|------------|
82
+ | Humans | [docs/README.md](docs/README.md) · [Quickstart](docs/operators/quickstart.md) · [Web UI](docs/operators/web-ui.md) · [CLI](docs/operators/cli.md) |
83
+ | Agents | [AGENTS.md](AGENTS.md) · [MCP](docs/mcp.md) · [Cookbook](docs/agents/task-script-cookbook.md) · [llms.txt](llms.txt) |
84
+
85
+ **Advanced:** [Security & privacy](docs/security.md) · [Task standards](docs/task_standards.md) · [Scheduler](docs/scheduler.md) · [Workers](docs/WORKER_SETUP.md)
86
+
87
+ ## Transparency
88
+
89
+ We do **not** phone home. Public signals are GitHub stars (badge above) and,
90
+ after a PyPI release under a distinct package name, download counts you can
91
+ verify yourself. Maintainers may use GitHub Traffic Insights (clones ≠ installs).
92
+ Details: [docs/security.md](docs/security.md#privacy--telemetry).
93
+
94
+ ## License
95
+
96
+ MIT — see [LICENSE](LICENSE) · [Changelog](CHANGELOG.md)
@@ -0,0 +1,65 @@
1
+ # tqdaemon
2
+
3
+ [English](README.md) | [Polski](README.pl.md) | [中文](README.zh.md) | [العربية](README.ar.md)
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![CI](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml/badge.svg)](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml)
8
+ [![PyPI](https://img.shields.io/pypi/v/tqdaemon)](https://pypi.org/project/tqdaemon/)
9
+ [![Latest tag](https://img.shields.io/github/v/tag/wwylon/tqdaemon?label=version)](https://github.com/wwylon/tqdaemon/tags)
10
+
11
+ ![tqdaemon — مهام محلية ووكلاء وعمال](https://raw.githubusercontent.com/wwylon/tqdaemon/main/docs/assets/demo.gif)
12
+
13
+ **tqdaemon** يشغّل المهام الطويلة على أجهزتك دون إنهاكها.
14
+ تصف كل مهمة في YAML. يعمل **daemon** محلي ويبدأ العمل فقط عند توفر
15
+ CPU وRAM وذاكرة GPU كافية. راقب التقدّم عبر **واجهة ويب** أو CLI **`tq`**
16
+ أو وكيل ترميز بالذكاء الاصطناعي (**MCP**).
17
+
18
+ ليس Celery أو Kubernetes أو CI. وليس مشروع AMQP/Debian القديم من 2011
19
+ [rojkov/taskqueue](https://github.com/rojkov/taskqueue) (simpletaskqueue).
20
+
21
+ ## لماذا
22
+
23
+ - قبول المهام حسب الموارد (CPU / RAM / GPU) محلياً أو على عمال بعُدين
24
+ - YAML مع نقاط حفظ وتبعيات وأولويات ورموز أخطاء مستقرة
25
+ - مخصّص للوكلاء: إرسال وانتظار وتشخيص عبر MCP
26
+ - محلي أولاً — بلا حساب SaaS سحابي
27
+
28
+ ## أفضل بداية: اطلب من الوكيل
29
+
30
+ اطلب من وكيلك (Cursor أو Claude Code وغيرهما) استخدام **tqdaemon** للمهام
31
+ الطويلة: إعداد MCP (`tq mcp`) وإرسال YAML و`wait_for_task` بدل حجب المحادثة.
32
+ الإعداد: **[docs/mcp.md](docs/mcp.md)**.
33
+
34
+ ## التثبيت
35
+
36
+ **المتطلبات:** Python **3.12+** و[Git](https://git-scm.com/) و[`uv`](https://docs.astral.sh/uv/).
37
+
38
+ ```powershell
39
+ git clone https://github.com/wwylon/tqdaemon.git
40
+ cd tqdaemon
41
+ uv sync
42
+ uv run tq doctor
43
+ uv run tq start
44
+ ```
45
+
46
+ افتح **http://127.0.0.1:8765**. مثال:
47
+ [`examples/minimal`](examples/minimal/).
48
+
49
+ ## التوثيق
50
+
51
+ | الجمهور | ابدأ من |
52
+ |---------|---------|
53
+ | بشر | [docs/README.md](docs/README.md) · [Quickstart](docs/operators/quickstart.md) · [Web UI](docs/operators/web-ui.md) · [CLI](docs/operators/cli.md) |
54
+ | وكلاء | [AGENTS.md](AGENTS.md) · [MCP](docs/mcp.md) · [Cookbook](docs/agents/task-script-cookbook.md) · [llms.txt](llms.txt) |
55
+
56
+ **متقدم:** [Security](docs/security.md) · [Task standards](docs/task_standards.md) · [Scheduler](docs/scheduler.md) · [Workers](docs/WORKER_SETUP.md)
57
+
58
+ ## الشفافية
59
+
60
+ لا نرسل بيانات استخدام خفية. الإشارات العامة: نجوم GitHub؛ وبعد نشر PyPI
61
+ عدادات التحميل العامة. التفاصيل: [docs/security.md](docs/security.md#privacy--telemetry).
62
+
63
+ ## الرخصة
64
+
65
+ MIT — [LICENSE](LICENSE) · [Changelog](CHANGELOG.md)
@@ -0,0 +1,73 @@
1
+ # tqdaemon
2
+
3
+ [English](README.md) | [Polski](README.pl.md) | [中文](README.zh.md) | [العربية](README.ar.md)
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![CI](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml/badge.svg)](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml)
8
+ [![PyPI](https://img.shields.io/pypi/v/tqdaemon)](https://pypi.org/project/tqdaemon/)
9
+ [![Latest tag](https://img.shields.io/github/v/tag/wwylon/tqdaemon?label=version)](https://github.com/wwylon/tqdaemon/tags)
10
+
11
+ ![tqdaemon — local jobs, agents, workers](https://raw.githubusercontent.com/wwylon/tqdaemon/main/docs/assets/demo.gif)
12
+
13
+ **tqdaemon** runs long jobs on your own machines without melting them.
14
+ Describe each job in YAML. A local **daemon** starts work only when there is
15
+ enough CPU, RAM, and GPU memory. Watch progress in a **web UI**, the **`tq`**
16
+ CLI, or from an **AI coding agent** (MCP).
17
+
18
+ Not Celery, Kubernetes, or CI. Not the 2011 AMQP/Debian
19
+ [rojkov/taskqueue](https://github.com/rojkov/taskqueue) (simpletaskqueue).
20
+
21
+ ## Why use it
22
+
23
+ - Resource-aware admission (CPU / RAM / GPU VRAM) on one PC or with remote workers
24
+ - YAML jobs with checkpoints, deps, priorities, and stable error codes
25
+ - Built for **agents**: submit, wait, diagnose over MCP
26
+ - Local-first — no cloud SaaS account
27
+
28
+ ## Best start: ask your agent
29
+
30
+ Tell your coding agent (Cursor, Claude Code, …) to use **tqdaemon** for long
31
+ jobs: wire MCP (`tq mcp`), submit YAML tasks, and `wait_for_task` instead of
32
+ blocking the chat. Setup: **[docs/mcp.md](docs/mcp.md)**.
33
+
34
+ ## Install
35
+
36
+ **Need:** Python **3.12+**, [Git](https://git-scm.com/), [`uv`](https://docs.astral.sh/uv/).
37
+
38
+ **From PyPI:** `uvx --from tqdaemon tq doctor` (or `pipx install tqdaemon`). From source:
39
+
40
+ ```powershell
41
+ git clone https://github.com/wwylon/tqdaemon.git
42
+ cd tqdaemon
43
+ uv sync
44
+ uv run tq doctor
45
+ uv run tq start
46
+ ```
47
+
48
+ Open **http://127.0.0.1:8765**. Try the sample in
49
+ [`examples/minimal`](examples/minimal/) (register it as a project, then
50
+ `tq sync` / enable / `tq wait` — see that folder’s README).
51
+
52
+ Optional Windows toasts: `uv sync --extra toast`. Autostart:
53
+ `scripts/install_tq_autostart.ps1`.
54
+
55
+ ## Docs
56
+
57
+ | Audience | Start here |
58
+ |----------|------------|
59
+ | Humans | [docs/README.md](docs/README.md) · [Quickstart](docs/operators/quickstart.md) · [Web UI](docs/operators/web-ui.md) · [CLI](docs/operators/cli.md) |
60
+ | Agents | [AGENTS.md](AGENTS.md) · [MCP](docs/mcp.md) · [Cookbook](docs/agents/task-script-cookbook.md) · [llms.txt](llms.txt) |
61
+
62
+ **Advanced:** [Security & privacy](docs/security.md) · [Task standards](docs/task_standards.md) · [Scheduler](docs/scheduler.md) · [Workers](docs/WORKER_SETUP.md)
63
+
64
+ ## Transparency
65
+
66
+ We do **not** phone home. Public signals are GitHub stars (badge above) and,
67
+ after a PyPI release under a distinct package name, download counts you can
68
+ verify yourself. Maintainers may use GitHub Traffic Insights (clones ≠ installs).
69
+ Details: [docs/security.md](docs/security.md#privacy--telemetry).
70
+
71
+ ## License
72
+
73
+ MIT — see [LICENSE](LICENSE) · [Changelog](CHANGELOG.md)
@@ -0,0 +1,65 @@
1
+ # tqdaemon
2
+
3
+ [English](README.md) | [Polski](README.pl.md) | [中文](README.zh.md) | [العربية](README.ar.md)
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![CI](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml/badge.svg)](https://github.com/wwylon/tqdaemon/actions/workflows/ci.yml)
8
+ [![PyPI](https://img.shields.io/pypi/v/tqdaemon)](https://pypi.org/project/tqdaemon/)
9
+ [![Latest tag](https://img.shields.io/github/v/tag/wwylon/tqdaemon?label=version)](https://github.com/wwylon/tqdaemon/tags)
10
+
11
+ ![tqdaemon — lokalne zadania, agenci, workery](https://raw.githubusercontent.com/wwylon/tqdaemon/main/docs/assets/demo.gif)
12
+
13
+ **tqdaemon** uruchamia długie zadania na Twoich komputerach, nie przeciążając
14
+ ich. Opisujesz job w YAML. Lokalny **daemon** startuje pracę tylko gdy jest
15
+ wystarczająco CPU, RAM i pamięci GPU. Postęp śledzisz w **UI**, CLI **`tq`**
16
+ lub przez agenta AI (**MCP**).
17
+
18
+ To nie Celery, Kubernetes ani CI. To też nie stary projekt AMQP/Debian
19
+ [rojkov/taskqueue](https://github.com/rojkov/taskqueue) (simpletaskqueue).
20
+
21
+ ## Po co
22
+
23
+ - Przyjmowanie zadań według zasobów (CPU / RAM / GPU) lokalnie lub na workerach
24
+ - YAML: checkpointy, zależności, priorytety, stabilne kody błędów
25
+ - Pod agentów: submit / wait / diagnose przez MCP
26
+ - Lokalnie — bez konta w chmurze SaaS
27
+
28
+ ## Najlepszy start: poproś agenta
29
+
30
+ Powiedz agentowi (Cursor, Claude Code, …), żeby używał **tqdaemon** do długich
31
+ jobów: MCP (`tq mcp`), YAML i `wait_for_task` zamiast blokować czat.
32
+ Setup: **[docs/mcp.md](docs/mcp.md)**.
33
+
34
+ ## Instalacja
35
+
36
+ **Wymagania:** Python **3.12+**, [Git](https://git-scm.com/), [`uv`](https://docs.astral.sh/uv/).
37
+
38
+ ```powershell
39
+ git clone https://github.com/wwylon/tqdaemon.git
40
+ cd tqdaemon
41
+ uv sync
42
+ uv run tq doctor
43
+ uv run tq start
44
+ ```
45
+
46
+ Otwórz **http://127.0.0.1:8765**. Przykład:
47
+ [`examples/minimal`](examples/minimal/).
48
+
49
+ ## Dokumentacja
50
+
51
+ | Dla | Start |
52
+ |-----|--------|
53
+ | Ludzie | [docs/README.md](docs/README.md) · [Quickstart](docs/operators/quickstart.md) · [Web UI](docs/operators/web-ui.md) · [CLI](docs/operators/cli.md) |
54
+ | Agenci | [AGENTS.md](AGENTS.md) · [MCP](docs/mcp.md) · [Cookbook](docs/agents/task-script-cookbook.md) · [llms.txt](llms.txt) |
55
+
56
+ **Zaawansowane:** [Security](docs/security.md) · [Task standards](docs/task_standards.md) · [Scheduler](docs/scheduler.md) · [Workers](docs/WORKER_SETUP.md)
57
+
58
+ ## Przejrzystość
59
+
60
+ Nie wysyłamy telemetrii. Publiczne sygnały: gwiazdki GitHub; po publikacji na
61
+ PyPI — liczniki pobrań. Szczegóły: [docs/security.md](docs/security.md#privacy--telemetry).
62
+
63
+ ## Licencja
64
+
65
+ MIT — [LICENSE](LICENSE) · [Changelog](CHANGELOG.md)