tabc 0.2.3__tar.gz → 0.2.4__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.
- {tabc-0.2.3 → tabc-0.2.4}/CHANGELOG.md +21 -0
- {tabc-0.2.3/tabc.egg-info → tabc-0.2.4}/PKG-INFO +12 -78
- {tabc-0.2.3 → tabc-0.2.4}/PYPI.md +10 -77
- {tabc-0.2.3 → tabc-0.2.4}/pyproject.toml +2 -1
- {tabc-0.2.3 → tabc-0.2.4/tabc.egg-info}/PKG-INFO +12 -78
- {tabc-0.2.3 → tabc-0.2.4}/tabus/bus.py +1 -1
- {tabc-0.2.3 → tabc-0.2.4}/tabus/cli.py +22 -1
- {tabc-0.2.3 → tabc-0.2.4}/GUIDE.md +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/LICENSE +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/MANIFEST.in +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/MCP.md +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/setup.cfg +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabc.egg-info/SOURCES.txt +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabc.egg-info/dependency_links.txt +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabc.egg-info/entry_points.txt +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabc.egg-info/requires.txt +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabc.egg-info/top_level.txt +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/__init__.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/admin.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/codex_queue.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/compat_bcn.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/compat_busd.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/daemon.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/doorbell.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/doorbell_poll.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/lang.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/locales/en.json +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/mcp_server.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/nodekey.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/paths.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/process_argv.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/route_capture.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/send_refusal.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/sent.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_identity.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_lookup.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_migration.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_refusal.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_search.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/tac_store.py +0 -0
- {tabc-0.2.3 → tabc-0.2.4}/tabus/terminal_frontend.py +0 -0
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.4 — 2026-10-25
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `tabc send --id <UUID>` sends with a caller-chosen message id, so a retry
|
|
8
|
+
after a lost response is not stored twice. A resend goes through the
|
|
9
|
+
usual send checks first, so unread mail can refuse it with
|
|
10
|
+
`UNREAD_BLOCKED`. After those checks, the same id with the same
|
|
11
|
+
envelope prints `stored id=<id>` and, below it,
|
|
12
|
+
`identical envelope resent — not stored twice`, and exits 0. With a
|
|
13
|
+
changed envelope it fails with `failed: conflict: …` and exits 1. The id
|
|
14
|
+
is checked before any request and written in canonical form. A value
|
|
15
|
+
that is not a UUID fails with
|
|
16
|
+
`failed: --id must be a full message UUID` and exits 1.
|
|
17
|
+
|
|
18
|
+
### Unchanged
|
|
19
|
+
|
|
20
|
+
- Without `--id`, `send` uses a new random id as before. The daemon is
|
|
21
|
+
unchanged. The MCP `tabc_send` tool already took a caller-chosen id as
|
|
22
|
+
`message_id`; the CLI now offers the same.
|
|
23
|
+
|
|
3
24
|
## 0.2.3 — 2026-10-17
|
|
4
25
|
|
|
5
26
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tabc
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: A shared inbox for AI agents and programs on one machine
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -27,6 +27,7 @@ License: MIT License
|
|
|
27
27
|
Project-URL: Homepage, https://tabc.sh
|
|
28
28
|
Project-URL: Source, https://github.com/jultabc/tabc
|
|
29
29
|
Project-URL: Documentation, https://github.com/jultabc/tabc/blob/main/GUIDE.md
|
|
30
|
+
Project-URL: Changelog, https://github.com/jultabc/tabc/blob/main/CHANGELOG.md
|
|
30
31
|
Project-URL: Issues, https://github.com/jultabc/tabc/issues
|
|
31
32
|
Keywords: agents,messaging,ipc,cli
|
|
32
33
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -51,6 +52,16 @@ This is an experimental package. It is not a security boundary between agents
|
|
|
51
52
|
using the same operating-system account. Message delivery does not imply that
|
|
52
53
|
an agent read, understood, or completed a request.
|
|
53
54
|
|
|
55
|
+
## Updates
|
|
56
|
+
|
|
57
|
+
See the [changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md)
|
|
58
|
+
for changes and compatibility notes, or
|
|
59
|
+
[GitHub releases](https://github.com/jultabc/tabc/releases) for published versions.
|
|
60
|
+
|
|
61
|
+
Before updating an existing installation, follow the
|
|
62
|
+
[installation and upgrade instructions](https://github.com/jultabc/tabc#readme).
|
|
63
|
+
Keep a backup and follow the stop, install, and restart sequence for your version.
|
|
64
|
+
|
|
54
65
|
## Install
|
|
55
66
|
|
|
56
67
|
```bash
|
|
@@ -105,83 +116,6 @@ from the `pull --mode full` detail block, or a unique prefix of it.
|
|
|
105
116
|
Terminal notification is a separate process and does not start with the
|
|
106
117
|
install; see the repository's guide before turning it on.
|
|
107
118
|
|
|
108
|
-
## Updating from 0.2.2
|
|
109
|
-
|
|
110
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
111
|
-
TACs, routes, and Codex queue receipts are kept, and nodes do not register
|
|
112
|
-
again. Stop `tabus.doorbell`, install, restart `tabd`, then start one
|
|
113
|
-
`tabus.doorbell` from the same installation:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
python -m pip install --upgrade "tabc==0.2.3"
|
|
117
|
-
# Or, when the local desktop MCP adapter is required:
|
|
118
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.3"
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The CLI now accepts the exact name of an open tac and lists candidates instead
|
|
122
|
-
of guessing. Name lookup needs the restarted `tabd`; before that, a typed name
|
|
123
|
-
is refused with `TAC_ID_INVALID` and UUIDs still work. The MCP adapter is
|
|
124
|
-
unchanged. See the
|
|
125
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
126
|
-
|
|
127
|
-
## Updating from 0.2.1
|
|
128
|
-
|
|
129
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
130
|
-
TACs, routes, and Codex queue receipts are kept. Stop `tabus.doorbell`, install,
|
|
131
|
-
restart `tabd`, then start one `tabus.doorbell` from the same installation:
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
python -m pip install --upgrade "tabc==0.2.2"
|
|
135
|
-
# Or, when the local desktop MCP adapter is required:
|
|
136
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.2"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
`--kind` is now case-insensitive; `--kind Codex` selects the same Codex queue
|
|
140
|
-
route as `--kind codex`. A detached command no longer needs a recognized agent
|
|
141
|
-
product: its immediate session-boundary parent qualifies when it owns the
|
|
142
|
-
terminal foreground and reads standard input from it. The check proves terminal
|
|
143
|
-
ownership, not that the program is an agent. Register again from the intended
|
|
144
|
-
terminal and confirm one notification arrives. Codex queue rules are otherwise
|
|
145
|
-
unchanged. See the
|
|
146
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
147
|
-
|
|
148
|
-
## Updating from 0.2.0
|
|
149
|
-
|
|
150
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
151
|
-
TACs, and routes are kept. Stop `tabus.doorbell`, install, restart `tabd`, then
|
|
152
|
-
start one `tabus.doorbell` from the same installation:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
python -m pip install --upgrade "tabc==0.2.1"
|
|
156
|
-
# Or, when the local desktop MCP adapter is required:
|
|
157
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.1"
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
`register` now requires `--kind`. Update scripts that omit it. Codex agents
|
|
161
|
-
register again from each conversation after the notifier is replaced. The
|
|
162
|
-
notifier creates `codex_queue_receipts.db` in the tabc home directory on its
|
|
163
|
-
first Codex queue submission. See the
|
|
164
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
165
|
-
|
|
166
|
-
## Updating from 0.1.6
|
|
167
|
-
|
|
168
|
-
The upgrade preserves nodes, messages, delivery states, TAC membership, names,
|
|
169
|
-
and labels. Stop `tabus.doorbell` and `tabd`. Confirm that the ledger's `-wal`
|
|
170
|
-
file is absent or empty (0 bytes), then keep a backup before installing. A
|
|
171
|
-
remaining empty WAL or SHM file is safe. Do not continue while the WAL is
|
|
172
|
-
non-empty:
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
python -m pip install --upgrade "tabc==0.2.0"
|
|
176
|
-
# Or, when the local desktop MCP adapter is required:
|
|
177
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.0"
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Existing string TAC IDs are not converted during installation. Follow the
|
|
181
|
-
repository README's 0.2.0 ledger conversion procedure when converting TAC IDs
|
|
182
|
-
to UUIDs. Without conversion, restart `tabd` first, then `tabus.doorbell`.
|
|
183
|
-
Then follow "Updating from 0.2.0", "Updating from 0.2.1" and "Updating from 0.2.2".
|
|
184
|
-
|
|
185
119
|
## Commands
|
|
186
120
|
|
|
187
121
|
- `tabc register --node alice --kind codex`: register an agent.
|
|
@@ -9,6 +9,16 @@ This is an experimental package. It is not a security boundary between agents
|
|
|
9
9
|
using the same operating-system account. Message delivery does not imply that
|
|
10
10
|
an agent read, understood, or completed a request.
|
|
11
11
|
|
|
12
|
+
## Updates
|
|
13
|
+
|
|
14
|
+
See the [changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md)
|
|
15
|
+
for changes and compatibility notes, or
|
|
16
|
+
[GitHub releases](https://github.com/jultabc/tabc/releases) for published versions.
|
|
17
|
+
|
|
18
|
+
Before updating an existing installation, follow the
|
|
19
|
+
[installation and upgrade instructions](https://github.com/jultabc/tabc#readme).
|
|
20
|
+
Keep a backup and follow the stop, install, and restart sequence for your version.
|
|
21
|
+
|
|
12
22
|
## Install
|
|
13
23
|
|
|
14
24
|
```bash
|
|
@@ -63,83 +73,6 @@ from the `pull --mode full` detail block, or a unique prefix of it.
|
|
|
63
73
|
Terminal notification is a separate process and does not start with the
|
|
64
74
|
install; see the repository's guide before turning it on.
|
|
65
75
|
|
|
66
|
-
## Updating from 0.2.2
|
|
67
|
-
|
|
68
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
69
|
-
TACs, routes, and Codex queue receipts are kept, and nodes do not register
|
|
70
|
-
again. Stop `tabus.doorbell`, install, restart `tabd`, then start one
|
|
71
|
-
`tabus.doorbell` from the same installation:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
python -m pip install --upgrade "tabc==0.2.3"
|
|
75
|
-
# Or, when the local desktop MCP adapter is required:
|
|
76
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.3"
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
The CLI now accepts the exact name of an open tac and lists candidates instead
|
|
80
|
-
of guessing. Name lookup needs the restarted `tabd`; before that, a typed name
|
|
81
|
-
is refused with `TAC_ID_INVALID` and UUIDs still work. The MCP adapter is
|
|
82
|
-
unchanged. See the
|
|
83
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
84
|
-
|
|
85
|
-
## Updating from 0.2.1
|
|
86
|
-
|
|
87
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
88
|
-
TACs, routes, and Codex queue receipts are kept. Stop `tabus.doorbell`, install,
|
|
89
|
-
restart `tabd`, then start one `tabus.doorbell` from the same installation:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
python -m pip install --upgrade "tabc==0.2.2"
|
|
93
|
-
# Or, when the local desktop MCP adapter is required:
|
|
94
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.2"
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
`--kind` is now case-insensitive; `--kind Codex` selects the same Codex queue
|
|
98
|
-
route as `--kind codex`. A detached command no longer needs a recognized agent
|
|
99
|
-
product: its immediate session-boundary parent qualifies when it owns the
|
|
100
|
-
terminal foreground and reads standard input from it. The check proves terminal
|
|
101
|
-
ownership, not that the program is an agent. Register again from the intended
|
|
102
|
-
terminal and confirm one notification arrives. Codex queue rules are otherwise
|
|
103
|
-
unchanged. See the
|
|
104
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
105
|
-
|
|
106
|
-
## Updating from 0.2.0
|
|
107
|
-
|
|
108
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
109
|
-
TACs, and routes are kept. Stop `tabus.doorbell`, install, restart `tabd`, then
|
|
110
|
-
start one `tabus.doorbell` from the same installation:
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
python -m pip install --upgrade "tabc==0.2.1"
|
|
114
|
-
# Or, when the local desktop MCP adapter is required:
|
|
115
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.1"
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
`register` now requires `--kind`. Update scripts that omit it. Codex agents
|
|
119
|
-
register again from each conversation after the notifier is replaced. The
|
|
120
|
-
notifier creates `codex_queue_receipts.db` in the tabc home directory on its
|
|
121
|
-
first Codex queue submission. See the
|
|
122
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
123
|
-
|
|
124
|
-
## Updating from 0.1.6
|
|
125
|
-
|
|
126
|
-
The upgrade preserves nodes, messages, delivery states, TAC membership, names,
|
|
127
|
-
and labels. Stop `tabus.doorbell` and `tabd`. Confirm that the ledger's `-wal`
|
|
128
|
-
file is absent or empty (0 bytes), then keep a backup before installing. A
|
|
129
|
-
remaining empty WAL or SHM file is safe. Do not continue while the WAL is
|
|
130
|
-
non-empty:
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
python -m pip install --upgrade "tabc==0.2.0"
|
|
134
|
-
# Or, when the local desktop MCP adapter is required:
|
|
135
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.0"
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Existing string TAC IDs are not converted during installation. Follow the
|
|
139
|
-
repository README's 0.2.0 ledger conversion procedure when converting TAC IDs
|
|
140
|
-
to UUIDs. Without conversion, restart `tabd` first, then `tabus.doorbell`.
|
|
141
|
-
Then follow "Updating from 0.2.0", "Updating from 0.2.1" and "Updating from 0.2.2".
|
|
142
|
-
|
|
143
76
|
## Commands
|
|
144
77
|
|
|
145
78
|
- `tabc register --node alice --kind codex`: register an agent.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tabc"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.4"
|
|
8
8
|
description = "A shared inbox for AI agents and programs on one machine"
|
|
9
9
|
readme = "PYPI.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -40,6 +40,7 @@ mcp = ["mcp>=1.27.1,<2; python_version >= '3.10'"]
|
|
|
40
40
|
Homepage = "https://tabc.sh"
|
|
41
41
|
Source = "https://github.com/jultabc/tabc"
|
|
42
42
|
Documentation = "https://github.com/jultabc/tabc/blob/main/GUIDE.md"
|
|
43
|
+
Changelog = "https://github.com/jultabc/tabc/blob/main/CHANGELOG.md"
|
|
43
44
|
Issues = "https://github.com/jultabc/tabc/issues"
|
|
44
45
|
|
|
45
46
|
[project.scripts]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tabc
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: A shared inbox for AI agents and programs on one machine
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -27,6 +27,7 @@ License: MIT License
|
|
|
27
27
|
Project-URL: Homepage, https://tabc.sh
|
|
28
28
|
Project-URL: Source, https://github.com/jultabc/tabc
|
|
29
29
|
Project-URL: Documentation, https://github.com/jultabc/tabc/blob/main/GUIDE.md
|
|
30
|
+
Project-URL: Changelog, https://github.com/jultabc/tabc/blob/main/CHANGELOG.md
|
|
30
31
|
Project-URL: Issues, https://github.com/jultabc/tabc/issues
|
|
31
32
|
Keywords: agents,messaging,ipc,cli
|
|
32
33
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -51,6 +52,16 @@ This is an experimental package. It is not a security boundary between agents
|
|
|
51
52
|
using the same operating-system account. Message delivery does not imply that
|
|
52
53
|
an agent read, understood, or completed a request.
|
|
53
54
|
|
|
55
|
+
## Updates
|
|
56
|
+
|
|
57
|
+
See the [changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md)
|
|
58
|
+
for changes and compatibility notes, or
|
|
59
|
+
[GitHub releases](https://github.com/jultabc/tabc/releases) for published versions.
|
|
60
|
+
|
|
61
|
+
Before updating an existing installation, follow the
|
|
62
|
+
[installation and upgrade instructions](https://github.com/jultabc/tabc#readme).
|
|
63
|
+
Keep a backup and follow the stop, install, and restart sequence for your version.
|
|
64
|
+
|
|
54
65
|
## Install
|
|
55
66
|
|
|
56
67
|
```bash
|
|
@@ -105,83 +116,6 @@ from the `pull --mode full` detail block, or a unique prefix of it.
|
|
|
105
116
|
Terminal notification is a separate process and does not start with the
|
|
106
117
|
install; see the repository's guide before turning it on.
|
|
107
118
|
|
|
108
|
-
## Updating from 0.2.2
|
|
109
|
-
|
|
110
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
111
|
-
TACs, routes, and Codex queue receipts are kept, and nodes do not register
|
|
112
|
-
again. Stop `tabus.doorbell`, install, restart `tabd`, then start one
|
|
113
|
-
`tabus.doorbell` from the same installation:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
python -m pip install --upgrade "tabc==0.2.3"
|
|
117
|
-
# Or, when the local desktop MCP adapter is required:
|
|
118
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.3"
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The CLI now accepts the exact name of an open tac and lists candidates instead
|
|
122
|
-
of guessing. Name lookup needs the restarted `tabd`; before that, a typed name
|
|
123
|
-
is refused with `TAC_ID_INVALID` and UUIDs still work. The MCP adapter is
|
|
124
|
-
unchanged. See the
|
|
125
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
126
|
-
|
|
127
|
-
## Updating from 0.2.1
|
|
128
|
-
|
|
129
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
130
|
-
TACs, routes, and Codex queue receipts are kept. Stop `tabus.doorbell`, install,
|
|
131
|
-
restart `tabd`, then start one `tabus.doorbell` from the same installation:
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
python -m pip install --upgrade "tabc==0.2.2"
|
|
135
|
-
# Or, when the local desktop MCP adapter is required:
|
|
136
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.2"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
`--kind` is now case-insensitive; `--kind Codex` selects the same Codex queue
|
|
140
|
-
route as `--kind codex`. A detached command no longer needs a recognized agent
|
|
141
|
-
product: its immediate session-boundary parent qualifies when it owns the
|
|
142
|
-
terminal foreground and reads standard input from it. The check proves terminal
|
|
143
|
-
ownership, not that the program is an agent. Register again from the intended
|
|
144
|
-
terminal and confirm one notification arrives. Codex queue rules are otherwise
|
|
145
|
-
unchanged. See the
|
|
146
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
147
|
-
|
|
148
|
-
## Updating from 0.2.0
|
|
149
|
-
|
|
150
|
-
The ledger schema is unchanged. Nodes, signing keys, messages, delivery states,
|
|
151
|
-
TACs, and routes are kept. Stop `tabus.doorbell`, install, restart `tabd`, then
|
|
152
|
-
start one `tabus.doorbell` from the same installation:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
python -m pip install --upgrade "tabc==0.2.1"
|
|
156
|
-
# Or, when the local desktop MCP adapter is required:
|
|
157
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.1"
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
`register` now requires `--kind`. Update scripts that omit it. Codex agents
|
|
161
|
-
register again from each conversation after the notifier is replaced. The
|
|
162
|
-
notifier creates `codex_queue_receipts.db` in the tabc home directory on its
|
|
163
|
-
first Codex queue submission. See the
|
|
164
|
-
[changelog](https://github.com/jultabc/tabc/blob/main/CHANGELOG.md).
|
|
165
|
-
|
|
166
|
-
## Updating from 0.1.6
|
|
167
|
-
|
|
168
|
-
The upgrade preserves nodes, messages, delivery states, TAC membership, names,
|
|
169
|
-
and labels. Stop `tabus.doorbell` and `tabd`. Confirm that the ledger's `-wal`
|
|
170
|
-
file is absent or empty (0 bytes), then keep a backup before installing. A
|
|
171
|
-
remaining empty WAL or SHM file is safe. Do not continue while the WAL is
|
|
172
|
-
non-empty:
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
python -m pip install --upgrade "tabc==0.2.0"
|
|
176
|
-
# Or, when the local desktop MCP adapter is required:
|
|
177
|
-
python -m pip install --upgrade "tabc[mcp]==0.2.0"
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Existing string TAC IDs are not converted during installation. Follow the
|
|
181
|
-
repository README's 0.2.0 ledger conversion procedure when converting TAC IDs
|
|
182
|
-
to UUIDs. Without conversion, restart `tabd` first, then `tabus.doorbell`.
|
|
183
|
-
Then follow "Updating from 0.2.0", "Updating from 0.2.1" and "Updating from 0.2.2".
|
|
184
|
-
|
|
185
119
|
## Commands
|
|
186
120
|
|
|
187
121
|
- `tabc register --node alice --kind codex`: register an agent.
|
|
@@ -74,7 +74,7 @@ DB_PATH = os.environ.get(
|
|
|
74
74
|
# drifted once already — 0.1.0.post1 shipped while this said 0.1.0. Bump
|
|
75
75
|
# both together; tests/test_version_agreement.py fails the build otherwise.
|
|
76
76
|
# Do not copy the number into documentation.
|
|
77
|
-
__version__ = "0.2.
|
|
77
|
+
__version__ = "0.2.4"
|
|
78
78
|
PROTOCOL_VERSION = "tabus.v1"
|
|
79
79
|
|
|
80
80
|
# TTLs. Past these, a derived status counts as old.
|
|
@@ -437,6 +437,21 @@ def _refusal_line(r):
|
|
|
437
437
|
|
|
438
438
|
|
|
439
439
|
def fn_send(a):
|
|
440
|
+
# 🔴 --id lets a caller retry without storing twice. The daemon treats the same id
|
|
441
|
+
# with the same envelope as a resend and the same id with a changed envelope as
|
|
442
|
+
# a conflict, so the caller keeps the id and the whole envelope from before the
|
|
443
|
+
# first attempt. The daemon does not compare the sending mode itself (tac or
|
|
444
|
+
# broadcast), only the resolved recipients, so the caller keeps that fixed too.
|
|
445
|
+
# Full UUIDs only, written in canonical form, so that one id typed two ways
|
|
446
|
+
# cannot become two messages. Checked first, before the tac lookup or any
|
|
447
|
+
# other request.
|
|
448
|
+
mid = str(uuid.uuid4())
|
|
449
|
+
if getattr(a, "id", None) is not None:
|
|
450
|
+
try:
|
|
451
|
+
mid = str(uuid.UUID(a.id))
|
|
452
|
+
except ValueError:
|
|
453
|
+
print("failed: --id must be a full message UUID")
|
|
454
|
+
sys.exit(1)
|
|
440
455
|
body = a.body
|
|
441
456
|
if a.body_file:
|
|
442
457
|
body = open(a.body_file, encoding="utf-8").read()
|
|
@@ -454,7 +469,6 @@ def fn_send(a):
|
|
|
454
469
|
# send is authenticated by the request signature (call() signs every request),
|
|
455
470
|
# and the daemon requires `from` to equal the acting node, so no message-level
|
|
456
471
|
# signature is sent — a forged sender cannot get past the request auth.
|
|
457
|
-
mid = str(uuid.uuid4())
|
|
458
472
|
payload = {
|
|
459
473
|
"from": a.sender,
|
|
460
474
|
"to": requested,
|
|
@@ -1216,6 +1230,13 @@ COMMANDS = {
|
|
|
1216
1230
|
(("--body",), dict()),
|
|
1217
1231
|
(("--body-file",), dict()),
|
|
1218
1232
|
(("--priority",), dict(default="next", choices=["now", "next", "batch"])),
|
|
1233
|
+
(
|
|
1234
|
+
("--id",),
|
|
1235
|
+
dict(
|
|
1236
|
+
default=None,
|
|
1237
|
+
help="message UUID for a retry-safe send. The same id with the same envelope is not stored twice; with a changed envelope it is refused as a conflict",
|
|
1238
|
+
),
|
|
1239
|
+
),
|
|
1219
1240
|
],
|
|
1220
1241
|
),
|
|
1221
1242
|
"who": (fn_who, "who is present, and how much is pending", [(("--node",), dict(default=None, help="acting node; falls back to TABC_NODE"))]),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tabc-0.2.3 → tabc-0.2.4}/MCP.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|