Skip to content

fix(worker): manifest crash-loop follow-up — availability/liveness decoupling, loaded_models status, unreachable mappings#1870

Merged
jaylfc merged 4 commits into
jaylfc:devfrom
hognek:feat/worker-manifest-crash-loop
Jul 17, 2026
Merged

fix(worker): manifest crash-loop follow-up — availability/liveness decoupling, loaded_models status, unreachable mappings#1870
jaylfc merged 4 commits into
jaylfc:devfrom
hognek:feat/worker-manifest-crash-loop

Conversation

@hognek

@hognek hognek commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the remaining items from #1765 (follow-up to merged PR #1762, hotfix #1767 already addressed the crash-loop).

Changes

MEDIUM: Availability/liveness decoupling

detect_backends() now emits synthetic backend entries for manifest-declared software types that have no running (probed) counterpart. Stopped-but-installed backends declared in the worker manifest now advertise their available models to the controller. Previously, manifest entries vanished from heartbeats when their backend wasn't running.

Low: Drop unreachable mappings

Removed kokoro and whisper from SOFTWARE_TO_BACKEND_TYPE. These were unreachable because no probe candidates exist for those backend types. Adding probes would require backend support that isn't implemented.

Nit: loaded_models for status

Changed detect_backends() enrichment to use loaded_models (from /api/ps, in-memory) instead of the full models catalog (from /api/tags, on-disk) when determining whether a manifest-declared model is 'loaded'. Previously, models merely present on disk were reported as 'loaded' rather than 'available'.

Files changed

  • tinyagentos/worker/worker_manifest.py — drop kokoro/whisper from SOFTWARE_TO_BACKEND_TYPE
  • tinyagentos/worker/agent.py — loaded_models-based status + synthetic backend entries for stopped backends
  • tests/test_worker_manifest.py — updated mapping tests
  • tests/test_worker.py — 6 new tests (4 stopped-backend emission + 2 loaded_models status)

Tests

All 150 worker+manifest tests pass (0 failures).

Summary by CodeRabbit

  • New Features

    • Worker backend detection now enriches results with manifest-declared models, including for backend types that aren’t currently running.
    • Manifest-only backends are listed as stopped, with available models populated from the manifest.
    • Model status reporting now distinguishes loaded models from those only available in the catalog.
  • Bug Fixes

    • Worker registration no longer risks sending an empty backend URL when synthetic backends are present.
    • Backend detection gracefully handles manifest load/enrichment failures.
  • Tests

    • Expanded regression coverage for backend synthesis and model-status enrichment behaviors.

…coupling, loaded_models status, unreachable mappings

Fixes jaylfc#1765 (remaining items after hotfix jaylfc#1767):

MEDIUM: Emit synthetic backend entries for manifest-declared software
types that have no running (probed) counterpart. This decouples
availability from liveness — stopped-but-installed backends declared
in the worker manifest now advertise their available models to the
controller. Previously, manifest entries vanished from heartbeats
when their backend wasn't running.

Low: Drop kokoro/whisper from SOFTWARE_TO_BACKEND_TYPE. These mappings
were unreachable because no probe candidates exist for those backend
types. Adding probes would require backend support that isn't
implemented; keeping the mappings invites confusion.

Nit: Use loaded_models (from /api/ps, in-memory) instead of the full
models catalog (from /api/tags, on-disk) when determining whether a
manifest-declared model is 'loaded'. Previously, models merely present
on disk were reported as 'loaded' rather than 'available'.

Tests: 6 new tests (4 for stopped-backend emission, 2 for
loaded_models status). All 150 worker+manifest tests pass.
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 4619532c-7311-4b70-9a4a-c463713bc3ed

📥 Commits

Reviewing files that changed from the base of the PR and between 6a511e4 and 7861642.

📒 Files selected for processing (4)
  • tests/test_worker.py
  • tests/test_worker_manifest.py
  • tinyagentos/worker/agent.py
  • tinyagentos/worker/worker_manifest.py
 ___________________________________________________________
< Did you mean to handle errors, or just *experience* them? >
 -----------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
📝 Walkthrough

Walkthrough

Worker backend detection now enriches manifest models using loaded-model residency, synthesizes stopped entries for manifest-only backend types, and preserves fail-soft behavior. Manifest software mappings and related test fixtures are updated accordingly.

Changes

Manifest backend enrichment

Layer / File(s) Summary
Manifest mapping contract
tinyagentos/worker/worker_manifest.py, tests/test_worker_manifest.py
The mapping retains llamacpp and embed as llama-cpp entries, removes kokoro and whisper, and updates manifest parsing fixtures.
Loaded model status enrichment
tinyagentos/worker/agent.py, tests/test_worker.py
Manifest models are marked loaded only when present in loaded_models; catalog-only models are marked available.
Synthetic stopped backend synthesis
tinyagentos/worker/agent.py, tests/test_worker.py
Unprobed manifest backend types produce stopped synthetic entries with available models, empty probe fields, and fail-soft enrichment behavior.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant WorkerAgent
  participant BackendAPI
  participant WorkerManifest
  WorkerAgent->>BackendAPI: Probe running backends
  BackendAPI-->>WorkerAgent: Return models and loaded_models
  WorkerAgent->>WorkerManifest: Load manifest entries
  WorkerManifest-->>WorkerAgent: Return software and model declarations
  WorkerAgent->>WorkerAgent: Mark loaded or available models
  WorkerAgent->>WorkerAgent: Add stopped entries for unprobed types
Loading

Possibly related issues

Possibly related PRs

  • jaylfc/taOS#1762 — Both changes populate backend available_models from worker manifest data.
  • jaylfc/taOS#1767 — Both changes modify manifest enrichment and backend detection resilience.

Suggested reviewers: jaylfc

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR covers backend availability/model-status work, but it omits linked issue #1767 items like VRAM fail-open and min_ram_mb gating. Add the remaining #1767 hotfixes: VRAM fail-open/probe_available, real min_ram_mb gating, skipped-manifest logging, and the install-script comment correction.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main manifest/backend availability and loaded-model status changes.
Out of Scope Changes check ✅ Passed All changes stay within worker manifest/backend detection, mapping, and test coverage.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gitar-bot

gitar-bot Bot commented Jul 17, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@hognek
hognek marked this pull request as ready for review July 17, 2026 12:37
@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

