@1claw/openapi-spec 0.61.3 → 0.61.5

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 +201 -3
  2. package/openapi.yaml +110 -3
  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.3",
5
+ "version": "0.61.5",
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"
@@ -25057,7 +25057,7 @@
25057
25057
  }
25058
25058
  }
25059
25059
  },
25060
- "/otel/v1/stream": {
25060
+ "/v1/otel/stream": {
25061
25061
  "get": {
25062
25062
  "tags": [
25063
25063
  "Observability"
@@ -25112,7 +25112,205 @@
25112
25112
  }
25113
25113
  }
25114
25114
  },
25115
- "/otel/v1/topology": {
25115
+ "/v1/otel/threats": {
25116
+ "get": {
25117
+ "tags": [
25118
+ "Observability"
25119
+ ],
25120
+ "summary": "Durable threat register for the org, worst reach first",
25121
+ "description": "Threats are ranked by blast radius — the size of the affected agent's topology neighbourhood (vaults + connectors + chains) — not by recency or severity alone, so the row an operator should look at first is first. Ties fall back to recency.\n\n`shadow: true` marks a threat the trust engine produced while running in recommend-only mode. Those are shown with a badge and never acted on automatically.\n\nEvidence carries trace and span ids and a note. It never contains secret values or HTTP bodies.",
25122
+ "operationId": "list_otel_threats",
25123
+ "parameters": [
25124
+ {
25125
+ "name": "state",
25126
+ "in": "query",
25127
+ "required": false,
25128
+ "description": "`open` (default) returns anything not yet resolved; `all` includes resolved.",
25129
+ "schema": {
25130
+ "type": "string",
25131
+ "enum": [
25132
+ "open",
25133
+ "all"
25134
+ ]
25135
+ }
25136
+ }
25137
+ ],
25138
+ "responses": {
25139
+ "200": {
25140
+ "description": "Threats, highest blast radius first",
25141
+ "content": {
25142
+ "application/json": {
25143
+ "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
+ }
25238
+ }
25239
+ }
25240
+ }
25241
+ },
25242
+ "401": {
25243
+ "description": "Unauthenticated"
25244
+ },
25245
+ "403": {
25246
+ "description": "Not a human user"
25247
+ }
25248
+ }
25249
+ }
25250
+ },
25251
+ "/v1/otel/summary": {
25252
+ "get": {
25253
+ "tags": [
25254
+ "Observability"
25255
+ ],
25256
+ "summary": "Posture score and the counts behind it",
25257
+ "description": "`posture_score` is the mean agent trust score, less a penalty per open critical threat scaled by the fraction of the organization that threat can reach. Scaling by fraction rather than count is what makes the number comparable between a seven-agent org and a fifty-agent one.\n\nIt returns 100 when there are no agents, and also while the trust engine is still in shadow mode and no scores exist yet — absence of data is not evidence of compromise. It never goes below 0.\n\n`top_threats` uses the same ranking as `/v1/otel/threats`, so clicking through from the summary lands on the same first row.",
25258
+ "operationId": "get_otel_summary",
25259
+ "responses": {
25260
+ "200": {
25261
+ "description": "Posture summary",
25262
+ "content": {
25263
+ "application/json": {
25264
+ "schema": {
25265
+ "type": "object",
25266
+ "required": [
25267
+ "posture_score",
25268
+ "open_threats",
25269
+ "open_critical",
25270
+ "pending_approvals",
25271
+ "agent_count",
25272
+ "top_threats"
25273
+ ],
25274
+ "properties": {
25275
+ "posture_score": {
25276
+ "type": "integer",
25277
+ "minimum": 0,
25278
+ "maximum": 100
25279
+ },
25280
+ "open_threats": {
25281
+ "type": "integer"
25282
+ },
25283
+ "open_critical": {
25284
+ "type": "integer"
25285
+ },
25286
+ "pending_approvals": {
25287
+ "type": "integer"
25288
+ },
25289
+ "agent_count": {
25290
+ "type": "integer"
25291
+ },
25292
+ "top_threats": {
25293
+ "type": "array",
25294
+ "description": "At most five, same ranking as /v1/otel/threats.",
25295
+ "items": {
25296
+ "type": "object"
25297
+ }
25298
+ }
25299
+ }
25300
+ }
25301
+ }
25302
+ }
25303
+ },
25304
+ "401": {
25305
+ "description": "Unauthenticated"
25306
+ },
25307
+ "403": {
25308
+ "description": "Not a human user"
25309
+ }
25310
+ }
25311
+ }
25312
+ },
25313
+ "/v1/otel/topology": {
25116
25314
  "get": {
25117
25315
  "tags": [
25118
25316
  "Observability"
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.3"
5
+ version: "0.61.5"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -16118,7 +16118,7 @@ paths:
16118
16118
  description: Forbidden, or the plan does not include this
16119
16119
  '404':
16120
16120
  description: Not found
16121
- /otel/v1/stream:
16121
+ /v1/otel/stream:
16122
16122
  get:
16123
16123
  tags: [Observability]
16124
16124
  summary: "SSE stream of this org's telemetry signals"
@@ -16166,7 +16166,114 @@ paths:
16166
16166
  description: Not a human user, or fixtures are not available here
16167
16167
  '429':
16168
16168
  description: Too many concurrent streams for this user
16169
- /otel/v1/topology:
16169
+ /v1/otel/threats:
16170
+ get:
16171
+ tags: [Observability]
16172
+ summary: "Durable threat register for the org, worst reach first"
16173
+ description: >-
16174
+ Threats are ranked by blast radius — the size of the affected
16175
+ agent's topology neighbourhood (vaults + connectors + chains) —
16176
+ not by recency or severity alone, so the row an operator should
16177
+ look at first is first. Ties fall back to recency.
16178
+
16179
+
16180
+ `shadow: true` marks a threat the trust engine produced while
16181
+ running in recommend-only mode. Those are shown with a badge and
16182
+ never acted on automatically.
16183
+
16184
+
16185
+ Evidence carries trace and span ids and a note. It never
16186
+ contains secret values or HTTP bodies.
16187
+ operationId: list_otel_threats
16188
+ parameters:
16189
+ - name: state
16190
+ in: query
16191
+ required: false
16192
+ description: "`open` (default) returns anything not yet resolved; `all` includes resolved."
16193
+ schema:
16194
+ type: string
16195
+ enum: [open, all]
16196
+ responses:
16197
+ '200':
16198
+ description: Threats, highest blast radius first
16199
+ content:
16200
+ application/json:
16201
+ 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 }
16229
+ '401':
16230
+ description: Unauthenticated
16231
+ '403':
16232
+ description: Not a human user
16233
+ /v1/otel/summary:
16234
+ get:
16235
+ tags: [Observability]
16236
+ summary: "Posture score and the counts behind it"
16237
+ description: >-
16238
+ `posture_score` is the mean agent trust score, less a penalty
16239
+ per open critical threat scaled by the fraction of the
16240
+ organization that threat can reach. Scaling by fraction rather
16241
+ than count is what makes the number comparable between a
16242
+ seven-agent org and a fifty-agent one.
16243
+
16244
+
16245
+ It returns 100 when there are no agents, and also while the
16246
+ trust engine is still in shadow mode and no scores exist yet —
16247
+ absence of data is not evidence of compromise. It never goes
16248
+ below 0.
16249
+
16250
+
16251
+ `top_threats` uses the same ranking as `/v1/otel/threats`, so
16252
+ clicking through from the summary lands on the same first row.
16253
+ operationId: get_otel_summary
16254
+ responses:
16255
+ '200':
16256
+ description: Posture summary
16257
+ content:
16258
+ application/json:
16259
+ schema:
16260
+ type: object
16261
+ required: [posture_score, open_threats, open_critical, pending_approvals, agent_count, top_threats]
16262
+ properties:
16263
+ posture_score: { type: integer, minimum: 0, maximum: 100 }
16264
+ open_threats: { type: integer }
16265
+ open_critical: { type: integer }
16266
+ pending_approvals: { type: integer }
16267
+ agent_count: { type: integer }
16268
+ top_threats:
16269
+ type: array
16270
+ description: At most five, same ranking as /v1/otel/threats.
16271
+ items: { type: object }
16272
+ '401':
16273
+ description: Unauthenticated
16274
+ '403':
16275
+ description: Not a human user
16276
+ /v1/otel/topology:
16170
16277
  get:
16171
16278
  tags: [Observability]
16172
16279
  summary: "Agent, vault, policy, connector and chain graph for the org"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.3",
3
+ "version": "0.61.5",
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": {