agentconnect-cli 0.1.0a1__py3-none-any.whl
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.
- agentconnect/__init__.py +3 -0
- agentconnect/a2a_adapter/__init__.py +6 -0
- agentconnect/a2a_adapter/adapter.py +565 -0
- agentconnect/a2a_adapter/cards.py +149 -0
- agentconnect/a2a_adapter/convert.py +157 -0
- agentconnect/a2a_adapter/facade.py +560 -0
- agentconnect/a2a_adapter/seen.py +49 -0
- agentconnect/a2a_adapter/serve.py +67 -0
- agentconnect/adapter.py +319 -0
- agentconnect/adapters.py +52 -0
- agentconnect/apiclient.py +51 -0
- agentconnect/backoff.py +42 -0
- agentconnect/callback.py +314 -0
- agentconnect/cli.py +2324 -0
- agentconnect/cli_json.py +470 -0
- agentconnect/cli_support.py +444 -0
- agentconnect/clock.py +161 -0
- agentconnect/config.py +1213 -0
- agentconnect/daemon/__init__.py +41 -0
- agentconnect/deliveries.py +295 -0
- agentconnect/directory_client.py +255 -0
- agentconnect/failpoints.py +99 -0
- agentconnect/identity.py +111 -0
- agentconnect/isolation.py +345 -0
- agentconnect/keystore.py +279 -0
- agentconnect/limits.py +457 -0
- agentconnect/log.py +143 -0
- agentconnect/mcp/__init__.py +30 -0
- agentconnect/mcp/backend.py +405 -0
- agentconnect/mcp/server.py +382 -0
- agentconnect/mcp/session.py +373 -0
- agentconnect/mcp/tools.py +583 -0
- agentconnect/ownerfile.py +238 -0
- agentconnect/payloads.py +109 -0
- agentconnect/policy.py +1066 -0
- agentconnect/provision.py +239 -0
- agentconnect/py.typed +0 -0
- agentconnect/relay.py +405 -0
- agentconnect/runtime/__init__.py +46 -0
- agentconnect/runtime/agent.py +225 -0
- agentconnect/runtime/api.py +2043 -0
- agentconnect/runtime/engine.py +5359 -0
- agentconnect/runtime/errors.py +47 -0
- agentconnect/runtime/floor.py +649 -0
- agentconnect/runtime/groups.py +1351 -0
- agentconnect/runtime/knocks.py +1422 -0
- agentconnect/runtime/ledger.py +94 -0
- agentconnect/runtime/listing.py +1307 -0
- agentconnect/runtime/registry.py +53 -0
- agentconnect/runtime/runtime.py +158 -0
- agentconnect/runtime/sas.py +1002 -0
- agentconnect/sas_emoji.py +83 -0
- agentconnect/schemas.py +381 -0
- agentconnect/shapes.py +56 -0
- agentconnect/sockets.py +86 -0
- agentconnect/sse.py +234 -0
- agentconnect/store.py +3282 -0
- agentconnect/tasks.py +35 -0
- agentconnect/tokens.py +63 -0
- agentconnect/webhook.py +199 -0
- agentconnect_cli-0.1.0a1.dist-info/METADATA +103 -0
- agentconnect_cli-0.1.0a1.dist-info/RECORD +64 -0
- agentconnect_cli-0.1.0a1.dist-info/WHEEL +4 -0
- agentconnect_cli-0.1.0a1.dist-info/entry_points.txt +3 -0
agentconnect/cli_json.py
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
"""The ``--json`` output shapes of the CLI: the contract in one place.
|
|
2
|
+
|
|
3
|
+
``daemon/tests/test_cli_commands.py`` checks real output against these
|
|
4
|
+
shapes, and ``scripts/gen_reference.py`` renders them into ``docs/cli.md``.
|
|
5
|
+
Change a shape here (and the command) and the docs follow with
|
|
6
|
+
``just docs-gen``. Notation: :mod:`agentconnect.shapes`.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from agentconnect.shapes import Opt
|
|
14
|
+
|
|
15
|
+
SAS: dict[str, Any] = {"decimal": "str", "emoji": "str", "emoji_names": ["str"]}
|
|
16
|
+
|
|
17
|
+
GROUP_VIEW: dict[str, Any] = {
|
|
18
|
+
"group_id": "str",
|
|
19
|
+
"name": "str",
|
|
20
|
+
"purpose": "str",
|
|
21
|
+
"status": "str",
|
|
22
|
+
"epoch": "int",
|
|
23
|
+
"out_of_sync": "bool",
|
|
24
|
+
"out_of_sync_reason": Opt("str"),
|
|
25
|
+
"require_verified": "bool",
|
|
26
|
+
"trust_state": {"self": "str", "verified_members": "int", "members": "int"},
|
|
27
|
+
"verified_summary": "str",
|
|
28
|
+
"leaving": Opt({"since": "int", "blocked": "bool"}),
|
|
29
|
+
"policy_summary": {
|
|
30
|
+
"invite": Opt("str"),
|
|
31
|
+
"remove": Opt("str"),
|
|
32
|
+
"max_members": Opt("int"),
|
|
33
|
+
"max_agent_turns": Opt("int"),
|
|
34
|
+
},
|
|
35
|
+
"floor": {
|
|
36
|
+
"mode": Opt("str"),
|
|
37
|
+
"pinned": "bool",
|
|
38
|
+
"moderator": Opt("str"),
|
|
39
|
+
"effective_moderator": Opt("str"),
|
|
40
|
+
"holder": Opt("str"),
|
|
41
|
+
},
|
|
42
|
+
"pending_leaves": [{"identity": "str", "instance_id": "str"}],
|
|
43
|
+
"members": [
|
|
44
|
+
{
|
|
45
|
+
"identity": "str",
|
|
46
|
+
"fingerprint": "str",
|
|
47
|
+
"display_name": Opt("str"),
|
|
48
|
+
"display_name_verified": "bool",
|
|
49
|
+
"role": "str",
|
|
50
|
+
"verified": "bool",
|
|
51
|
+
"self": "bool",
|
|
52
|
+
"instances": [
|
|
53
|
+
{
|
|
54
|
+
"instance_id": "str",
|
|
55
|
+
"leaf_index": "int",
|
|
56
|
+
"joined_epoch": "int",
|
|
57
|
+
"self": "bool",
|
|
58
|
+
"new_since_verified": Opt("bool"),
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"pending_approvals": "int",
|
|
64
|
+
"hint": Opt("str"),
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
HELD: dict[str, Any] = {
|
|
68
|
+
"hold_id": "str",
|
|
69
|
+
"group_id": "str",
|
|
70
|
+
"direction": "str",
|
|
71
|
+
"sender": "str",
|
|
72
|
+
"instance": "str",
|
|
73
|
+
"msg_id": "str",
|
|
74
|
+
"kind": "str",
|
|
75
|
+
"size": "int",
|
|
76
|
+
"task_id": Opt("str"),
|
|
77
|
+
"created_at": "int",
|
|
78
|
+
"expires_at": "int",
|
|
79
|
+
}
|
|
80
|
+
# The runtime's listing (`GET /v0/listing`, `listing status`).
|
|
81
|
+
LISTING: dict[str, Any] = {
|
|
82
|
+
"directory": "str",
|
|
83
|
+
"name": "str",
|
|
84
|
+
"url": "str",
|
|
85
|
+
"state": "str",
|
|
86
|
+
"seq": "int",
|
|
87
|
+
"published_at": Opt("int"),
|
|
88
|
+
"identity": "str",
|
|
89
|
+
"fingerprint": "str",
|
|
90
|
+
"door": Opt({"expires_at": "int", "renews_at": Opt("int"), "expiring": "bool"}),
|
|
91
|
+
"doors_open": "int",
|
|
92
|
+
"token": {"expires_at": "int", "warn_at": "int"},
|
|
93
|
+
"owner_domain": Opt("str"),
|
|
94
|
+
"owner_state": Opt("str"),
|
|
95
|
+
"last_error": Opt({"code": "str", "at": "int"}),
|
|
96
|
+
"retrying": Opt({"since": "int", "code": Opt("str")}),
|
|
97
|
+
# The human token only: knocks waiting for approval, and dropped since start.
|
|
98
|
+
"pending_knocks?": "int",
|
|
99
|
+
"knocks_dropped?": "int",
|
|
100
|
+
}
|
|
101
|
+
# Knocking (docs/discovery.md): what a knock names and what its owner file said.
|
|
102
|
+
KNOCK_LISTING: dict[str, Any] = {
|
|
103
|
+
"directory": "str",
|
|
104
|
+
"name": "str",
|
|
105
|
+
"identity": "str",
|
|
106
|
+
"fingerprint": "str",
|
|
107
|
+
}
|
|
108
|
+
KNOCK_OWNER: dict[str, Any] = {"domain": Opt("str"), "state": "str"}
|
|
109
|
+
KNOCK_INSPECT: dict[str, Any] = {
|
|
110
|
+
"listing": {
|
|
111
|
+
"url": "str",
|
|
112
|
+
"directory": "str",
|
|
113
|
+
"name": "str",
|
|
114
|
+
"identity": "str",
|
|
115
|
+
"fingerprint": "str",
|
|
116
|
+
"display_name": "str",
|
|
117
|
+
"description": "str",
|
|
118
|
+
"version": "str",
|
|
119
|
+
"organization": Opt("str"),
|
|
120
|
+
"skills": [{"name": "str", "description": "str", "tags": ["str"]}],
|
|
121
|
+
"sha256": "str",
|
|
122
|
+
"token_expires_at": "int",
|
|
123
|
+
},
|
|
124
|
+
"owner": {**KNOCK_OWNER, "fetch": Opt("str"), "checked_at": Opt("int")},
|
|
125
|
+
"door": {"expires_at": "int"},
|
|
126
|
+
"untrusted": "bool",
|
|
127
|
+
"notice": "str",
|
|
128
|
+
"warnings": [{"code": "str", "message": "str"}],
|
|
129
|
+
}
|
|
130
|
+
KNOCK_SUMMARY: dict[str, Any] = {
|
|
131
|
+
"knock_id": "str",
|
|
132
|
+
"status": "str",
|
|
133
|
+
"gives_up_at": "int",
|
|
134
|
+
"listing": KNOCK_LISTING,
|
|
135
|
+
"owner": KNOCK_OWNER,
|
|
136
|
+
}
|
|
137
|
+
KNOCKS: dict[str, Any] = {
|
|
138
|
+
"knock_id": "str",
|
|
139
|
+
"directory": "str",
|
|
140
|
+
"name": "str",
|
|
141
|
+
"fingerprint": "str",
|
|
142
|
+
"owner_state": "str",
|
|
143
|
+
"display_name": "str",
|
|
144
|
+
"description": "str",
|
|
145
|
+
"status": "str",
|
|
146
|
+
"created_at": "int",
|
|
147
|
+
"gives_up_at": "int",
|
|
148
|
+
"group_id": Opt("str"),
|
|
149
|
+
}
|
|
150
|
+
# A pending approval (`GET /v0/approvals`, human token): a join, or a knock
|
|
151
|
+
# with the knock's fields.
|
|
152
|
+
APPROVAL: dict[str, Any] = {
|
|
153
|
+
"kind": "str",
|
|
154
|
+
"request_id": "str",
|
|
155
|
+
"group_id": Opt("str"),
|
|
156
|
+
"identity": "str",
|
|
157
|
+
"display_name": "str",
|
|
158
|
+
"received_at": "int",
|
|
159
|
+
"display_name_verified": "bool",
|
|
160
|
+
"fingerprint": "str",
|
|
161
|
+
"identity_requests?": "int",
|
|
162
|
+
"instance_id?": Opt("str"),
|
|
163
|
+
"mailbox_id?": "str",
|
|
164
|
+
"listing?": {"directory": "str", "name": "str"},
|
|
165
|
+
"note?": Opt("str"),
|
|
166
|
+
"note_verified?": "bool",
|
|
167
|
+
"ts?": "int",
|
|
168
|
+
"lapses_at?": "int",
|
|
169
|
+
"known?": {"groups": "int", "verified_in": ["str"]},
|
|
170
|
+
}
|
|
171
|
+
HELD_DECISION: dict[str, Any] = {"hold_id": "str", "group_id": "str", "status": "str"}
|
|
172
|
+
SAFETY: dict[str, Any] = {"group_id": "str", "settings": "object", "overrides": "object"}
|
|
173
|
+
|
|
174
|
+
# Label (the command, plus a qualifier where one command has several
|
|
175
|
+
# outcomes) to the shape of its stdout with ``--json``.
|
|
176
|
+
SCHEMAS: dict[str, Any] = {
|
|
177
|
+
"group create": {"group_id": "str", "name": "str", "purpose": "str"},
|
|
178
|
+
"group policy": {"group_id": "str", "status": "str", "changes": "object"},
|
|
179
|
+
"group role": {"group_id": "str", "identity": "str", "role": "str", "status": "str"},
|
|
180
|
+
"group transfer": {
|
|
181
|
+
"group_id": "str",
|
|
182
|
+
"identity": "str",
|
|
183
|
+
"keep_admin": "bool",
|
|
184
|
+
"status": "str",
|
|
185
|
+
},
|
|
186
|
+
"group floor": {"group_id": "str", "holder": Opt("str"), "status": "str", "msg_id": "str"},
|
|
187
|
+
"group adapters": {"group_id": "str", "adapters": Opt(["str"]), "delivers_to": ["str"]},
|
|
188
|
+
"invite create": {
|
|
189
|
+
"url": "str",
|
|
190
|
+
"invite_id": "str",
|
|
191
|
+
"group_id": "str",
|
|
192
|
+
"expires_at": "int",
|
|
193
|
+
"max_uses": "int",
|
|
194
|
+
"require_verified": "bool",
|
|
195
|
+
"replica": "bool",
|
|
196
|
+
"instance": Opt("str"),
|
|
197
|
+
"reminder": "str",
|
|
198
|
+
},
|
|
199
|
+
"invite revoke": {"revoked": "str"},
|
|
200
|
+
"identity export": {
|
|
201
|
+
"file": "str",
|
|
202
|
+
"identity": "str",
|
|
203
|
+
"fingerprint": "str",
|
|
204
|
+
"code": "str",
|
|
205
|
+
"warning": "str",
|
|
206
|
+
},
|
|
207
|
+
"identity import": {
|
|
208
|
+
"identity": "str",
|
|
209
|
+
"fingerprint": "str",
|
|
210
|
+
"instance_id": "str",
|
|
211
|
+
"data_dir": "str",
|
|
212
|
+
"next": "str",
|
|
213
|
+
},
|
|
214
|
+
"accept (approved)": {
|
|
215
|
+
"status": "str",
|
|
216
|
+
"invite_id": "str",
|
|
217
|
+
"inviter_name": "str",
|
|
218
|
+
**GROUP_VIEW,
|
|
219
|
+
},
|
|
220
|
+
"accept (still pending)": {
|
|
221
|
+
"status": "str",
|
|
222
|
+
"invite_id": "str",
|
|
223
|
+
"name": "str",
|
|
224
|
+
"purpose": "str",
|
|
225
|
+
"inviter_name": "str",
|
|
226
|
+
"group_id": "null",
|
|
227
|
+
},
|
|
228
|
+
"groups list": {
|
|
229
|
+
"groups": [
|
|
230
|
+
{
|
|
231
|
+
"group_id": "str",
|
|
232
|
+
"name": "str",
|
|
233
|
+
"status": "str",
|
|
234
|
+
"epoch": "int",
|
|
235
|
+
"members": "int",
|
|
236
|
+
"out_of_sync": "bool",
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
"groups show": GROUP_VIEW,
|
|
241
|
+
"approvals list": {
|
|
242
|
+
"approvals": [
|
|
243
|
+
{
|
|
244
|
+
"kind": "str",
|
|
245
|
+
"request_id": "str",
|
|
246
|
+
"group_id": Opt("str"),
|
|
247
|
+
"group_name": Opt("str"),
|
|
248
|
+
"display_name": "str",
|
|
249
|
+
"display_name_verified": "bool",
|
|
250
|
+
"identity": "str",
|
|
251
|
+
"fingerprint": "str",
|
|
252
|
+
"received_at": "int",
|
|
253
|
+
"identity_requests?": "int",
|
|
254
|
+
"instance_id?": Opt("str"),
|
|
255
|
+
"mailbox_id?": "str",
|
|
256
|
+
"listing?": {"directory": "str", "name": "str"},
|
|
257
|
+
"note?": Opt("str"),
|
|
258
|
+
"note_verified?": "bool",
|
|
259
|
+
"lapses_at?": "int",
|
|
260
|
+
"known?": {"groups": "int", "verified_in": ["str"]},
|
|
261
|
+
}
|
|
262
|
+
],
|
|
263
|
+
"messages": [HELD],
|
|
264
|
+
},
|
|
265
|
+
"approvals approve": {"request_id": "str", "status": "str", "group_id": "str"},
|
|
266
|
+
"approvals approve (knock)": {
|
|
267
|
+
"request_id": "str",
|
|
268
|
+
"kind": "str",
|
|
269
|
+
"status": "str",
|
|
270
|
+
"group_id": "str",
|
|
271
|
+
"listing": {"directory": "str", "name": "str"},
|
|
272
|
+
},
|
|
273
|
+
"approvals approve (held message)": HELD_DECISION,
|
|
274
|
+
"approvals reject": {"request_id": "str", "status": "str"},
|
|
275
|
+
"approvals reject (held message)": HELD_DECISION,
|
|
276
|
+
"safety show": SAFETY,
|
|
277
|
+
"safety set": SAFETY,
|
|
278
|
+
"remove": {"group_id": "str", "identity": "str", "status": "str", "instances?": ["str"]},
|
|
279
|
+
"audit": {
|
|
280
|
+
"audit": [
|
|
281
|
+
{
|
|
282
|
+
"seq": "int",
|
|
283
|
+
"group_id": "str",
|
|
284
|
+
"at": "int",
|
|
285
|
+
"direction": "str",
|
|
286
|
+
"sender": "str",
|
|
287
|
+
"msg_id": "str",
|
|
288
|
+
"kind": "str",
|
|
289
|
+
"size": "int",
|
|
290
|
+
"decision": "str",
|
|
291
|
+
"reason": "str",
|
|
292
|
+
}
|
|
293
|
+
],
|
|
294
|
+
"suppressed": [
|
|
295
|
+
{
|
|
296
|
+
"group_id": "str",
|
|
297
|
+
"sender": "str",
|
|
298
|
+
"decision": "str",
|
|
299
|
+
"count": "int",
|
|
300
|
+
"first_at": "int",
|
|
301
|
+
"last_at": "int",
|
|
302
|
+
}
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
"transcript": {
|
|
306
|
+
"transcript": [
|
|
307
|
+
{
|
|
308
|
+
"seq": "int",
|
|
309
|
+
"group_id": "str",
|
|
310
|
+
"at": "int",
|
|
311
|
+
"direction": "str",
|
|
312
|
+
"sender": "str",
|
|
313
|
+
"msg_id": "str",
|
|
314
|
+
"kind": "str",
|
|
315
|
+
"inner": "object",
|
|
316
|
+
}
|
|
317
|
+
],
|
|
318
|
+
"untrusted": "bool",
|
|
319
|
+
},
|
|
320
|
+
"verify (verified)": {
|
|
321
|
+
"outcome": "str",
|
|
322
|
+
"group_id": "str",
|
|
323
|
+
"verified": ["str"],
|
|
324
|
+
"run": "str",
|
|
325
|
+
"sas": SAS,
|
|
326
|
+
"labels": {"self": "str", "peer": "str"},
|
|
327
|
+
},
|
|
328
|
+
"verify (mismatch)": {
|
|
329
|
+
"outcome": "str",
|
|
330
|
+
"group_id": "str",
|
|
331
|
+
"status": "str",
|
|
332
|
+
"ownership_transfer": Opt(
|
|
333
|
+
{"new_owner": "str", "new_owner_name": Opt("str"), "confirmed": "bool"}
|
|
334
|
+
),
|
|
335
|
+
},
|
|
336
|
+
"leave": {"group_id": "str", "status": "str"},
|
|
337
|
+
"send": {"msg_id": "str", "group_id": "str", "hint": Opt("str")},
|
|
338
|
+
"listing publish": {
|
|
339
|
+
"directory": "str",
|
|
340
|
+
"name": "str",
|
|
341
|
+
"url": "str",
|
|
342
|
+
"identity": "str",
|
|
343
|
+
"fingerprint": "str",
|
|
344
|
+
"seq": "int",
|
|
345
|
+
"state": "str",
|
|
346
|
+
"door_expires_at": Opt("int"),
|
|
347
|
+
"renews_at": Opt("int"),
|
|
348
|
+
"token_expires_at": "int",
|
|
349
|
+
"owner_domain": Opt("str"),
|
|
350
|
+
"owner_state": Opt("str"),
|
|
351
|
+
"warnings": [{"code": "str", "message": "str"}],
|
|
352
|
+
},
|
|
353
|
+
"listing withdraw": {
|
|
354
|
+
"directory": "str",
|
|
355
|
+
"name": "str",
|
|
356
|
+
"seq": "int",
|
|
357
|
+
"state": "str",
|
|
358
|
+
"doors_closed": "int",
|
|
359
|
+
"doors_close_pending": "int",
|
|
360
|
+
"forced": "bool",
|
|
361
|
+
},
|
|
362
|
+
"listing status": {"listing": Opt(LISTING)},
|
|
363
|
+
"knock (joined)": {
|
|
364
|
+
"status": "str",
|
|
365
|
+
"knock_id": "str",
|
|
366
|
+
"group_id": "str",
|
|
367
|
+
"listing": KNOCK_LISTING,
|
|
368
|
+
"owner": KNOCK_OWNER,
|
|
369
|
+
"hint": "str",
|
|
370
|
+
},
|
|
371
|
+
"knock (sent)": {
|
|
372
|
+
"status": "str",
|
|
373
|
+
"knock_id": "str",
|
|
374
|
+
"gives_up_at": "int",
|
|
375
|
+
"listing": KNOCK_LISTING,
|
|
376
|
+
"owner": KNOCK_OWNER,
|
|
377
|
+
"group_id": "null",
|
|
378
|
+
},
|
|
379
|
+
"knocks": {"knocks": [KNOCKS], "untrusted": "bool"},
|
|
380
|
+
"events (one object per line)": {
|
|
381
|
+
"seq": "int",
|
|
382
|
+
"group_id": Opt("str"),
|
|
383
|
+
"type": "str",
|
|
384
|
+
"data": "object",
|
|
385
|
+
"at": "int",
|
|
386
|
+
"event_id": "str",
|
|
387
|
+
},
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
# What the less obvious values mean, rendered under the shape.
|
|
391
|
+
NOTES: dict[str, str] = {
|
|
392
|
+
"accept (approved)": (
|
|
393
|
+
"`status` is `joined`. The rest is the `groups show` object. There is no short code "
|
|
394
|
+
"here: compare it with `agentconnect verify` (SPEC 11)."
|
|
395
|
+
),
|
|
396
|
+
"accept (still pending)": "`status` is `pending`: the wait ended before the inviter approved.",
|
|
397
|
+
"groups show": (
|
|
398
|
+
"There is no group-wide short code: each pair of members compares its own with "
|
|
399
|
+
"`agentconnect verify` (SPEC 11). `hint` is set "
|
|
400
|
+
"while the group is unverified: relay it to the human, don't act on it. "
|
|
401
|
+
"`leaving` is set while this instance leaves the group; `blocked` means it is the "
|
|
402
|
+
"owner's last instance, which must hand ownership over first. Each member lists "
|
|
403
|
+
"its `instances`; `self` marks this one."
|
|
404
|
+
),
|
|
405
|
+
"approvals list": (
|
|
406
|
+
"`messages` are the messages the safety policy holds: `direction` is `in` "
|
|
407
|
+
"(from `sender`) or `out` (your agent's)."
|
|
408
|
+
),
|
|
409
|
+
"approvals approve": "`status` is `approving`.",
|
|
410
|
+
"approvals approve (knock)": (
|
|
411
|
+
"`status` is `approving`: the new group exists, and the knocker joins it once "
|
|
412
|
+
"its Add and Welcome went out."
|
|
413
|
+
),
|
|
414
|
+
"approvals approve (held message)": "`status` is `approved`.",
|
|
415
|
+
"approvals reject": "`status` is `rejected`.",
|
|
416
|
+
"approvals reject (held message)": "`status` is `rejected`.",
|
|
417
|
+
"safety show": (
|
|
418
|
+
"`settings` is what applies (its `senders` holds per-member limits); "
|
|
419
|
+
"`overrides` is what this group sets over the `[policy]` defaults."
|
|
420
|
+
),
|
|
421
|
+
"remove": (
|
|
422
|
+
"`status` is `removing`: the commit is queued. `instances` is there with `--instance`."
|
|
423
|
+
),
|
|
424
|
+
"audit": (
|
|
425
|
+
"`decision` is `deliver`, `deliver_as_context`, `hold_for_approval`, `drop`, "
|
|
426
|
+
"`approved`, `rejected`, `cancelled` or `expired`. There is never a body. "
|
|
427
|
+
"`suppressed` counts, per group, sender and decision, the security rows that "
|
|
428
|
+
"fell between a sender's oldest and newest half of its share: they are not kept."
|
|
429
|
+
),
|
|
430
|
+
"verify (verified)": (
|
|
431
|
+
"`outcome` is `verified`; `verified` lists the identity marked, `run` the SAS run "
|
|
432
|
+
"whose code (`sas`) and instance labels (`labels`) both humans read."
|
|
433
|
+
),
|
|
434
|
+
"verify (mismatch)": (
|
|
435
|
+
"`outcome` is `mismatch` and `status` is `left`. When `confirmed` is "
|
|
436
|
+
"false, or the view was forked, the members must recreate the group "
|
|
437
|
+
"(SPEC 11)."
|
|
438
|
+
),
|
|
439
|
+
"leave": "`status` is `left` or `leaving`.",
|
|
440
|
+
"listing publish": (
|
|
441
|
+
"`state` is `published`. `owner_state` is what the directory reported, for "
|
|
442
|
+
"information only. A directory that didn't answer is `publish_retrying` (exit 1): "
|
|
443
|
+
"the daemon keeps sending the same signed listing."
|
|
444
|
+
),
|
|
445
|
+
"listing withdraw": (
|
|
446
|
+
"`state` is `withdrawn`, or `withdrawn_locally` with `forced` true after "
|
|
447
|
+
"`--force`: recorded here only, and the directory may still list it. Until the "
|
|
448
|
+
"directory takes the withdrawal the command fails with `withdraw_pending` "
|
|
449
|
+
"(exit 1); the doors are closed already and the daemon keeps sending it."
|
|
450
|
+
),
|
|
451
|
+
"listing status": (
|
|
452
|
+
"`listing` is `null` when the runtime has never had a listing. With the human "
|
|
453
|
+
"token it adds `pending_knocks` and `knocks_dropped` (since the runtime started)."
|
|
454
|
+
),
|
|
455
|
+
"knock (joined)": (
|
|
456
|
+
"The owner's human approved: `group_id` is the new group. `owner.state` is this "
|
|
457
|
+
"daemon's own check of the owner domain. Compare the short code with the owner "
|
|
458
|
+
"(`agentconnect verify`) before trusting the group."
|
|
459
|
+
),
|
|
460
|
+
"knock (sent)": (
|
|
461
|
+
"`--wait 0`, or the wait ended first: the knock waits until `gives_up_at`. With "
|
|
462
|
+
"no answer by then the command fails with `no_answer` (exit 1), which never says "
|
|
463
|
+
"why: the owner may be offline or busy, or chose not to answer."
|
|
464
|
+
),
|
|
465
|
+
"knocks": (
|
|
466
|
+
"`status` is `queued`, `sent`, `joined` (with `group_id`), `lapsed` (no answer) "
|
|
467
|
+
"or `failed`. `display_name` and `description` are the listing's card text, "
|
|
468
|
+
"written by its owner: `untrusted`."
|
|
469
|
+
),
|
|
470
|
+
}
|