@1claw/openapi-spec 0.61.9 → 0.61.11

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.
Files changed (3) hide show
  1. package/openapi.json +428 -224
  2. package/openapi.yaml +238 -87
  3. package/package.json +1 -1
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "1Claw API",
5
- "version": "0.61.9",
5
+ "version": "0.61.11",
6
6
  "description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\n## Domains\n\n`api.1claw.co` is canonical: it is the OIDC issuer, the `aud` the API\nmints, and the first entry in `servers` — a generated client takes its\nbase URL from there, and the previous ordering pointed every SDK at the\ndomain the issuer had already left. `api.1claw.xyz` still answers and is\nstill accepted on token validation, because tokens minted before the\nmove carry it; it is never minted now.\n\nOne deliberate exception: the Shroud attestation identity token is\nrequested from GCP with `audience: https://api.1claw.xyz`, so\n`/v1/shroud/attestation` reports that as its `expected_audience`. That\nis accurate rather than stale — the audience is a verification contract\nwith anyone already checking the token, and moving it is a breaking\nchange for them, not a rename.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
7
7
  "contact": {
8
8
  "email": "ops@1claw.co"
@@ -24669,6 +24669,201 @@
24669
24669
  }
24670
24670
  }
24671
24671
  },
24672
+ "/v1/platform/connections/{connection_id}/otel/topology": {
24673
+ "get": {
24674
+ "tags": [
24675
+ "Platform",
24676
+ "Observability"
24677
+ ],
24678
+ "summary": "Topology for one connection's agents",
24679
+ "description": "The same graph as `/v1/otel/topology`, restricted to what this connection's agents reach: the agents, the policies they hold, the vaults those grant, the chains they sign on and the systems they call. Restricted before the 500-node cap, so a large org's cap cannot cut the connection's own agents out. Walking is directed (agent → policy → vault), so a vault shared with another tenant's agent does not reveal that agent.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
24680
+ "operationId": "get_platform_connection_otel_topology",
24681
+ "parameters": [
24682
+ {
24683
+ "name": "connection_id",
24684
+ "in": "path",
24685
+ "required": true,
24686
+ "schema": {
24687
+ "type": "string",
24688
+ "format": "uuid"
24689
+ }
24690
+ }
24691
+ ],
24692
+ "responses": {
24693
+ "200": {
24694
+ "description": "Nodes and edges reachable from the connection's agents",
24695
+ "content": {
24696
+ "application/json": {
24697
+ "schema": {
24698
+ "$ref": "#/components/schemas/OtelTopology"
24699
+ }
24700
+ }
24701
+ }
24702
+ },
24703
+ "401": {
24704
+ "description": "Unauthenticated"
24705
+ },
24706
+ "403": {
24707
+ "description": "Not a plt_ key"
24708
+ },
24709
+ "404": {
24710
+ "description": "Connection not found for this app"
24711
+ }
24712
+ }
24713
+ }
24714
+ },
24715
+ "/v1/platform/connections/{connection_id}/otel/threats": {
24716
+ "get": {
24717
+ "tags": [
24718
+ "Platform",
24719
+ "Observability"
24720
+ ],
24721
+ "summary": "Open threats on one connection's agents",
24722
+ "description": "`/v1/otel/threats` filtered to the connection's agents, same ranking (blast radius, then recency).\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
24723
+ "operationId": "get_platform_connection_otel_threats",
24724
+ "parameters": [
24725
+ {
24726
+ "name": "connection_id",
24727
+ "in": "path",
24728
+ "required": true,
24729
+ "schema": {
24730
+ "type": "string",
24731
+ "format": "uuid"
24732
+ }
24733
+ },
24734
+ {
24735
+ "name": "state",
24736
+ "in": "query",
24737
+ "required": false,
24738
+ "schema": {
24739
+ "type": "string",
24740
+ "enum": [
24741
+ "open",
24742
+ "all"
24743
+ ]
24744
+ }
24745
+ }
24746
+ ],
24747
+ "responses": {
24748
+ "200": {
24749
+ "description": "Threats on the connection's agents, highest blast radius first",
24750
+ "content": {
24751
+ "application/json": {
24752
+ "schema": {
24753
+ "$ref": "#/components/schemas/OtelThreatList"
24754
+ }
24755
+ }
24756
+ }
24757
+ },
24758
+ "401": {
24759
+ "description": "Unauthenticated"
24760
+ },
24761
+ "403": {
24762
+ "description": "Not a plt_ key"
24763
+ },
24764
+ "404": {
24765
+ "description": "Connection not found for this app"
24766
+ }
24767
+ }
24768
+ }
24769
+ },
24770
+ "/v1/platform/connections/{connection_id}/otel/summary": {
24771
+ "get": {
24772
+ "tags": [
24773
+ "Platform",
24774
+ "Observability"
24775
+ ],
24776
+ "summary": "Posture score and counts for one connection's agents",
24777
+ "description": "`/v1/otel/summary` over a smaller world: the posture score uses the connection's agents' trust scores and the resources they reach; threat and pending-approval counts are the connection's agents' only.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
24778
+ "operationId": "get_platform_connection_otel_summary",
24779
+ "parameters": [
24780
+ {
24781
+ "name": "connection_id",
24782
+ "in": "path",
24783
+ "required": true,
24784
+ "schema": {
24785
+ "type": "string",
24786
+ "format": "uuid"
24787
+ }
24788
+ }
24789
+ ],
24790
+ "responses": {
24791
+ "200": {
24792
+ "description": "Posture and counts for the connection",
24793
+ "content": {
24794
+ "application/json": {
24795
+ "schema": {
24796
+ "$ref": "#/components/schemas/OtelSummary"
24797
+ }
24798
+ }
24799
+ }
24800
+ },
24801
+ "401": {
24802
+ "description": "Unauthenticated"
24803
+ },
24804
+ "403": {
24805
+ "description": "Not a plt_ key"
24806
+ },
24807
+ "404": {
24808
+ "description": "Connection not found for this app"
24809
+ }
24810
+ }
24811
+ }
24812
+ },
24813
+ "/v1/platform/connections/{connection_id}/otel/stream": {
24814
+ "get": {
24815
+ "tags": [
24816
+ "Platform",
24817
+ "Observability"
24818
+ ],
24819
+ "summary": "Live signal stream for one connection's agents (SSE)",
24820
+ "description": "The same protocol as `/v1/otel/stream` — `Last-Event-ID` resume, `event: gap` on a stale cursor or a lagged subscriber — filtered to signals whose agent is one of the connection's. Signals with no agent (a human's own dashboard actions) are never emitted here. The agent set is fixed at connect time; an agent added later appears on the next connect.\n\nStream slots are counted per platform app (five), not per connection.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
24821
+ "operationId": "get_platform_connection_otel_stream",
24822
+ "parameters": [
24823
+ {
24824
+ "name": "connection_id",
24825
+ "in": "path",
24826
+ "required": true,
24827
+ "schema": {
24828
+ "type": "string",
24829
+ "format": "uuid"
24830
+ }
24831
+ },
24832
+ {
24833
+ "name": "Last-Event-ID",
24834
+ "in": "header",
24835
+ "required": false,
24836
+ "schema": {
24837
+ "type": "string"
24838
+ }
24839
+ }
24840
+ ],
24841
+ "responses": {
24842
+ "200": {
24843
+ "description": "text/event-stream",
24844
+ "content": {
24845
+ "text/event-stream": {
24846
+ "schema": {
24847
+ "type": "string"
24848
+ }
24849
+ }
24850
+ }
24851
+ },
24852
+ "401": {
24853
+ "description": "Unauthenticated"
24854
+ },
24855
+ "403": {
24856
+ "description": "Not a plt_ key"
24857
+ },
24858
+ "404": {
24859
+ "description": "Connection not found for this app"
24860
+ },
24861
+ "429": {
24862
+ "description": "Stream slot cap for this app reached"
24863
+ }
24864
+ }
24865
+ }
24866
+ },
24672
24867
  "/v1/platform/connections/{connection_id}/resources": {
24673
24868
  "parameters": [
24674
24869
  {
@@ -25141,100 +25336,7 @@
25141
25336
  "content": {
25142
25337
  "application/json": {
25143
25338
  "schema": {
25144
- "type": "array",
25145
- "items": {
25146
- "type": "object",
25147
- "required": [
25148
- "id",
25149
- "agent_id",
25150
- "class",
25151
- "severity",
25152
- "detected_by",
25153
- "status",
25154
- "shadow",
25155
- "blast_radius",
25156
- "blast_radius_size"
25157
- ],
25158
- "properties": {
25159
- "id": {
25160
- "type": "string",
25161
- "format": "uuid"
25162
- },
25163
- "agent_id": {
25164
- "type": "string",
25165
- "format": "uuid"
25166
- },
25167
- "class": {
25168
- "type": "string",
25169
- "enum": [
25170
- "prompt_injection",
25171
- "policy_breach",
25172
- "spend_anomaly",
25173
- "key_exfil",
25174
- "off_hours",
25175
- "consensus_bypass",
25176
- "trust_breach"
25177
- ]
25178
- },
25179
- "severity": {
25180
- "type": "string",
25181
- "enum": [
25182
- "critical",
25183
- "warn"
25184
- ]
25185
- },
25186
- "detected_by": {
25187
- "type": "string"
25188
- },
25189
- "status": {
25190
- "type": "string",
25191
- "enum": [
25192
- "open",
25193
- "acknowledged",
25194
- "resolved"
25195
- ]
25196
- },
25197
- "shadow": {
25198
- "type": "boolean"
25199
- },
25200
- "evidence": {
25201
- "type": "array",
25202
- "items": {
25203
- "type": "object"
25204
- }
25205
- },
25206
- "blast_radius": {
25207
- "type": "object",
25208
- "properties": {
25209
- "vaults": {
25210
- "type": "integer"
25211
- },
25212
- "connectors": {
25213
- "type": "integer"
25214
- },
25215
- "chains": {
25216
- "type": "integer"
25217
- }
25218
- }
25219
- },
25220
- "blast_radius_size": {
25221
- "type": "integer",
25222
- "description": "Sum of the blast radius. The sort key."
25223
- },
25224
- "resolved_by": {
25225
- "type": "string",
25226
- "nullable": true
25227
- },
25228
- "created_at": {
25229
- "type": "string",
25230
- "format": "date-time"
25231
- },
25232
- "updated_at": {
25233
- "type": "string",
25234
- "format": "date-time"
25235
- }
25236
- }
25237
- }
25339
+ "$ref": "#/components/schemas/OtelThreatList"
25238
25340
  }
25239
25341
  }
25240
25342
  }
@@ -25816,41 +25918,7 @@
25816
25918
  "content": {
25817
25919
  "application/json": {
25818
25920
  "schema": {
25819
- "type": "object",
25820
- "required": [
25821
- "posture_score",
25822
- "open_threats",
25823
- "open_critical",
25824
- "pending_approvals",
25825
- "agent_count",
25826
- "top_threats"
25827
- ],
25828
- "properties": {
25829
- "posture_score": {
25830
- "type": "integer",
25831
- "minimum": 0,
25832
- "maximum": 100
25833
- },
25834
- "open_threats": {
25835
- "type": "integer"
25836
- },
25837
- "open_critical": {
25838
- "type": "integer"
25839
- },
25840
- "pending_approvals": {
25841
- "type": "integer"
25842
- },
25843
- "agent_count": {
25844
- "type": "integer"
25845
- },
25846
- "top_threats": {
25847
- "type": "array",
25848
- "description": "At most five, same ranking as /v1/otel/threats.",
25849
- "items": {
25850
- "type": "object"
25851
- }
25852
- }
25853
- }
25921
+ "$ref": "#/components/schemas/OtelSummary"
25854
25922
  }
25855
25923
  }
25856
25924
  }
@@ -25893,100 +25961,7 @@
25893
25961
  "content": {
25894
25962
  "application/json": {
25895
25963
  "schema": {
25896
- "type": "object",
25897
- "required": [
25898
- "nodes",
25899
- "edges",
25900
- "truncated",
25901
- "total_nodes"
25902
- ],
25903
- "properties": {
25904
- "nodes": {
25905
- "type": "array",
25906
- "items": {
25907
- "type": "object",
25908
- "required": [
25909
- "id",
25910
- "kind",
25911
- "label"
25912
- ],
25913
- "properties": {
25914
- "id": {
25915
- "type": "string",
25916
- "description": "Namespaced by kind, e.g. `agent:<uuid>`."
25917
- },
25918
- "kind": {
25919
- "type": "string",
25920
- "enum": [
25921
- "agent",
25922
- "vault",
25923
- "policy",
25924
- "connector",
25925
- "chain"
25926
- ]
25927
- },
25928
- "label": {
25929
- "type": "string"
25930
- },
25931
- "status": {
25932
- "type": "string",
25933
- "description": "Agents only. Derived, not stored.",
25934
- "enum": [
25935
- "compromised",
25936
- "warn",
25937
- "suspended",
25938
- "ok"
25939
- ]
25940
- },
25941
- "trust": {
25942
- "type": "integer",
25943
- "minimum": 0,
25944
- "maximum": 100,
25945
- "description": "Agents only. Absent until the trust engine has scored the agent."
25946
- }
25947
- }
25948
- }
25949
- },
25950
- "edges": {
25951
- "type": "array",
25952
- "items": {
25953
- "type": "object",
25954
- "required": [
25955
- "from",
25956
- "to",
25957
- "kind"
25958
- ],
25959
- "properties": {
25960
- "from": {
25961
- "type": "string"
25962
- },
25963
- "to": {
25964
- "type": "string"
25965
- },
25966
- "kind": {
25967
- "type": "string",
25968
- "enum": [
25969
- "calls",
25970
- "grants",
25971
- "holds",
25972
- "signs"
25973
- ]
25974
- }
25975
- }
25976
- }
25977
- },
25978
- "truncated": {
25979
- "type": "boolean"
25980
- },
25981
- "total_nodes": {
25982
- "type": "integer",
25983
- "description": "Node count before the cap."
25984
- },
25985
- "fixture": {
25986
- "type": "boolean",
25987
- "description": "Present and true only for synthetic data."
25988
- }
25989
- }
25964
+ "$ref": "#/components/schemas/OtelTopology"
25990
25965
  }
25991
25966
  }
25992
25967
  }
@@ -27223,6 +27198,235 @@
27223
27198
  }
27224
27199
  },
27225
27200
  "schemas": {
27201
+ "OtelTopology": {
27202
+ "type": "object",
27203
+ "required": [
27204
+ "nodes",
27205
+ "edges",
27206
+ "truncated",
27207
+ "total_nodes"
27208
+ ],
27209
+ "properties": {
27210
+ "nodes": {
27211
+ "type": "array",
27212
+ "items": {
27213
+ "type": "object",
27214
+ "required": [
27215
+ "id",
27216
+ "kind",
27217
+ "label"
27218
+ ],
27219
+ "properties": {
27220
+ "id": {
27221
+ "type": "string",
27222
+ "description": "Namespaced by kind, e.g. `agent:<uuid>`."
27223
+ },
27224
+ "kind": {
27225
+ "type": "string",
27226
+ "enum": [
27227
+ "agent",
27228
+ "vault",
27229
+ "policy",
27230
+ "connector",
27231
+ "chain"
27232
+ ]
27233
+ },
27234
+ "label": {
27235
+ "type": "string"
27236
+ },
27237
+ "status": {
27238
+ "type": "string",
27239
+ "description": "Agents only. Derived, not stored.",
27240
+ "enum": [
27241
+ "compromised",
27242
+ "warn",
27243
+ "suspended",
27244
+ "ok"
27245
+ ]
27246
+ },
27247
+ "trust": {
27248
+ "type": "integer",
27249
+ "minimum": 0,
27250
+ "maximum": 100,
27251
+ "description": "Agents only. Absent until the trust engine has scored the agent."
27252
+ }
27253
+ }
27254
+ }
27255
+ },
27256
+ "edges": {
27257
+ "type": "array",
27258
+ "items": {
27259
+ "type": "object",
27260
+ "required": [
27261
+ "from",
27262
+ "to",
27263
+ "kind"
27264
+ ],
27265
+ "properties": {
27266
+ "from": {
27267
+ "type": "string"
27268
+ },
27269
+ "to": {
27270
+ "type": "string"
27271
+ },
27272
+ "kind": {
27273
+ "type": "string",
27274
+ "enum": [
27275
+ "calls",
27276
+ "grants",
27277
+ "holds",
27278
+ "signs"
27279
+ ]
27280
+ }
27281
+ }
27282
+ }
27283
+ },
27284
+ "truncated": {
27285
+ "type": "boolean"
27286
+ },
27287
+ "total_nodes": {
27288
+ "type": "integer",
27289
+ "description": "Node count before the cap."
27290
+ },
27291
+ "fixture": {
27292
+ "type": "boolean",
27293
+ "description": "Present and true only for synthetic data."
27294
+ }
27295
+ }
27296
+ },
27297
+ "OtelThreatList": {
27298
+ "type": "array",
27299
+ "items": {
27300
+ "type": "object",
27301
+ "required": [
27302
+ "id",
27303
+ "agent_id",
27304
+ "class",
27305
+ "severity",
27306
+ "detected_by",
27307
+ "status",
27308
+ "shadow",
27309
+ "blast_radius",
27310
+ "blast_radius_size"
27311
+ ],
27312
+ "properties": {
27313
+ "id": {
27314
+ "type": "string",
27315
+ "format": "uuid"
27316
+ },
27317
+ "agent_id": {
27318
+ "type": "string",
27319
+ "format": "uuid"
27320
+ },
27321
+ "class": {
27322
+ "type": "string",
27323
+ "enum": [
27324
+ "prompt_injection",
27325
+ "policy_breach",
27326
+ "spend_anomaly",
27327
+ "key_exfil",
27328
+ "off_hours",
27329
+ "consensus_bypass",
27330
+ "trust_breach"
27331
+ ]
27332
+ },
27333
+ "severity": {
27334
+ "type": "string",
27335
+ "enum": [
27336
+ "critical",
27337
+ "warn"
27338
+ ]
27339
+ },
27340
+ "detected_by": {
27341
+ "type": "string"
27342
+ },
27343
+ "status": {
27344
+ "type": "string",
27345
+ "enum": [
27346
+ "open",
27347
+ "acknowledged",
27348
+ "resolved"
27349
+ ]
27350
+ },
27351
+ "shadow": {
27352
+ "type": "boolean"
27353
+ },
27354
+ "evidence": {
27355
+ "type": "array",
27356
+ "items": {
27357
+ "type": "object"
27358
+ }
27359
+ },
27360
+ "blast_radius": {
27361
+ "type": "object",
27362
+ "properties": {
27363
+ "vaults": {
27364
+ "type": "integer"
27365
+ },
27366
+ "connectors": {
27367
+ "type": "integer"
27368
+ },
27369
+ "chains": {
27370
+ "type": "integer"
27371
+ }
27372
+ }
27373
+ },
27374
+ "blast_radius_size": {
27375
+ "type": "integer",
27376
+ "description": "Sum of the blast radius. The sort key."
27377
+ },
27378
+ "resolved_by": {
27379
+ "type": "string",
27380
+ "nullable": true
27381
+ },
27382
+ "created_at": {
27383
+ "type": "string",
27384
+ "format": "date-time"
27385
+ },
27386
+ "updated_at": {
27387
+ "type": "string",
27388
+ "format": "date-time"
27389
+ }
27390
+ }
27391
+ }
27392
+ },
27393
+ "OtelSummary": {
27394
+ "type": "object",
27395
+ "required": [
27396
+ "posture_score",
27397
+ "open_threats",
27398
+ "open_critical",
27399
+ "pending_approvals",
27400
+ "agent_count",
27401
+ "top_threats"
27402
+ ],
27403
+ "properties": {
27404
+ "posture_score": {
27405
+ "type": "integer",
27406
+ "minimum": 0,
27407
+ "maximum": 100
27408
+ },
27409
+ "open_threats": {
27410
+ "type": "integer"
27411
+ },
27412
+ "open_critical": {
27413
+ "type": "integer"
27414
+ },
27415
+ "pending_approvals": {
27416
+ "type": "integer"
27417
+ },
27418
+ "agent_count": {
27419
+ "type": "integer"
27420
+ },
27421
+ "top_threats": {
27422
+ "type": "array",
27423
+ "description": "At most five, same ranking as /v1/otel/threats.",
27424
+ "items": {
27425
+ "type": "object"
27426
+ }
27427
+ }
27428
+ }
27429
+ },
27226
27430
  "UpdatePayGuardrailsRequest": {
27227
27431
  "type": "object",
27228
27432
  "properties": {
package/openapi.yaml CHANGED
@@ -2,7 +2,7 @@ openapi: 3.1.0
2
2
 
3
3
  info:
4
4
  title: 1Claw API
5
- version: "0.61.9"
5
+ version: "0.61.11"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -15877,6 +15877,151 @@ paths:
15877
15877
  description: Forbidden, or the plan does not include this
15878
15878
  '404':
15879
15879
  description: Not found
15880
+ /v1/platform/connections/{connection_id}/otel/topology:
15881
+ get:
15882
+ tags: [Platform, Observability]
15883
+ summary: "Topology for one connection's agents"
15884
+ description: >-
15885
+ The same graph as `/v1/otel/topology`, restricted to what this
15886
+ connection's agents reach: the agents, the policies they hold,
15887
+ the vaults those grant, the chains they sign on and the systems
15888
+ they call. Restricted before the 500-node cap, so a large org's
15889
+ cap cannot cut the connection's own agents out. Walking is
15890
+ directed (agent → policy → vault), so a vault shared with
15891
+ another tenant's agent does not reveal that agent.
15892
+
15893
+
15894
+ A `plt_` key sees one connection's agents, never the end-user's org:
15895
+ that org may hold agents from other platforms or the user's
15896
+ own. The set is agents attributed to the connection plus the
15897
+ ones listed on it, constrained to the connection's org. A
15898
+ connection that does not belong to the calling app is a 404.
15899
+ operationId: get_platform_connection_otel_topology
15900
+ parameters:
15901
+ - name: connection_id
15902
+ in: path
15903
+ required: true
15904
+ schema: { type: string, format: uuid }
15905
+ responses:
15906
+ '200':
15907
+ description: Nodes and edges reachable from the connection's agents
15908
+ content:
15909
+ application/json:
15910
+ schema:
15911
+ $ref: '#/components/schemas/OtelTopology'
15912
+ '401': { description: Unauthenticated }
15913
+ '403': { description: Not a plt_ key }
15914
+ '404': { description: Connection not found for this app }
15915
+ /v1/platform/connections/{connection_id}/otel/threats:
15916
+ get:
15917
+ tags: [Platform, Observability]
15918
+ summary: "Open threats on one connection's agents"
15919
+ description: >-
15920
+ `/v1/otel/threats` filtered to the connection's agents, same
15921
+ ranking (blast radius, then recency).
15922
+
15923
+
15924
+ A `plt_` key sees one connection's agents, never the end-user's org:
15925
+ that org may hold agents from other platforms or the user's
15926
+ own. The set is agents attributed to the connection plus the
15927
+ ones listed on it, constrained to the connection's org. A
15928
+ connection that does not belong to the calling app is a 404.
15929
+ operationId: get_platform_connection_otel_threats
15930
+ parameters:
15931
+ - name: connection_id
15932
+ in: path
15933
+ required: true
15934
+ schema: { type: string, format: uuid }
15935
+ - name: state
15936
+ in: query
15937
+ required: false
15938
+ schema:
15939
+ type: string
15940
+ enum: [open, all]
15941
+ responses:
15942
+ '200':
15943
+ description: Threats on the connection's agents, highest blast radius first
15944
+ content:
15945
+ application/json:
15946
+ schema:
15947
+ $ref: '#/components/schemas/OtelThreatList'
15948
+ '401': { description: Unauthenticated }
15949
+ '403': { description: Not a plt_ key }
15950
+ '404': { description: Connection not found for this app }
15951
+ /v1/platform/connections/{connection_id}/otel/summary:
15952
+ get:
15953
+ tags: [Platform, Observability]
15954
+ summary: "Posture score and counts for one connection's agents"
15955
+ description: >-
15956
+ `/v1/otel/summary` over a smaller world: the posture score uses
15957
+ the connection's agents' trust scores and the resources they
15958
+ reach; threat and pending-approval counts are the connection's
15959
+ agents' only.
15960
+
15961
+
15962
+ A `plt_` key sees one connection's agents, never the end-user's org:
15963
+ that org may hold agents from other platforms or the user's
15964
+ own. The set is agents attributed to the connection plus the
15965
+ ones listed on it, constrained to the connection's org. A
15966
+ connection that does not belong to the calling app is a 404.
15967
+ operationId: get_platform_connection_otel_summary
15968
+ parameters:
15969
+ - name: connection_id
15970
+ in: path
15971
+ required: true
15972
+ schema: { type: string, format: uuid }
15973
+ responses:
15974
+ '200':
15975
+ description: Posture and counts for the connection
15976
+ content:
15977
+ application/json:
15978
+ schema:
15979
+ $ref: '#/components/schemas/OtelSummary'
15980
+ '401': { description: Unauthenticated }
15981
+ '403': { description: Not a plt_ key }
15982
+ '404': { description: Connection not found for this app }
15983
+ /v1/platform/connections/{connection_id}/otel/stream:
15984
+ get:
15985
+ tags: [Platform, Observability]
15986
+ summary: "Live signal stream for one connection's agents (SSE)"
15987
+ description: >-
15988
+ The same protocol as `/v1/otel/stream` — `Last-Event-ID` resume,
15989
+ `event: gap` on a stale cursor or a lagged subscriber — filtered
15990
+ to signals whose agent is one of the connection's. Signals with
15991
+ no agent (a human's own dashboard actions) are never emitted
15992
+ here. The agent set is fixed at connect time; an agent added
15993
+ later appears on the next connect.
15994
+
15995
+
15996
+ Stream slots are counted per platform app (five), not per
15997
+ connection.
15998
+
15999
+
16000
+ A `plt_` key sees one connection's agents, never the end-user's org:
16001
+ that org may hold agents from other platforms or the user's
16002
+ own. The set is agents attributed to the connection plus the
16003
+ ones listed on it, constrained to the connection's org. A
16004
+ connection that does not belong to the calling app is a 404.
16005
+ operationId: get_platform_connection_otel_stream
16006
+ parameters:
16007
+ - name: connection_id
16008
+ in: path
16009
+ required: true
16010
+ schema: { type: string, format: uuid }
16011
+ - name: Last-Event-ID
16012
+ in: header
16013
+ required: false
16014
+ schema: { type: string }
16015
+ responses:
16016
+ '200':
16017
+ description: text/event-stream
16018
+ content:
16019
+ text/event-stream:
16020
+ schema: { type: string }
16021
+ '401': { description: Unauthenticated }
16022
+ '403': { description: Not a plt_ key }
16023
+ '404': { description: Connection not found for this app }
16024
+ '429': { description: Stream slot cap for this app reached }
15880
16025
  /v1/platform/connections/{connection_id}/resources:
15881
16026
  parameters:
15882
16027
  - name: connection_id
@@ -16199,33 +16344,7 @@ paths:
16199
16344
  content:
16200
16345
  application/json:
16201
16346
  schema:
16202
- type: array
16203
- items:
16204
- type: object
16205
- required: [id, agent_id, class, severity, detected_by, status, shadow, blast_radius, blast_radius_size]
16206
- properties:
16207
- id: { type: string, format: uuid }
16208
- agent_id: { type: string, format: uuid }
16209
- class:
16210
- type: string
16211
- enum: [prompt_injection, policy_breach, spend_anomaly, key_exfil, off_hours, consensus_bypass, trust_breach]
16212
- severity: { type: string, enum: [critical, warn] }
16213
- detected_by: { type: string }
16214
- status: { type: string, enum: [open, acknowledged, resolved] }
16215
- shadow: { type: boolean }
16216
- evidence: { type: array, items: { type: object } }
16217
- blast_radius:
16218
- type: object
16219
- properties:
16220
- vaults: { type: integer }
16221
- connectors: { type: integer }
16222
- chains: { type: integer }
16223
- blast_radius_size:
16224
- type: integer
16225
- description: Sum of the blast radius. The sort key.
16226
- resolved_by: { type: string, nullable: true }
16227
- created_at: { type: string, format: date-time }
16228
- updated_at: { type: string, format: date-time }
16347
+ $ref: '#/components/schemas/OtelThreatList'
16229
16348
  '401':
16230
16349
  description: Unauthenticated
16231
16350
  '403':
@@ -16557,18 +16676,7 @@ paths:
16557
16676
  content:
16558
16677
  application/json:
16559
16678
  schema:
16560
- type: object
16561
- required: [posture_score, open_threats, open_critical, pending_approvals, agent_count, top_threats]
16562
- properties:
16563
- posture_score: { type: integer, minimum: 0, maximum: 100 }
16564
- open_threats: { type: integer }
16565
- open_critical: { type: integer }
16566
- pending_approvals: { type: integer }
16567
- agent_count: { type: integer }
16568
- top_threats:
16569
- type: array
16570
- description: At most five, same ranking as /v1/otel/threats.
16571
- items: { type: object }
16679
+ $ref: '#/components/schemas/OtelSummary'
16572
16680
  '401':
16573
16681
  description: Unauthenticated
16574
16682
  '403':
@@ -16609,53 +16717,7 @@ paths:
16609
16717
  content:
16610
16718
  application/json:
16611
16719
  schema:
16612
- type: object
16613
- required: [nodes, edges, truncated, total_nodes]
16614
- properties:
16615
- nodes:
16616
- type: array
16617
- items:
16618
- type: object
16619
- required: [id, kind, label]
16620
- properties:
16621
- id:
16622
- type: string
16623
- description: Namespaced by kind, e.g. `agent:<uuid>`.
16624
- kind:
16625
- type: string
16626
- enum: [agent, vault, policy, connector, chain]
16627
- label:
16628
- type: string
16629
- status:
16630
- type: string
16631
- description: Agents only. Derived, not stored.
16632
- enum: [compromised, warn, suspended, ok]
16633
- trust:
16634
- type: integer
16635
- minimum: 0
16636
- maximum: 100
16637
- description: Agents only. Absent until the trust engine has scored the agent.
16638
- edges:
16639
- type: array
16640
- items:
16641
- type: object
16642
- required: [from, to, kind]
16643
- properties:
16644
- from:
16645
- type: string
16646
- to:
16647
- type: string
16648
- kind:
16649
- type: string
16650
- enum: [calls, grants, holds, signs]
16651
- truncated:
16652
- type: boolean
16653
- total_nodes:
16654
- type: integer
16655
- description: Node count before the cap.
16656
- fixture:
16657
- type: boolean
16658
- description: Present and true only for synthetic data.
16720
+ $ref: '#/components/schemas/OtelTopology'
16659
16721
  '401':
16660
16722
  description: Unauthenticated
16661
16723
  '403':
@@ -17447,6 +17509,95 @@ components:
17447
17509
  $ref: "#/components/schemas/ProblemDetails"
17448
17510
 
17449
17511
  schemas:
17512
+ OtelTopology:
17513
+ type: object
17514
+ required: [nodes, edges, truncated, total_nodes]
17515
+ properties:
17516
+ nodes:
17517
+ type: array
17518
+ items:
17519
+ type: object
17520
+ required: [id, kind, label]
17521
+ properties:
17522
+ id:
17523
+ type: string
17524
+ description: Namespaced by kind, e.g. `agent:<uuid>`.
17525
+ kind:
17526
+ type: string
17527
+ enum: [agent, vault, policy, connector, chain]
17528
+ label:
17529
+ type: string
17530
+ status:
17531
+ type: string
17532
+ description: Agents only. Derived, not stored.
17533
+ enum: [compromised, warn, suspended, ok]
17534
+ trust:
17535
+ type: integer
17536
+ minimum: 0
17537
+ maximum: 100
17538
+ description: Agents only. Absent until the trust engine has scored the agent.
17539
+ edges:
17540
+ type: array
17541
+ items:
17542
+ type: object
17543
+ required: [from, to, kind]
17544
+ properties:
17545
+ from:
17546
+ type: string
17547
+ to:
17548
+ type: string
17549
+ kind:
17550
+ type: string
17551
+ enum: [calls, grants, holds, signs]
17552
+ truncated:
17553
+ type: boolean
17554
+ total_nodes:
17555
+ type: integer
17556
+ description: Node count before the cap.
17557
+ fixture:
17558
+ type: boolean
17559
+ description: Present and true only for synthetic data.
17560
+ OtelThreatList:
17561
+ type: array
17562
+ items:
17563
+ type: object
17564
+ required: [id, agent_id, class, severity, detected_by, status, shadow, blast_radius, blast_radius_size]
17565
+ properties:
17566
+ id: { type: string, format: uuid }
17567
+ agent_id: { type: string, format: uuid }
17568
+ class:
17569
+ type: string
17570
+ enum: [prompt_injection, policy_breach, spend_anomaly, key_exfil, off_hours, consensus_bypass, trust_breach]
17571
+ severity: { type: string, enum: [critical, warn] }
17572
+ detected_by: { type: string }
17573
+ status: { type: string, enum: [open, acknowledged, resolved] }
17574
+ shadow: { type: boolean }
17575
+ evidence: { type: array, items: { type: object } }
17576
+ blast_radius:
17577
+ type: object
17578
+ properties:
17579
+ vaults: { type: integer }
17580
+ connectors: { type: integer }
17581
+ chains: { type: integer }
17582
+ blast_radius_size:
17583
+ type: integer
17584
+ description: Sum of the blast radius. The sort key.
17585
+ resolved_by: { type: string, nullable: true }
17586
+ created_at: { type: string, format: date-time }
17587
+ updated_at: { type: string, format: date-time }
17588
+ OtelSummary:
17589
+ type: object
17590
+ required: [posture_score, open_threats, open_critical, pending_approvals, agent_count, top_threats]
17591
+ properties:
17592
+ posture_score: { type: integer, minimum: 0, maximum: 100 }
17593
+ open_threats: { type: integer }
17594
+ open_critical: { type: integer }
17595
+ pending_approvals: { type: integer }
17596
+ agent_count: { type: integer }
17597
+ top_threats:
17598
+ type: array
17599
+ description: At most five, same ranking as /v1/otel/threats.
17600
+ items: { type: object }
17450
17601
  UpdatePayGuardrailsRequest:
17451
17602
  type: object
17452
17603
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.9",
3
+ "version": "0.61.11",
4
4
  "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API \u2014 generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {