@team-agent/installer 0.2.10 → 0.3.0
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.
- package/Cargo.lock +744 -0
- package/Cargo.toml +34 -0
- package/crates/team-agent/Cargo.toml +33 -0
- package/crates/team-agent/src/cli/adapters.rs +1343 -0
- package/crates/team-agent/src/cli/diagnose.rs +554 -0
- package/crates/team-agent/src/cli/emit.rs +1077 -0
- package/crates/team-agent/src/cli/helpers.rs +88 -0
- package/crates/team-agent/src/cli/leader.rs +216 -0
- package/crates/team-agent/src/cli/mod.rs +1141 -0
- package/crates/team-agent/src/cli/profile.rs +306 -0
- package/crates/team-agent/src/cli/send.rs +215 -0
- package/crates/team-agent/src/cli/status.rs +179 -0
- package/crates/team-agent/src/cli/status_port.rs +502 -0
- package/crates/team-agent/src/cli/tests/base.rs +616 -0
- package/crates/team-agent/src/cli/tests/compile.rs +96 -0
- package/crates/team-agent/src/cli/tests/divergence.rs +509 -0
- package/crates/team-agent/src/cli/tests/lane_c.rs +333 -0
- package/crates/team-agent/src/cli/tests/leader_watch.rs +395 -0
- package/crates/team-agent/src/cli/tests/main_preserved.rs +675 -0
- package/crates/team-agent/src/cli/tests/missing_subcommands.rs +390 -0
- package/crates/team-agent/src/cli/tests/mod.rs +97 -0
- package/crates/team-agent/src/cli/tests/peer_allow.rs +137 -0
- package/crates/team-agent/src/cli/tests/repair_state_byte_lock.rs +302 -0
- package/crates/team-agent/src/cli/tests/run_delegation.rs +305 -0
- package/crates/team-agent/src/cli/tests/status_send.rs +385 -0
- package/crates/team-agent/src/cli/tests/verb_profile.rs +182 -0
- package/crates/team-agent/src/cli/tests/verb_settle.rs +236 -0
- package/crates/team-agent/src/cli/tests/verb_validate.rs +184 -0
- package/crates/team-agent/src/cli/types.rs +605 -0
- package/crates/team-agent/src/compiler/tests.rs +701 -0
- package/crates/team-agent/src/compiler.rs +489 -0
- package/crates/team-agent/src/coordinator/backoff.rs +153 -0
- package/crates/team-agent/src/coordinator/health.rs +436 -0
- package/crates/team-agent/src/coordinator/mod.rs +80 -0
- package/crates/team-agent/src/coordinator/orphan.rs +179 -0
- package/crates/team-agent/src/coordinator/tests/abnormal.rs +255 -0
- package/crates/team-agent/src/coordinator/tests/basics.rs +262 -0
- package/crates/team-agent/src/coordinator/tests/daemon.rs +323 -0
- package/crates/team-agent/src/coordinator/tests/health_sync.rs +263 -0
- package/crates/team-agent/src/coordinator/tests/main_preserved.rs +136 -0
- package/crates/team-agent/src/coordinator/tests/mod.rs +310 -0
- package/crates/team-agent/src/coordinator/tests/spine.rs +261 -0
- package/crates/team-agent/src/coordinator/tests/takeover.rs +227 -0
- package/crates/team-agent/src/coordinator/tests/tick_core.rs +256 -0
- package/crates/team-agent/src/coordinator/tests/watch.rs +167 -0
- package/crates/team-agent/src/coordinator/tick.rs +2032 -0
- package/crates/team-agent/src/coordinator/types.rs +584 -0
- package/crates/team-agent/src/db/migration.rs +716 -0
- package/crates/team-agent/src/db/mod.rs +23 -0
- package/crates/team-agent/src/db/schema.rs +378 -0
- package/crates/team-agent/src/event_log.rs +375 -0
- package/crates/team-agent/src/fake_worker.rs +253 -0
- package/crates/team-agent/src/leader/helpers.rs +190 -0
- package/crates/team-agent/src/leader/inject.rs +33 -0
- package/crates/team-agent/src/leader/lease.rs +1063 -0
- package/crates/team-agent/src/leader/mod.rs +99 -0
- package/crates/team-agent/src/leader/owner_bind.rs +292 -0
- package/crates/team-agent/src/leader/rediscover/tests.rs +525 -0
- package/crates/team-agent/src/leader/rediscover.rs +1099 -0
- package/crates/team-agent/src/leader/start.rs +273 -0
- package/crates/team-agent/src/leader/takeover.rs +235 -0
- package/crates/team-agent/src/leader/tests/basics.rs +183 -0
- package/crates/team-agent/src/leader/tests/byte_findings.rs +234 -0
- package/crates/team-agent/src/leader/tests/identity.rs +206 -0
- package/crates/team-agent/src/leader/tests/idle.rs +271 -0
- package/crates/team-agent/src/leader/tests/lease_api.rs +225 -0
- package/crates/team-agent/src/leader/tests/lease_claim.rs +253 -0
- package/crates/team-agent/src/leader/tests/mod.rs +125 -0
- package/crates/team-agent/src/leader/tests/rediscover.rs +351 -0
- package/crates/team-agent/src/leader/tests/wake_start_owner.rs +204 -0
- package/crates/team-agent/src/leader/types.rs +487 -0
- package/crates/team-agent/src/lib.rs +85 -0
- package/crates/team-agent/src/lifecycle/display.rs +228 -0
- package/crates/team-agent/src/lifecycle/helpers.rs +112 -0
- package/crates/team-agent/src/lifecycle/launch/plan.rs +227 -0
- package/crates/team-agent/src/lifecycle/launch.rs +1833 -0
- package/crates/team-agent/src/lifecycle/mod.rs +62 -0
- package/crates/team-agent/src/lifecycle/restart/agent.rs +533 -0
- package/crates/team-agent/src/lifecycle/restart/common.rs +517 -0
- package/crates/team-agent/src/lifecycle/restart/orchestrator.rs +41 -0
- package/crates/team-agent/src/lifecycle/restart/rebuild.rs +268 -0
- package/crates/team-agent/src/lifecycle/restart/remove.rs +780 -0
- package/crates/team-agent/src/lifecycle/restart/selection.rs +208 -0
- package/crates/team-agent/src/lifecycle/restart/team_state.rs +242 -0
- package/crates/team-agent/src/lifecycle/restart.rs +76 -0
- package/crates/team-agent/src/lifecycle/tests/agent_ops.rs +455 -0
- package/crates/team-agent/src/lifecycle/tests/core.rs +989 -0
- package/crates/team-agent/src/lifecycle/tests/lane_ops.rs +583 -0
- package/crates/team-agent/src/lifecycle/tests/launch_spawn.rs +933 -0
- package/crates/team-agent/src/lifecycle/tests/main_preserved.rs +265 -0
- package/crates/team-agent/src/lifecycle/tests.rs +27 -0
- package/crates/team-agent/src/lifecycle/types.rs +685 -0
- package/crates/team-agent/src/main.rs +41 -0
- package/crates/team-agent/src/mcp_server/helpers.rs +228 -0
- package/crates/team-agent/src/mcp_server/mod.rs +183 -0
- package/crates/team-agent/src/mcp_server/normalize.rs +312 -0
- package/crates/team-agent/src/mcp_server/tests/golden.rs +283 -0
- package/crates/team-agent/src/mcp_server/tests/normalize.rs +244 -0
- package/crates/team-agent/src/mcp_server/tests/scoped.rs +189 -0
- package/crates/team-agent/src/mcp_server/tests/send.rs +222 -0
- package/crates/team-agent/src/mcp_server/tests/tools.rs +158 -0
- package/crates/team-agent/src/mcp_server/tests/wire.rs +159 -0
- package/crates/team-agent/src/mcp_server/tests.rs +38 -0
- package/crates/team-agent/src/mcp_server/tools.rs +603 -0
- package/crates/team-agent/src/mcp_server/types.rs +421 -0
- package/crates/team-agent/src/mcp_server/wire.rs +388 -0
- package/crates/team-agent/src/message_store.rs +767 -0
- package/crates/team-agent/src/messaging/activity.rs +433 -0
- package/crates/team-agent/src/messaging/delivery.rs +542 -0
- package/crates/team-agent/src/messaging/helpers.rs +209 -0
- package/crates/team-agent/src/messaging/leader_receiver.rs +340 -0
- package/crates/team-agent/src/messaging/mod.rs +147 -0
- package/crates/team-agent/src/messaging/peers.rs +32 -0
- package/crates/team-agent/src/messaging/results.rs +537 -0
- package/crates/team-agent/src/messaging/scheduler.rs +344 -0
- package/crates/team-agent/src/messaging/selftest.rs +100 -0
- package/crates/team-agent/src/messaging/send.rs +582 -0
- package/crates/team-agent/src/messaging/tests/basic.rs +357 -0
- package/crates/team-agent/src/messaging/tests/main_preserved.rs +122 -0
- package/crates/team-agent/src/messaging/tests/mod.rs +293 -0
- package/crates/team-agent/src/messaging/tests/runtime.rs +1422 -0
- package/crates/team-agent/src/messaging/tests/spine.rs +437 -0
- package/crates/team-agent/src/messaging/trust.rs +192 -0
- package/crates/team-agent/src/messaging/types.rs +355 -0
- package/crates/team-agent/src/messaging/watchers.rs +591 -0
- package/crates/team-agent/src/model/enums.rs +311 -0
- package/crates/team-agent/src/model/errors.rs +17 -0
- package/crates/team-agent/src/model/ids.rs +155 -0
- package/crates/team-agent/src/model/mod.rs +22 -0
- package/crates/team-agent/src/model/paths.rs +228 -0
- package/crates/team-agent/src/model/permissions.rs +567 -0
- package/crates/team-agent/src/model/routing.rs +340 -0
- package/crates/team-agent/src/model/spec.rs +680 -0
- package/crates/team-agent/src/model/task_graph.rs +380 -0
- package/crates/team-agent/src/model/testdata/fuzz.golden.yaml +43 -0
- package/crates/team-agent/src/model/testdata/fuzz.yaml +43 -0
- package/crates/team-agent/src/model/testdata/spec_invalid_a.yaml +207 -0
- package/crates/team-agent/src/model/testdata/team.spec.golden.yaml +206 -0
- package/crates/team-agent/src/model/testdata/team.spec.yaml +206 -0
- package/crates/team-agent/src/model/yaml/tests.rs +288 -0
- package/crates/team-agent/src/model/yaml.rs +800 -0
- package/crates/team-agent/src/packaging/install.rs +305 -0
- package/crates/team-agent/src/packaging/migrate.rs +30 -0
- package/crates/team-agent/src/packaging/mod.rs +82 -0
- package/crates/team-agent/src/packaging/repair.rs +24 -0
- package/crates/team-agent/src/packaging/tests.rs +829 -0
- package/crates/team-agent/src/packaging/types.rs +369 -0
- package/crates/team-agent/src/provider/adapter.rs +801 -0
- package/crates/team-agent/src/provider/approvals/mod.rs +2 -0
- package/crates/team-agent/src/provider/approvals/parsing.rs +452 -0
- package/crates/team-agent/src/provider/approvals/runtime_prompts.rs +163 -0
- package/crates/team-agent/src/provider/classify.rs +456 -0
- package/crates/team-agent/src/provider/faults.rs +136 -0
- package/crates/team-agent/src/provider/helpers.rs +41 -0
- package/crates/team-agent/src/provider/mod.rs +53 -0
- package/crates/team-agent/src/provider/startup_prompt.rs +423 -0
- package/crates/team-agent/src/provider/tests/adapter.rs +239 -0
- package/crates/team-agent/src/provider/tests/classify.rs +240 -0
- package/crates/team-agent/src/provider/tests/faults.rs +120 -0
- package/crates/team-agent/src/provider/tests/idle.rs +208 -0
- package/crates/team-agent/src/provider/tests/wire.rs +213 -0
- package/crates/team-agent/src/provider/tests.rs +31 -0
- package/crates/team-agent/src/provider/types.rs +424 -0
- package/crates/team-agent/src/state/identity.rs +656 -0
- package/crates/team-agent/src/state/mod.rs +58 -0
- package/crates/team-agent/src/state/owner_gate.rs +423 -0
- package/crates/team-agent/src/state/persist.rs +712 -0
- package/crates/team-agent/src/state/projection.rs +657 -0
- package/crates/team-agent/src/state/selector.rs +105 -0
- package/crates/team-agent/src/state/testdata/state-rich.canonical.json +133 -0
- package/crates/team-agent/src/tmux_backend/tests.rs +586 -0
- package/crates/team-agent/src/tmux_backend.rs +758 -0
- package/crates/team-agent/src/transport/test_support.rs +252 -0
- package/crates/team-agent/src/transport/tests/behavior.rs +327 -0
- package/crates/team-agent/src/transport/tests/mod.rs +199 -0
- package/crates/team-agent/src/transport/tests/wire.rs +527 -0
- package/crates/team-agent/src/transport.rs +774 -0
- package/npm/install.mjs +90 -106
- package/package.json +15 -13
- package/crates/team-agent-core/Cargo.toml +0 -12
- package/crates/team-agent-core/src/lib.rs +0 -332
- package/crates/team-agent-core/src/main.rs +0 -152
- package/pyproject.toml +0 -18
- package/scripts/install.py +0 -88
- package/scripts/run_regression_tests.py +0 -83
- package/src/team_agent/__init__.py +0 -3
- package/src/team_agent/__main__.py +0 -5
- package/src/team_agent/_legacy_pane_discovery.py +0 -186
- package/src/team_agent/abnormal_track.py +0 -253
- package/src/team_agent/approvals/__init__.py +0 -65
- package/src/team_agent/approvals/constants.py +0 -6
- package/src/team_agent/approvals/parsing.py +0 -176
- package/src/team_agent/approvals/runtime_prompts.py +0 -171
- package/src/team_agent/approvals/status.py +0 -176
- package/src/team_agent/cli/__init__.py +0 -137
- package/src/team_agent/cli/commands.py +0 -481
- package/src/team_agent/cli/e2e.py +0 -202
- package/src/team_agent/cli/helpers.py +0 -226
- package/src/team_agent/cli/parser.py +0 -540
- package/src/team_agent/compiler.py +0 -334
- package/src/team_agent/coordinator/__init__.py +0 -53
- package/src/team_agent/coordinator/__main__.py +0 -83
- package/src/team_agent/coordinator/lifecycle.py +0 -363
- package/src/team_agent/coordinator/metadata.py +0 -61
- package/src/team_agent/coordinator/paths.py +0 -17
- package/src/team_agent/diagnose/__init__.py +0 -48
- package/src/team_agent/diagnose/checks.py +0 -101
- package/src/team_agent/diagnose/comms.py +0 -213
- package/src/team_agent/diagnose/health.py +0 -241
- package/src/team_agent/diagnose/orphan_cleanup.py +0 -364
- package/src/team_agent/diagnose/preflight.py +0 -194
- package/src/team_agent/diagnose/quick_start.py +0 -324
- package/src/team_agent/display/__init__.py +0 -92
- package/src/team_agent/display/adaptive.py +0 -511
- package/src/team_agent/display/backend.py +0 -46
- package/src/team_agent/display/close.py +0 -154
- package/src/team_agent/display/ghostty.py +0 -77
- package/src/team_agent/display/rebuild.py +0 -102
- package/src/team_agent/display/tiling.py +0 -156
- package/src/team_agent/display/worker_window.py +0 -114
- package/src/team_agent/display/workspace.py +0 -382
- package/src/team_agent/errors.py +0 -10
- package/src/team_agent/events.py +0 -84
- package/src/team_agent/fake_worker.py +0 -80
- package/src/team_agent/idle_predicate.py +0 -200
- package/src/team_agent/idle_takeover.py +0 -59
- package/src/team_agent/idle_takeover_wiring.py +0 -111
- package/src/team_agent/launch/__init__.py +0 -41
- package/src/team_agent/launch/bootstrap.py +0 -85
- package/src/team_agent/launch/config.py +0 -106
- package/src/team_agent/launch/core.py +0 -301
- package/src/team_agent/launch/requirements.py +0 -57
- package/src/team_agent/leader/__init__.py +0 -926
- package/src/team_agent/leader_binding.py +0 -183
- package/src/team_agent/lifecycle/__init__.py +0 -5
- package/src/team_agent/lifecycle/agents.py +0 -278
- package/src/team_agent/lifecycle/operations.py +0 -411
- package/src/team_agent/lifecycle/paste_buffer_hygiene.py +0 -39
- package/src/team_agent/lifecycle/start.py +0 -363
- package/src/team_agent/mcp_server/__init__.py +0 -42
- package/src/team_agent/mcp_server/__main__.py +0 -7
- package/src/team_agent/mcp_server/contracts.py +0 -148
- package/src/team_agent/mcp_server/normalize.py +0 -257
- package/src/team_agent/mcp_server/server.py +0 -150
- package/src/team_agent/mcp_server/tools.py +0 -352
- package/src/team_agent/message_store/__init__.py +0 -23
- package/src/team_agent/message_store/agent_health.py +0 -113
- package/src/team_agent/message_store/core.py +0 -497
- package/src/team_agent/message_store/leader_notification_log.py +0 -198
- package/src/team_agent/message_store/result_watchers.py +0 -251
- package/src/team_agent/message_store/schema.py +0 -308
- package/src/team_agent/message_store/schema_migration.py +0 -448
- package/src/team_agent/messaging/__init__.py +0 -1
- package/src/team_agent/messaging/activity_detector.py +0 -254
- package/src/team_agent/messaging/delivery.py +0 -473
- package/src/team_agent/messaging/deps.py +0 -247
- package/src/team_agent/messaging/idle_alerts.py +0 -423
- package/src/team_agent/messaging/internal_delivery.py +0 -46
- package/src/team_agent/messaging/leader.py +0 -497
- package/src/team_agent/messaging/leader_api_errors.py +0 -216
- package/src/team_agent/messaging/leader_panes.py +0 -673
- package/src/team_agent/messaging/owner_bypass.py +0 -29
- package/src/team_agent/messaging/result_delivery.py +0 -539
- package/src/team_agent/messaging/results.py +0 -447
- package/src/team_agent/messaging/scheduler.py +0 -450
- package/src/team_agent/messaging/send.py +0 -532
- package/src/team_agent/messaging/session_drift.py +0 -94
- package/src/team_agent/messaging/tmux_io.py +0 -506
- package/src/team_agent/messaging/tmux_prompt.py +0 -338
- package/src/team_agent/messaging/trust_auto_answer.py +0 -52
- package/src/team_agent/orchestrator/__init__.py +0 -376
- package/src/team_agent/orchestrator/plan.py +0 -122
- package/src/team_agent/orchestrator/state.py +0 -128
- package/src/team_agent/paths.py +0 -45
- package/src/team_agent/permissions.py +0 -123
- package/src/team_agent/profiles/__init__.py +0 -82
- package/src/team_agent/profiles/constants.py +0 -19
- package/src/team_agent/profiles/core.py +0 -407
- package/src/team_agent/profiles/helpers.py +0 -69
- package/src/team_agent/profiles/provider_env.py +0 -188
- package/src/team_agent/profiles/smoke.py +0 -201
- package/src/team_agent/provider_cli/__init__.py +0 -43
- package/src/team_agent/provider_cli/adapter.py +0 -172
- package/src/team_agent/provider_cli/base.py +0 -48
- package/src/team_agent/provider_cli/claude.py +0 -457
- package/src/team_agent/provider_cli/codex.py +0 -336
- package/src/team_agent/provider_cli/copilot.py +0 -8
- package/src/team_agent/provider_cli/fake.py +0 -39
- package/src/team_agent/provider_cli/gemini.py +0 -95
- package/src/team_agent/provider_cli/opencode.py +0 -8
- package/src/team_agent/provider_cli/prompt.py +0 -62
- package/src/team_agent/provider_cli/registry.py +0 -18
- package/src/team_agent/provider_cli/unsupported.py +0 -32
- package/src/team_agent/provider_state/README.md +0 -78
- package/src/team_agent/provider_state/__init__.py +0 -86
- package/src/team_agent/provider_state/claude.py +0 -86
- package/src/team_agent/provider_state/codex.py +0 -84
- package/src/team_agent/provider_state/common.py +0 -207
- package/src/team_agent/provider_state/registry.py +0 -118
- package/src/team_agent/providers.py +0 -163
- package/src/team_agent/quality_gates.py +0 -104
- package/src/team_agent/restart/__init__.py +0 -34
- package/src/team_agent/restart/orchestration.py +0 -554
- package/src/team_agent/restart/selection.py +0 -89
- package/src/team_agent/restart/snapshot.py +0 -70
- package/src/team_agent/routing.py +0 -84
- package/src/team_agent/runtime.py +0 -1239
- package/src/team_agent/rust_core.py +0 -327
- package/src/team_agent/sessions/__init__.py +0 -25
- package/src/team_agent/sessions/capture.py +0 -143
- package/src/team_agent/sessions/inventory.py +0 -44
- package/src/team_agent/sessions/resume.py +0 -135
- package/src/team_agent/simple_yaml.py +0 -236
- package/src/team_agent/spec.py +0 -370
- package/src/team_agent/state.py +0 -602
- package/src/team_agent/status/__init__.py +0 -63
- package/src/team_agent/status/approvals.py +0 -52
- package/src/team_agent/status/compact.py +0 -158
- package/src/team_agent/status/constants.py +0 -18
- package/src/team_agent/status/inbox.py +0 -58
- package/src/team_agent/status/peek.py +0 -117
- package/src/team_agent/status/queries.py +0 -199
- package/src/team_agent/task_graph.py +0 -80
- package/src/team_agent/terminal.py +0 -57
- package/src/team_agent/wake.py +0 -58
- package/src/team_agent/watch/__init__.py +0 -145
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import sqlite3
|
|
4
|
-
from datetime import datetime, timezone
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
|
|
7
|
-
from team_agent.message_store import schema_migration as _schema_migration
|
|
8
|
-
from team_agent.message_store.schema_migration import ensure_schema_indexes, ensure_table_layout, table_layout
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
MESSAGE_COLUMNS = {
|
|
12
|
-
"owner_team_id",
|
|
13
|
-
"message_id",
|
|
14
|
-
"task_id",
|
|
15
|
-
"sender",
|
|
16
|
-
"recipient",
|
|
17
|
-
"reply_to",
|
|
18
|
-
"requires_ack",
|
|
19
|
-
"status",
|
|
20
|
-
"content",
|
|
21
|
-
"artifact_refs",
|
|
22
|
-
"created_at",
|
|
23
|
-
"updated_at",
|
|
24
|
-
"delivered_at",
|
|
25
|
-
"acknowledged_at",
|
|
26
|
-
"error",
|
|
27
|
-
"delivery_attempts",
|
|
28
|
-
}
|
|
29
|
-
RESULT_COLUMNS = {"owner_team_id", "result_id", "task_id", "agent_id", "envelope", "status", "created_at"}
|
|
30
|
-
SCHEDULED_EVENT_COLUMNS = {
|
|
31
|
-
"id",
|
|
32
|
-
"owner_team_id",
|
|
33
|
-
"due_at",
|
|
34
|
-
"target",
|
|
35
|
-
"kind",
|
|
36
|
-
"payload_json",
|
|
37
|
-
"status",
|
|
38
|
-
"created_at",
|
|
39
|
-
"fired_at",
|
|
40
|
-
"result_json",
|
|
41
|
-
}
|
|
42
|
-
DELIVERY_TOKEN_COLUMNS = {
|
|
43
|
-
"message_id",
|
|
44
|
-
"unique_token",
|
|
45
|
-
"injected_at",
|
|
46
|
-
"visible_at",
|
|
47
|
-
"consumed_at",
|
|
48
|
-
"failed_at",
|
|
49
|
-
"failure_reason",
|
|
50
|
-
}
|
|
51
|
-
AGENT_HEALTH_COLUMNS = {
|
|
52
|
-
"owner_team_id",
|
|
53
|
-
"agent_id",
|
|
54
|
-
"status",
|
|
55
|
-
"last_output_at",
|
|
56
|
-
"context_usage_pct",
|
|
57
|
-
"current_task_id",
|
|
58
|
-
"updated_at",
|
|
59
|
-
}
|
|
60
|
-
PEER_ALLOWLIST_COLUMNS = {"a", "b", "created_at"}
|
|
61
|
-
RESULT_WATCHER_COLUMNS = {
|
|
62
|
-
"owner_team_id",
|
|
63
|
-
"watcher_id",
|
|
64
|
-
"task_id",
|
|
65
|
-
"agent_id",
|
|
66
|
-
"message_id",
|
|
67
|
-
"leader_id",
|
|
68
|
-
"status",
|
|
69
|
-
"created_at",
|
|
70
|
-
"completed_at",
|
|
71
|
-
"result_id",
|
|
72
|
-
"notified_message_id",
|
|
73
|
-
"error",
|
|
74
|
-
}
|
|
75
|
-
LEADER_NOTIFICATION_LOG_COLUMNS = {
|
|
76
|
-
"result_id",
|
|
77
|
-
"owner_team_id",
|
|
78
|
-
"owner_epoch",
|
|
79
|
-
"leader_session_uuid",
|
|
80
|
-
"notified_message_id",
|
|
81
|
-
"notified_at",
|
|
82
|
-
"leader_pane_id_at_notify",
|
|
83
|
-
"envelope_content_hash",
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def utcnow() -> str:
|
|
88
|
-
return datetime.now(timezone.utc).isoformat()
|
|
89
|
-
|
|
90
|
-
SCHEMA_VERSION = 3
|
|
91
|
-
SCHEMA_MIGRATIONS = _schema_migration.SCHEMA_MIGRATIONS
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def _table_columns(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
95
|
-
return set(table_layout(conn, table))
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
def _ensure_table_columns(
|
|
99
|
-
conn: sqlite3.Connection,
|
|
100
|
-
table: str,
|
|
101
|
-
required: set[str],
|
|
102
|
-
migrations: dict[str, str] | None = None,
|
|
103
|
-
) -> None:
|
|
104
|
-
columns = _table_columns(conn, table)
|
|
105
|
-
missing = required - columns
|
|
106
|
-
migrations = migrations or {}
|
|
107
|
-
unsupported = missing - set(migrations)
|
|
108
|
-
if unsupported:
|
|
109
|
-
names = ", ".join(sorted(unsupported))
|
|
110
|
-
raise RuntimeError(f"team.db table {table} is missing required column(s): {names}")
|
|
111
|
-
for name in sorted(missing):
|
|
112
|
-
conn.execute(migrations[name])
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
def initialize_schema(conn: sqlite3.Connection, db_path: Path | None = None) -> None:
|
|
116
|
-
_schema_migration.SCHEMA_MIGRATIONS = SCHEMA_MIGRATIONS
|
|
117
|
-
ensure_table_layout(conn, schema_version=SCHEMA_VERSION, db_path=db_path)
|
|
118
|
-
with conn:
|
|
119
|
-
conn.execute(
|
|
120
|
-
"""
|
|
121
|
-
create table if not exists messages (
|
|
122
|
-
message_id text primary key,
|
|
123
|
-
owner_team_id text,
|
|
124
|
-
task_id text,
|
|
125
|
-
sender text,
|
|
126
|
-
recipient text,
|
|
127
|
-
reply_to text,
|
|
128
|
-
requires_ack integer,
|
|
129
|
-
status text,
|
|
130
|
-
content text,
|
|
131
|
-
artifact_refs text,
|
|
132
|
-
created_at text,
|
|
133
|
-
updated_at text,
|
|
134
|
-
delivered_at text,
|
|
135
|
-
acknowledged_at text,
|
|
136
|
-
error text,
|
|
137
|
-
delivery_attempts integer not null default 0
|
|
138
|
-
)
|
|
139
|
-
"""
|
|
140
|
-
)
|
|
141
|
-
conn.execute(
|
|
142
|
-
"""
|
|
143
|
-
create table if not exists results (
|
|
144
|
-
result_id text primary key,
|
|
145
|
-
owner_team_id text,
|
|
146
|
-
task_id text not null,
|
|
147
|
-
agent_id text not null,
|
|
148
|
-
envelope text not null,
|
|
149
|
-
status text not null,
|
|
150
|
-
created_at text not null
|
|
151
|
-
)
|
|
152
|
-
"""
|
|
153
|
-
)
|
|
154
|
-
conn.execute(
|
|
155
|
-
"""
|
|
156
|
-
create table if not exists scheduled_events (
|
|
157
|
-
id integer primary key,
|
|
158
|
-
owner_team_id text,
|
|
159
|
-
due_at text not null,
|
|
160
|
-
target text not null,
|
|
161
|
-
kind text not null,
|
|
162
|
-
payload_json text not null,
|
|
163
|
-
status text not null,
|
|
164
|
-
created_at text not null,
|
|
165
|
-
fired_at text,
|
|
166
|
-
result_json text
|
|
167
|
-
)
|
|
168
|
-
"""
|
|
169
|
-
)
|
|
170
|
-
conn.execute(
|
|
171
|
-
"""
|
|
172
|
-
create table if not exists delivery_tokens (
|
|
173
|
-
message_id text primary key,
|
|
174
|
-
unique_token text not null,
|
|
175
|
-
injected_at text not null,
|
|
176
|
-
visible_at text,
|
|
177
|
-
consumed_at text,
|
|
178
|
-
failed_at text,
|
|
179
|
-
failure_reason text
|
|
180
|
-
)
|
|
181
|
-
"""
|
|
182
|
-
)
|
|
183
|
-
conn.execute(
|
|
184
|
-
"""
|
|
185
|
-
create table if not exists agent_health (
|
|
186
|
-
owner_team_id text,
|
|
187
|
-
agent_id text not null,
|
|
188
|
-
status text not null,
|
|
189
|
-
last_output_at text,
|
|
190
|
-
context_usage_pct integer,
|
|
191
|
-
current_task_id text,
|
|
192
|
-
updated_at text not null,
|
|
193
|
-
unique(owner_team_id, agent_id)
|
|
194
|
-
)
|
|
195
|
-
"""
|
|
196
|
-
)
|
|
197
|
-
conn.execute(
|
|
198
|
-
"""
|
|
199
|
-
create table if not exists peer_allowlist (
|
|
200
|
-
a text not null,
|
|
201
|
-
b text not null,
|
|
202
|
-
created_at text not null,
|
|
203
|
-
primary key (a, b)
|
|
204
|
-
)
|
|
205
|
-
"""
|
|
206
|
-
)
|
|
207
|
-
conn.execute(
|
|
208
|
-
"""
|
|
209
|
-
create table if not exists result_watchers (
|
|
210
|
-
watcher_id text primary key,
|
|
211
|
-
owner_team_id text,
|
|
212
|
-
task_id text,
|
|
213
|
-
agent_id text,
|
|
214
|
-
message_id text,
|
|
215
|
-
leader_id text not null,
|
|
216
|
-
status text not null,
|
|
217
|
-
created_at text not null,
|
|
218
|
-
completed_at text,
|
|
219
|
-
result_id text,
|
|
220
|
-
notified_message_id text,
|
|
221
|
-
error text
|
|
222
|
-
)
|
|
223
|
-
"""
|
|
224
|
-
)
|
|
225
|
-
_ensure_table_columns(
|
|
226
|
-
conn,
|
|
227
|
-
"messages",
|
|
228
|
-
MESSAGE_COLUMNS,
|
|
229
|
-
{
|
|
230
|
-
"delivery_attempts": (
|
|
231
|
-
"alter table messages add column delivery_attempts integer not null default 0"
|
|
232
|
-
),
|
|
233
|
-
"owner_team_id": "alter table messages add column owner_team_id text",
|
|
234
|
-
},
|
|
235
|
-
)
|
|
236
|
-
_ensure_table_columns(
|
|
237
|
-
conn,
|
|
238
|
-
"results",
|
|
239
|
-
RESULT_COLUMNS,
|
|
240
|
-
{"owner_team_id": "alter table results add column owner_team_id text"},
|
|
241
|
-
)
|
|
242
|
-
_ensure_table_columns(
|
|
243
|
-
conn,
|
|
244
|
-
"scheduled_events",
|
|
245
|
-
SCHEDULED_EVENT_COLUMNS,
|
|
246
|
-
{"owner_team_id": "alter table scheduled_events add column owner_team_id text"},
|
|
247
|
-
)
|
|
248
|
-
_ensure_table_columns(conn, "delivery_tokens", DELIVERY_TOKEN_COLUMNS)
|
|
249
|
-
_migrate_agent_health_owner_team_id(conn)
|
|
250
|
-
_ensure_table_columns(conn, "peer_allowlist", PEER_ALLOWLIST_COLUMNS)
|
|
251
|
-
_ensure_table_columns(
|
|
252
|
-
conn,
|
|
253
|
-
"result_watchers",
|
|
254
|
-
RESULT_WATCHER_COLUMNS,
|
|
255
|
-
{"owner_team_id": "alter table result_watchers add column owner_team_id text"},
|
|
256
|
-
)
|
|
257
|
-
# Dedupe leader notifications at the injection boundary by
|
|
258
|
-
# (result_id, owner_team_id, owner_epoch). leader_session_uuid remains
|
|
259
|
-
# nullable compatibility/audit metadata.
|
|
260
|
-
# UNIQUE primary key + INSERT OR IGNORE in claim_leader_notification_delivery gives
|
|
261
|
-
# atomic exactly-once without an advisory lock. Retires the bad6484 watcher-table
|
|
262
|
-
# UPSERT approach.
|
|
263
|
-
conn.execute(
|
|
264
|
-
"""
|
|
265
|
-
create table if not exists leader_notification_log (
|
|
266
|
-
result_id text not null,
|
|
267
|
-
owner_team_id text not null default '',
|
|
268
|
-
owner_epoch integer not null default 0,
|
|
269
|
-
leader_session_uuid text,
|
|
270
|
-
notified_message_id text not null,
|
|
271
|
-
notified_at text not null,
|
|
272
|
-
leader_pane_id_at_notify text,
|
|
273
|
-
envelope_content_hash text,
|
|
274
|
-
primary key (result_id, owner_team_id, owner_epoch)
|
|
275
|
-
)
|
|
276
|
-
"""
|
|
277
|
-
)
|
|
278
|
-
_ensure_table_columns(conn, "leader_notification_log", LEADER_NOTIFICATION_LOG_COLUMNS)
|
|
279
|
-
ensure_schema_indexes(conn)
|
|
280
|
-
conn.execute(f"pragma user_version = {SCHEMA_VERSION}")
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
def _migrate_agent_health_owner_team_id(conn: sqlite3.Connection) -> None:
|
|
284
|
-
columns = _table_columns(conn, "agent_health")
|
|
285
|
-
if "owner_team_id" not in columns:
|
|
286
|
-
conn.execute(
|
|
287
|
-
"""
|
|
288
|
-
create table agent_health_new (
|
|
289
|
-
owner_team_id text,
|
|
290
|
-
agent_id text not null,
|
|
291
|
-
status text not null,
|
|
292
|
-
last_output_at text,
|
|
293
|
-
context_usage_pct integer,
|
|
294
|
-
current_task_id text,
|
|
295
|
-
updated_at text not null,
|
|
296
|
-
unique(owner_team_id, agent_id)
|
|
297
|
-
)
|
|
298
|
-
"""
|
|
299
|
-
)
|
|
300
|
-
conn.execute(
|
|
301
|
-
"""
|
|
302
|
-
insert into agent_health_new(owner_team_id, agent_id, status, last_output_at, context_usage_pct, current_task_id, updated_at)
|
|
303
|
-
select null, agent_id, status, last_output_at, context_usage_pct, current_task_id, updated_at from agent_health
|
|
304
|
-
"""
|
|
305
|
-
)
|
|
306
|
-
conn.execute("drop table agent_health")
|
|
307
|
-
conn.execute("alter table agent_health_new rename to agent_health")
|
|
308
|
-
_ensure_table_columns(conn, "agent_health", AGENT_HEALTH_COLUMNS)
|