Comment thread tinyagentos/worker/agent.py Outdated
backends.append({
"name": bt,
"type": bt,
"url": "",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Synthetic stopped backend uses url: "", which can propagate into an empty advertised worker URL.

build_heartbeat_payload falls back to backends[0]["url"] (agent.py:521) when no advertise_url/TAOS_ADVERTISE_IP is set. When a worker declares manifest models but has no running backend, the synthetic stopped entry is the only element in backends, so backends[0]["url"] is "" and the worker advertises an empty URL to the controller.

This is exactly the manifest-only scenario your new test test_manifest_only_backend_creates_stopped_entry exercises. Consider skipping the url fallback for synthetic/stopped backends (e.g. fall back to get_worker_url() when the selected backend url is falsy) so the worker still advertises a reachable address.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

})
if available:
backends.append({
"name": bt,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Synthetic backend name is just bt (e.g. "llama-cpp"), while probed backends use f"{backend_type}:{port}" (agent.py:150). This gives the same logical backend two different identities depending on liveness.

The scheduler catalog keys on name (scheduler/backend_catalog.py), so a backend that flips between running and stopped could create conflicting/duplicate catalog entries. Consider keeping name consistent with the probed scheme (e.g. include a sentinel port) or documenting the stopped-backend naming convention explicitly.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Comment thread tinyagentos/worker/agent.py Outdated
"models": [],
"loaded_models": [],
"status": "stopped",
"kv_quant_support": {"k": ["fp16"], "v": ["fp16"], "boundary": False},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: kv_quant_support is hardcoded to the fp16 default for stopped/synthetic backends. If the declared backend type does not actually support fp16 KV quant, detect_kv_quant_support (agent.py:383) will over-report cluster-wide KV-quant capability because it unions kv_quant_support across all backends.

For a backend that is not currently running, KV-quant support is genuinely unknown. Consider omitting kv_quant_support (or marking it clearly unknown) for synthetic entries rather than asserting a concrete (possibly wrong) capability.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

@kilo-code-bot

kilo-code-bot Bot commented Jul 17, 2026

Copy link
Copy Markdown

Code Review Summary

Status: No New Issues Found | Recommendation: Merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 0
Files Reviewed (2 files)
  • tests/test_worker.py - style-only em-dash to hyphen normalization (no logic change)
  • tests/test_worker_manifest.py - style-only em-dash to hyphen normalization + test data update (no logic change)

Incremental update vs. previous review at 0e52d442. The sole change since the prior review SHA is cosmetic em-dash () to double-hyphen (--) normalization in test comments and one test docstring, plus a test-data swap in test_parses_valid_manifest (kokoro-v1.0 → gemma-3-1b-it, consistent with the kokoro/whisper mapping removal already merged). No logic, no new test coverage, no behavior change. All prior code findings (empty/None-URL WARNING, name SUGGESTION, kv_quant_support SUGGESTION) were resolved in commits dc9ab0b–0e52d44 and remain resolved at HEAD 7861642. No new issues to report.

Previous Review Summaries (3 snapshots, latest commit 0e52d44)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 0e52d44)

Status: 1 Issue Found | Recommendation: Optional follow-up

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
tinyagentos/worker/agent.py 258 Synthetic backend name is the bare type bt (e.g. "llama-cpp"), while probed backends use f"{backend_type}:{port}". The scheduler catalog keys on name, so a backend flipping between stopped/running gets two identities. (Pre-existing; on unchanged code, already tracked in an active inline comment.)
Files Reviewed (3 files)
  • tinyagentos/worker/agent.py - URL fallback fix verified (incremental diff)
  • tests/test_worker.py - new regression test, no issues
  • tinyagentos/worker/worker_manifest.py - docstring cosmetic change, no issues

Incremental update vs. previous review at dc9ab0b. The empty/None-URL WARNING is now RESOLVED: build_heartbeat_payload/register select next((b["url"] for b in backends if b.get("url")), self.get_worker_url()) (agent.py:528), so stopped-only backends fall through to a reachable URL, backed by a new regression test. The name SUGGESTION remains open on unchanged code and is carried forward via its existing inline comment.

Fix these issues in Kilo Cloud

Previous review (commit dc9ab0b)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
tinyagentos/worker/agent.py 528 Synthetic stopped backend now sets url: None (was ""). build_heartbeat_payload still selects backends[0]["url"] directly (line 528) with no falsy fallback to get_worker_url(). When only stopped manifest backends exist, worker_url becomes None, breaking worker registration routing. The consumer-side fix (skip falsy urls) is not in this PR.

SUGGESTION

File Line Issue
tinyagentos/worker/agent.py 258 Synthetic backend name is the bare type bt (e.g. "llama-cpp"), while probed backends use f"{backend_type}:{port}". The scheduler catalog keys on name, so a backend flipping between stopped/running gets two identities.
Files Reviewed (1 files)
  • tinyagentos/worker/agent.py - 1 warning, 1 suggestion (incremental diff only)

Incremental update vs. previous review at 6a511e4. The kv_quant_support over-reporting (previously line 262) is now RESOLVED: synthetic entries emit {} and detect_kv_quant_support skips empty dicts. The empty-URL WARNING and the name SUGGESTION remain open and are carried forward.

Fix these issues in Kilo Cloud

Previous review (commit 6a511e4)

Status: 3 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 2
Issue Details (click to expand)

WARNING

File Line Issue
tinyagentos/worker/agent.py 257 Synthetic stopped backend sets url: ""; when no backend is probed the worker advertises an empty URL via backends[0]["url"] fallback (agent.py:521)

SUGGESTION

File Line Issue
tinyagentos/worker/agent.py 255 Synthetic backend name omits port while probed backends use type:port, creating a divergent identity for the same logical backend
tinyagentos/worker/agent.py 262 kv_quant_support hardcoded to fp16 default for stopped backends may over-report cluster KV-quant capability
Files Reviewed (4 files)
  • tinyagentos/worker/agent.py - 1 warning, 2 suggestions
  • tinyagentos/worker/worker_manifest.py - 0 issues
  • tests/test_worker.py - 0 issues
  • tests/test_worker_manifest.py - 0 issues

Fix these issues in Kilo Cloud


Reviewed by hy3:free · Input: 78.6K · Output: 2.8K · Cached: 231.9K

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tinyagentos/worker/agent.py (1)

184-202: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Preserve loaded status for running llama.cpp backends.

_probe_loaded_models() returns [] for llama.cpp because /v1/models already represents its active model. Using only loaded_models therefore changes every running llama.cpp manifest model from "loaded" to "available".

Proposed fix
-                    probed_loaded_names = {
-                        m.get("name", "") for m in backend.get("loaded_models", [])
-                    }
+                    residency_models = (
+                        backend.get("loaded_models", [])
+                        if backend_type in ("rkllama", "ollama")
+                        else backend.get("models", [])
+                    )
+                    probed_loaded_names = {
+                        m.get("name", "") for m in residency_models
+                    }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tinyagentos/worker/agent.py` around lines 184 - 202, Update the model status
logic around _probe_loaded_models() so running llama.cpp backends treat the
active /v1/models result as loaded, even when loaded_models is empty. Preserve
the resident loaded_models behavior for other backend types, and ensure matching
manifest model_ids continue to receive "loaded" rather than "available".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tinyagentos/worker/agent.py`:
- Around line 254-257: Update the synthetic backend construction in the
stopped-manifest fallback so its advertised “url” uses get_worker_url() instead
of an empty string. Preserve the existing backend name and type values, ensuring
downstream worker URL selection does not choose an empty URL.

---

Outside diff comments:
In `@tinyagentos/worker/agent.py`:
- Around line 184-202: Update the model status logic around
_probe_loaded_models() so running llama.cpp backends treat the active /v1/models
result as loaded, even when loaded_models is empty. Preserve the resident
loaded_models behavior for other backend types, and ensure matching manifest
model_ids continue to receive "loaded" rather than "available".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b1567000-4317-47bb-8433-b5f1dcbde39c

📥 Commits

Reviewing files that changed from the base of the PR and between 7161b48 and 6a511e4.

📒 Files selected for processing (4)
  • tests/test_worker.py
  • tests/test_worker_manifest.py
  • tinyagentos/worker/agent.py
  • tinyagentos/worker/worker_manifest.py
💤 Files with no reviewable changes (1)
  • tinyagentos/worker/worker_manifest.py

Comment thread tinyagentos/worker/agent.py Outdated
- url: None instead of empty string for synthetic backends (no endpoint)
- kv_quant_support: {} instead of hardcoded fp16 (unknown, not probed)
- Add comments explaining portless name and empty KV quant dict

Resolves Kilo WARNING + 2 SUGGESTION on PR jaylfc#1870
@hognek

hognek commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Addressed Kilo findings (all 3) in commit dc9ab0b:

  • WARNING (url:''): Changed synthetic backend url from "" to None — semantically correct for 'no endpoint', and the register() fallback chain treats None as falsy (falls through to get_worker_url()).
  • SUGGESTION (name without port): Added comment explaining that synthetic entries use the bare type name (not type:port) since there's no probed instance.
  • SUGGESTION (hardcoded kv_quant): Changed kv_quant_support from hardcoded fp16 to {} — no data is more honest than over-reporting. detect_kv_quant_support() adds the fp16 baseline anyway.

All 51 worker+manifest tests pass. CodeRabbit and CLA are green.

@jaylfc

jaylfc commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Deep-reviewed this at code level @hognek. The availability/liveness decoupling, the loaded_models status-from-/api/ps fix, and the malformed-input guards are all solid, and the 6 new tests give good branch coverage (51 passed locally). One blocking regression before merge though:

register() produces url: None for a synthetic-only backend list (tinyagentos/worker/agent.py, worker_url selection ~L464-467).

worker_url = self.advertise_url or adv_url or (backends[0]["url"] if backends else self.get_worker_url())

get_worker_url() is only reached when backends is empty. With a synthetic-only list, backends is truthy, so the ternary returns backends[0]["url"], which is now None. With no advertise_url / TAOS_ADVERTISE_IP (bare-metal / Mac), worker_url becomes None. WorkerRegister.url is a required non-nullable str (routes/cluster.py:217) and the handler also 400s on a falsy url (:335), so the POST fails -> register() returns False -> 5s retry loop.

That is exactly issue #1765's item-2 case: a worker whose only backend is installed-but-stopped, no advertise IP. It doesn't crash-loop under systemd anymore, but it converts the crash into a silent registration-failure loop, so the loop moves rather than being eliminated for that config.

Heads up: the earlier note that changing "" -> None fixes this via "the fallback falls through to get_worker_url()" isn't right - None doesn't reach get_worker_url() because that branch is gated on backends being empty, not on the url being falsy. Kilo's WARNING on this line is real and still live in the head.

Suggested fix - pick the url from live backends only, then fall back:

live_url = next((b["url"] for b in backends if b.get("url")), None)
worker_url = self.advertise_url or adv_url or live_url or self.get_worker_url()

And a regression test asserting register()'s payload url is non-None when the only backend is synthetic/stopped would lock it (the current tests assert detect_backends() shape but never the registration url, which is why this slipped through).

Non-blocking: (1) the synthetic name is the bare backend type rather than type:port, so a backend flipping stopped<->running gets two catalog identities - benign churn, fine to defer. (2) A few em dashes in the commit subject/body and test comments - please swap for -- per the no-em-dash house rule (it's in the taos-development-skill soul.md now).

Everything else looks good - fix the registration url and I'll merge. Nice work on the decoupling.

hognek and others added 2 commits July 17, 2026 16:29
…c/stopped

When detect_backends returns only synthetic stopped backends (all with
url=None), the old backends[0]['url'] would produce worker_url=None,
causing a silent registration-failure loop.  Use next() with a generator
to pick the first live backend URL, falling through to get_worker_url()
when none found.

Also replace em dash with ASCII double-hyphen in worker_manifest.py
docstring per review.

Regression test: TestRegistrationUrlFallback verifies the payload URL
is a real http:// URL, not None.
House convention: no em dashes in repo text. Maintainer polish on @hognek's worker crash-loop follow-up.
@jaylfc
jaylfc merged commit e15a26b into jaylfc:dev Jul 17, 2026
3 of 4 checks passed
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
putComment timed out

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
tests/test_worker.py (1)

304-305: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer .kwargs for accessing mock call arguments.

Using the .kwargs attribute is generally more readable and idiomatic in modern Python than using index-based access (call_args[1]).

♻️ Proposed refactor
-            call_args = mock_client.post.call_args
-            body = _json.loads(call_args[1]["content"])
+            call_args = mock_client.post.call_args
+            body = _json.loads(call_args.kwargs["content"])
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_worker.py` around lines 304 - 305, Update the mock argument access
near call_args to use mock_client.post.call_args.kwargs instead of positional
indexing through call_args[1], while preserving the existing content extraction
and JSON parsing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tests/test_worker.py`:
- Around line 304-305: Update the mock argument access near call_args to use
mock_client.post.call_args.kwargs instead of positional indexing through
call_args[1], while preserving the existing content extraction and JSON parsing
behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 4619532c-7311-4b70-9a4a-c463713bc3ed

📥 Commits

Reviewing files that changed from the base of the PR and between 6a511e4 and 7861642.

📒 Files selected for processing (4)
  • tests/test_worker.py
  • tests/test_worker_manifest.py
  • tinyagentos/worker/agent.py
  • tinyagentos/worker/worker_manifest.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • tinyagentos/worker/worker_manifest.py
  • tests/test_worker_manifest.py
  • tinyagentos/worker/agent.py

@hognek
hognek deleted the feat/worker-manifest-crash-loop branch July 17, 2026 20:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants