3tears-agent-wake
Long-running-agent foundation for 3tears-based agents. This package ships the schema + Collection layer for three platform tables:
agent_wake_schedules-- one row per active wake schedule for a conversation (cron / one-shot / random-window / etc). Carries a nullableskill_idFK referencing the cross-packageagent_skills.skill_idstandalone UNIQUE.wake_fires-- one row per wake fire (history; status enum spans'fired','fired_silent','yielded','skipped_busy','skipped_rate_limit','skipped_cap','skipped_no_handler','failed').webhook_subscriptions-- one row per inbound HTTP webhook subscription. Carries nullabledefault_skill_idFK toagent_skills.skill_idand Fernet-encryptedsecret_ciphertext.
Plus three BaseEntity subclasses, three BaseCollection subclasses,
and an agent-scope migration registration declaring
depends_on=("conversations", "agent_skills").
No tick engine, no dispatch handler, no agent tools, and no Pydantic API models live in this package.
Partitioning
All three tables partition by conversation_id (wake operations are
conversation-scoped). The Collections expose partition_column = "conversation_id" so the workspace partition-column enforcement walker
audits every SQL string touching these tables for the predicate.
There is intentionally NO database-level FK on conversation_id ->
conversations(conversation_id). The 3tears conversations table
carries a composite PK (agent_id, conversation_id) and no standalone
UNIQUE (conversation_id) constraint, so a single-column FK is not
legal. The same precedent applies in packages/agent/tools/
(context_items.conversation_id) and packages/agent/skills/
(agent_skill_invocations.conversation_id). Conversation lifecycle is
governed by app-level cascade through ConversationsCollection.
Orphan-row implication. Because there is no DB-level FK, deleting a
row from conversations does NOT automatically remove the wake
schedules, fires, or webhook subscriptions for that conversation.
They become orphans (rows whose conversation_id no longer resolves).
The partition-column enforcement walker keeps the application blind to
orphans (every query is filtered by conversation_id so an orphan is
invisible at the read path), but the rows still occupy storage. This
is the same trade-off agent-tools and agent-skills make. A future
cross-package cleanup (a TRIGGER on conversations-delete that fans
out to dependent tables, or a periodic GC job in ConversationsCollection)
would close the gap; that work is intentionally cross-cutting and
out of scope for this package.
Migration registration
from threetears.agent.wake import register as register_wake
from threetears.core.data.migrations import MigrationRunner
runner = MigrationRunner()
register_wake(runner)
Migrations are agent-scoped and declare
depends_on=("conversations", "agent_skills") -- the canonical
MigrationRunner topologically orders the agent-scope pass so the
conversations + agent_skills migrations apply before any wake
table is created.
Design references
See docs/agent-wake/README.md for the package overview and the
locked design decisions.
Release files for 3tears-agent-wake 0.41.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| 3tears_agent_wake-0.41.0.tar.gz | 163.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 3tears_agent_wake-0.41.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 277.0 kB
Release files / 3tears_agent_wake-0.41.0.tar.gz
| Download URL | 3tears_agent_wake-0.41.0.tar.gz |
|---|---|
| Size | 163.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c94b2213e94a5f064249d1249c9aa58a973c695a71990ea25445a015a6f0ef8
|
|
BLAKE2b-256 checksum How to use checksums |
c02e5a24e5d5fba058238461341e55d7a56eaadc8fa37eb193172783d060831a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / 3tears_agent_wake-0.41.0-py3-none-any.whl
| Download URL | 3tears_agent_wake-0.41.0-py3-none-any.whl |
|---|---|
| Size | 113.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3276c75470dba3ac23349fcd15b847fc5b2c29605a5f38c04bf8cc71742ea714
|
|
BLAKE2b-256 checksum How to use checksums |
1c46c102144ff8e5303407f555b00a729c2bc35e8d62bcc88b0d35759865ba04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency log