@1claw/openapi-spec 0.16.1 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -40,10 +40,11 @@ openapi-generator generate \
40
40
  import spec from "@1claw/openapi-spec/openapi.json";
41
41
  ```
42
42
 
43
- ## What's in the spec (v0.16.x)
43
+ ## What's in the spec (v0.17.x)
44
44
 
45
+ - **Auth — agent JWT** — `POST /v1/auth/agent-token` documents optional JWT claim **`shroud_config`** when the agent has Shroud enabled (mirrors DB; consumed by Shroud PolicyEngine on LLM requests). Re-exchange after changing agent Shroud settings.
45
46
  - **Auth — password reset** — `POST /v1/auth/forgot-password`, `POST /v1/auth/reset-password` (public; anti-enumeration on forgot)
46
- - **Billing — LLM token billing** — `GET /v1/billing/llm-token-billing`, `POST .../subscribe`, `POST .../disable` (Stripe AI Gateway add-on; optional org feature)
47
+ - **Billing — LLM token billing** — `GET /v1/billing/llm-token-billing` (`LlmTokenBillingStatus`: `enabled`, `subscription_status`, optional `credit_balance`, optional `billing_cycle_usage` with `metered_lines[]`), `POST .../subscribe`, `POST .../disable` (Stripe AI Gateway add-on; optional org feature)
47
48
  - **Treasury** — Safe multisig treasuries: `POST/GET /v1/treasury`, `GET/PATCH/DELETE /v1/treasury/{id}`, signers, agent access requests (`requests[]` on list)
48
49
  - **Vaults** — CRUD, CMEK enable/disable, key rotation with job tracking
49
50
  - **Secrets** — CRUD, versioning, CMEK-encrypted flag
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "1Claw API",
5
- "version": "2.6.0",
5
+ "version": "2.7.0",
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.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
7
7
  "contact": {
8
8
  "email": "ops@1claw.xyz"
@@ -153,6 +153,7 @@
153
153
  "Authentication"
154
154
  ],
155
155
  "summary": "Exchange agent credentials for JWT",
156
+ "description": "Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`\n(`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional\n`shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.\n\nWhen **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object\nmirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).\n**Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the\nglobal inspection pipeline so per-agent limits and threat **block** actions apply without a\nseparate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT\nis fresh.\n\nUser JWTs from password, API key, or device flow do **not** include `shroud_config`.\n",
156
157
  "operationId": "agentToken",
157
158
  "security": [],
158
159
  "requestBody": {
@@ -2893,7 +2894,7 @@
2893
2894
  ],
2894
2895
  "summary": "Get LLM token billing status",
2895
2896
  "operationId": "getLlmTokenBilling",
2896
- "description": "Returns whether LLM token billing is enabled for the caller's org.",
2897
+ "description": "Returns whether LLM token billing is enabled, optional Stripe billing credit balance (metered scope), and estimated cycle usage from the upcoming invoice—including per-line metered rows when Stripe returns them (amounts; quantities such as tokens when present).\n",
2897
2898
  "responses": {
2898
2899
  "200": {
2899
2900
  "description": "LLM token billing status",
@@ -4026,6 +4027,112 @@
4026
4027
  }
4027
4028
  }
4028
4029
  }
4030
+ },
4031
+ "/v1/shroud/activity": {
4032
+ "get": {
4033
+ "tags": [
4034
+ "Shroud"
4035
+ ],
4036
+ "summary": "List Shroud activity events",
4037
+ "description": "Returns recent Shroud proxy activity for the organization (LLM requests, inspections, policy actions).",
4038
+ "security": [
4039
+ {
4040
+ "BearerAuth": []
4041
+ }
4042
+ ],
4043
+ "parameters": [
4044
+ {
4045
+ "in": "query",
4046
+ "name": "agent_id",
4047
+ "schema": {
4048
+ "type": "string"
4049
+ },
4050
+ "description": "Filter by agent ID"
4051
+ },
4052
+ {
4053
+ "in": "query",
4054
+ "name": "action",
4055
+ "schema": {
4056
+ "type": "string"
4057
+ },
4058
+ "description": "Filter by action (allowed, blocked, warned)"
4059
+ },
4060
+ {
4061
+ "in": "query",
4062
+ "name": "limit",
4063
+ "schema": {
4064
+ "type": "integer",
4065
+ "default": 50
4066
+ },
4067
+ "description": "Maximum events to return"
4068
+ },
4069
+ {
4070
+ "in": "query",
4071
+ "name": "offset",
4072
+ "schema": {
4073
+ "type": "integer",
4074
+ "default": 0
4075
+ },
4076
+ "description": "Pagination offset"
4077
+ }
4078
+ ],
4079
+ "responses": {
4080
+ "200": {
4081
+ "description": "Activity events",
4082
+ "content": {
4083
+ "application/json": {
4084
+ "schema": {
4085
+ "type": "object",
4086
+ "properties": {
4087
+ "events": {
4088
+ "type": "array",
4089
+ "items": {
4090
+ "$ref": "#/components/schemas/ShroudActivityEvent"
4091
+ }
4092
+ },
4093
+ "total": {
4094
+ "type": "integer"
4095
+ }
4096
+ }
4097
+ }
4098
+ }
4099
+ }
4100
+ },
4101
+ "401": {
4102
+ "description": "Unauthorized"
4103
+ }
4104
+ }
4105
+ },
4106
+ "post": {
4107
+ "tags": [
4108
+ "Shroud"
4109
+ ],
4110
+ "summary": "Ingest Shroud activity event (internal)",
4111
+ "description": "Called by the Shroud proxy to record activity events. Not intended for external use.",
4112
+ "security": [
4113
+ {
4114
+ "BearerAuth": []
4115
+ }
4116
+ ],
4117
+ "requestBody": {
4118
+ "required": true,
4119
+ "content": {
4120
+ "application/json": {
4121
+ "schema": {
4122
+ "$ref": "#/components/schemas/IngestShroudActivityRequest"
4123
+ }
4124
+ }
4125
+ }
4126
+ },
4127
+ "responses": {
4128
+ "201": {
4129
+ "description": "Event recorded"
4130
+ },
4131
+ "401": {
4132
+ "description": "Unauthorized"
4133
+ }
4134
+ }
4135
+ }
4029
4136
  }
4030
4137
  },
4031
4138
  "components": {
@@ -5614,6 +5721,27 @@
5614
5721
  "type": "boolean",
5615
5722
  "default": true,
5616
5723
  "description": "Whether to log all detected threats to audit (even when action is allow/warn)"
5724
+ },
5725
+ "tool_call_inspection": {
5726
+ "$ref": "#/components/schemas/ToolCallPolicy"
5727
+ },
5728
+ "output_policy": {
5729
+ "$ref": "#/components/schemas/OutputPolicy"
5730
+ },
5731
+ "secret_injection_detection": {
5732
+ "$ref": "#/components/schemas/SecretInjectionConfig"
5733
+ },
5734
+ "advanced_redaction": {
5735
+ "$ref": "#/components/schemas/AdvancedRedactionConfig"
5736
+ },
5737
+ "semantic_policy": {
5738
+ "$ref": "#/components/schemas/SemanticPolicy"
5739
+ },
5740
+ "flagged_request_retention_days": {
5741
+ "type": "integer",
5742
+ "minimum": 0,
5743
+ "maximum": 365,
5744
+ "description": "Number of days to retain flagged request bodies for replay/investigation"
5617
5745
  }
5618
5746
  }
5619
5747
  },
@@ -5820,6 +5948,221 @@
5820
5948
  }
5821
5949
  }
5822
5950
  },
5951
+ "ToolCallPolicy": {
5952
+ "type": "object",
5953
+ "description": "Tool/function call inspection settings",
5954
+ "properties": {
5955
+ "enabled": {
5956
+ "type": "boolean",
5957
+ "default": false,
5958
+ "description": "Enable tool call inspection"
5959
+ },
5960
+ "allowed_tool_names": {
5961
+ "type": "array",
5962
+ "items": {
5963
+ "type": "string"
5964
+ },
5965
+ "description": "Allowed tool/function names (empty = all allowed)"
5966
+ },
5967
+ "denied_tool_names": {
5968
+ "type": "array",
5969
+ "items": {
5970
+ "type": "string"
5971
+ },
5972
+ "description": "Denied tool/function names"
5973
+ },
5974
+ "scan_arguments": {
5975
+ "type": "boolean",
5976
+ "default": true,
5977
+ "description": "Scan tool call arguments for credential exfiltration"
5978
+ },
5979
+ "block_credential_exfil": {
5980
+ "type": "boolean",
5981
+ "default": true,
5982
+ "description": "Block tool calls that appear to exfiltrate credentials"
5983
+ },
5984
+ "action": {
5985
+ "type": "string",
5986
+ "enum": [
5987
+ "block",
5988
+ "sanitize",
5989
+ "warn",
5990
+ "log"
5991
+ ],
5992
+ "default": "block",
5993
+ "description": "Action when a tool call violation is detected"
5994
+ }
5995
+ }
5996
+ },
5997
+ "OutputPolicy": {
5998
+ "type": "object",
5999
+ "description": "Output content policy settings for LLM responses",
6000
+ "properties": {
6001
+ "enabled": {
6002
+ "type": "boolean",
6003
+ "default": false,
6004
+ "description": "Enable output content policies"
6005
+ },
6006
+ "blocked_patterns": {
6007
+ "type": "array",
6008
+ "items": {
6009
+ "type": "string"
6010
+ },
6011
+ "description": "Custom regex patterns to block in responses"
6012
+ },
6013
+ "blocked_entities": {
6014
+ "type": "array",
6015
+ "items": {
6016
+ "type": "string"
6017
+ },
6018
+ "description": "Named entities to block (e.g., competitor names)"
6019
+ },
6020
+ "block_harmful_content": {
6021
+ "type": "boolean",
6022
+ "default": false,
6023
+ "description": "Block responses containing harmful content categories"
6024
+ },
6025
+ "harmful_categories": {
6026
+ "type": "array",
6027
+ "items": {
6028
+ "type": "string",
6029
+ "enum": [
6030
+ "violence",
6031
+ "self_harm",
6032
+ "illegal",
6033
+ "hate",
6034
+ "sexual",
6035
+ "malware"
6036
+ ]
6037
+ },
6038
+ "description": "Harm categories to block"
6039
+ },
6040
+ "action": {
6041
+ "type": "string",
6042
+ "enum": [
6043
+ "block",
6044
+ "sanitize",
6045
+ "warn",
6046
+ "log"
6047
+ ],
6048
+ "default": "warn",
6049
+ "description": "Action when output policy is violated"
6050
+ }
6051
+ }
6052
+ },
6053
+ "SecretInjectionConfig": {
6054
+ "type": "object",
6055
+ "description": "Detects credentials injected into prompts that are not from the vault",
6056
+ "properties": {
6057
+ "enabled": {
6058
+ "type": "boolean",
6059
+ "default": false,
6060
+ "description": "Enable secret injection detection"
6061
+ },
6062
+ "action": {
6063
+ "type": "string",
6064
+ "enum": [
6065
+ "block",
6066
+ "sanitize",
6067
+ "warn",
6068
+ "log"
6069
+ ],
6070
+ "default": "block",
6071
+ "description": "Action when injected credentials are detected"
6072
+ },
6073
+ "sensitivity": {
6074
+ "type": "string",
6075
+ "enum": [
6076
+ "low",
6077
+ "medium",
6078
+ "high"
6079
+ ],
6080
+ "default": "medium",
6081
+ "description": "Detection sensitivity level"
6082
+ }
6083
+ }
6084
+ },
6085
+ "AdvancedRedactionConfig": {
6086
+ "type": "object",
6087
+ "description": "Advanced secret redaction settings (base64-encoded, split, prefix leaks)",
6088
+ "properties": {
6089
+ "enabled": {
6090
+ "type": "boolean",
6091
+ "default": false,
6092
+ "description": "Enable advanced redaction checks"
6093
+ },
6094
+ "detect_base64_encoded": {
6095
+ "type": "boolean",
6096
+ "default": false,
6097
+ "description": "Detect base64-encoded vault secrets"
6098
+ },
6099
+ "detect_split_secrets": {
6100
+ "type": "boolean",
6101
+ "default": false,
6102
+ "description": "Detect secrets split across tokens or messages"
6103
+ },
6104
+ "detect_prefix_leak": {
6105
+ "type": "boolean",
6106
+ "default": false,
6107
+ "description": "Detect partial/prefix leaks of vault secrets"
6108
+ },
6109
+ "min_secret_length": {
6110
+ "type": "integer",
6111
+ "default": 16,
6112
+ "description": "Minimum secret length to consider for advanced matching"
6113
+ }
6114
+ }
6115
+ },
6116
+ "SemanticPolicy": {
6117
+ "type": "object",
6118
+ "description": "Semantic/intent-level policy enforcement",
6119
+ "properties": {
6120
+ "enabled": {
6121
+ "type": "boolean",
6122
+ "default": false,
6123
+ "description": "Enable semantic policy enforcement"
6124
+ },
6125
+ "allowed_topics": {
6126
+ "type": "array",
6127
+ "items": {
6128
+ "type": "string"
6129
+ },
6130
+ "description": "Topics the agent is allowed to discuss (empty = all)"
6131
+ },
6132
+ "denied_topics": {
6133
+ "type": "array",
6134
+ "items": {
6135
+ "type": "string"
6136
+ },
6137
+ "description": "Topics to block"
6138
+ },
6139
+ "allowed_tasks": {
6140
+ "type": "array",
6141
+ "items": {
6142
+ "type": "string"
6143
+ },
6144
+ "description": "Tasks the agent is allowed to perform (empty = all)"
6145
+ },
6146
+ "denied_tasks": {
6147
+ "type": "array",
6148
+ "items": {
6149
+ "type": "string"
6150
+ },
6151
+ "description": "Tasks to block (e.g., code_generation, data_export)"
6152
+ },
6153
+ "action": {
6154
+ "type": "string",
6155
+ "enum": [
6156
+ "block",
6157
+ "sanitize",
6158
+ "warn",
6159
+ "log"
6160
+ ],
6161
+ "default": "warn",
6162
+ "description": "Action when semantic policy is violated"
6163
+ }
6164
+ }
6165
+ },
5823
6166
  "AgentCreatedResponse": {
5824
6167
  "type": "object",
5825
6168
  "required": [
@@ -6777,8 +7120,83 @@
6777
7120
  }
6778
7121
  }
6779
7122
  },
7123
+ "LlmMeteredInvoiceLine": {
7124
+ "type": "object",
7125
+ "description": "Metered line from Stripe upcoming invoice (usage detail when available).",
7126
+ "properties": {
7127
+ "description": {
7128
+ "type": "string",
7129
+ "nullable": true
7130
+ },
7131
+ "amount_cents": {
7132
+ "type": "integer",
7133
+ "format": "int64"
7134
+ },
7135
+ "quantity": {
7136
+ "type": "number",
7137
+ "nullable": true,
7138
+ "description": "Billed usage units when Stripe returns quantity (e.g. tokens)."
7139
+ },
7140
+ "price_nickname": {
7141
+ "type": "string",
7142
+ "nullable": true
7143
+ }
7144
+ }
7145
+ },
7146
+ "LlmBillingCycleUsage": {
7147
+ "type": "object",
7148
+ "description": "Accrued LLM charges for the current Stripe subscription period (upcoming invoice).",
7149
+ "properties": {
7150
+ "period_start": {
7151
+ "type": "string",
7152
+ "format": "date-time",
7153
+ "nullable": true
7154
+ },
7155
+ "period_end": {
7156
+ "type": "string",
7157
+ "format": "date-time",
7158
+ "nullable": true
7159
+ },
7160
+ "accrued_usage_cents": {
7161
+ "type": "integer",
7162
+ "format": "int64"
7163
+ },
7164
+ "currency": {
7165
+ "type": "string"
7166
+ },
7167
+ "metered_lines": {
7168
+ "type": "array",
7169
+ "items": {
7170
+ "$ref": "#/components/schemas/LlmMeteredInvoiceLine"
7171
+ }
7172
+ }
7173
+ }
7174
+ },
7175
+ "LlmCreditBalance": {
7176
+ "type": "object",
7177
+ "properties": {
7178
+ "available_cents": {
7179
+ "type": "integer",
7180
+ "format": "int64"
7181
+ },
7182
+ "ledger_cents": {
7183
+ "type": "integer",
7184
+ "format": "int64"
7185
+ },
7186
+ "used_cents": {
7187
+ "type": "integer",
7188
+ "format": "int64"
7189
+ },
7190
+ "currency": {
7191
+ "type": "string"
7192
+ }
7193
+ }
7194
+ },
6780
7195
  "LlmTokenBillingStatus": {
6781
7196
  "type": "object",
7197
+ "required": [
7198
+ "enabled"
7199
+ ],
6782
7200
  "properties": {
6783
7201
  "enabled": {
6784
7202
  "type": "boolean"
@@ -6789,6 +7207,12 @@
6789
7207
  "active",
6790
7208
  "inactive"
6791
7209
  ]
7210
+ },
7211
+ "credit_balance": {
7212
+ "$ref": "#/components/schemas/LlmCreditBalance"
7213
+ },
7214
+ "billing_cycle_usage": {
7215
+ "$ref": "#/components/schemas/LlmBillingCycleUsage"
6792
7216
  }
6793
7217
  }
6794
7218
  },
@@ -7400,6 +7824,116 @@
7400
7824
  }
7401
7825
  }
7402
7826
  },
7827
+ "ShroudActivityEvent": {
7828
+ "type": "object",
7829
+ "properties": {
7830
+ "id": {
7831
+ "type": "string",
7832
+ "format": "uuid"
7833
+ },
7834
+ "org_id": {
7835
+ "type": "string",
7836
+ "format": "uuid"
7837
+ },
7838
+ "agent_id": {
7839
+ "type": "string"
7840
+ },
7841
+ "provider": {
7842
+ "type": "string"
7843
+ },
7844
+ "model": {
7845
+ "type": "string"
7846
+ },
7847
+ "action": {
7848
+ "type": "string",
7849
+ "description": "Action taken (allowed, blocked, warned)"
7850
+ },
7851
+ "request_tokens": {
7852
+ "type": "integer"
7853
+ },
7854
+ "response_tokens": {
7855
+ "type": "integer"
7856
+ },
7857
+ "latency_ms": {
7858
+ "type": "integer"
7859
+ },
7860
+ "had_secrets_redacted": {
7861
+ "type": "boolean"
7862
+ },
7863
+ "had_pii_detected": {
7864
+ "type": "boolean"
7865
+ },
7866
+ "injection_score": {
7867
+ "type": "number"
7868
+ },
7869
+ "policy_violations": {
7870
+ "type": "array",
7871
+ "items": {
7872
+ "type": "string"
7873
+ }
7874
+ },
7875
+ "metadata": {
7876
+ "type": "object"
7877
+ },
7878
+ "timestamp": {
7879
+ "type": "string",
7880
+ "format": "date-time"
7881
+ }
7882
+ }
7883
+ },
7884
+ "IngestShroudActivityRequest": {
7885
+ "type": "object",
7886
+ "required": [
7887
+ "agent_id",
7888
+ "action"
7889
+ ],
7890
+ "properties": {
7891
+ "agent_id": {
7892
+ "type": "string"
7893
+ },
7894
+ "provider": {
7895
+ "type": "string"
7896
+ },
7897
+ "model": {
7898
+ "type": "string"
7899
+ },
7900
+ "action": {
7901
+ "type": "string"
7902
+ },
7903
+ "request_tokens": {
7904
+ "type": "integer",
7905
+ "default": 0
7906
+ },
7907
+ "response_tokens": {
7908
+ "type": "integer",
7909
+ "default": 0
7910
+ },
7911
+ "latency_ms": {
7912
+ "type": "integer"
7913
+ },
7914
+ "had_secrets_redacted": {
7915
+ "type": "boolean",
7916
+ "default": false
7917
+ },
7918
+ "had_pii_detected": {
7919
+ "type": "boolean",
7920
+ "default": false
7921
+ },
7922
+ "injection_score": {
7923
+ "type": "number",
7924
+ "default": 0
7925
+ },
7926
+ "policy_violations": {
7927
+ "type": "array",
7928
+ "items": {
7929
+ "type": "string"
7930
+ }
7931
+ },
7932
+ "metadata": {
7933
+ "type": "object"
7934
+ }
7935
+ }
7936
+ },
7403
7937
  "HealthResponse": {
7404
7938
  "type": "object",
7405
7939
  "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: 2.6.0
5
+ version: 2.7.0
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -105,6 +105,19 @@ paths:
105
105
  post:
106
106
  tags: [Authentication]
107
107
  summary: Exchange agent credentials for JWT
108
+ description: |
109
+ Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`
110
+ (`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional
111
+ `shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.
112
+
113
+ When **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object
114
+ mirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).
115
+ **Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the
116
+ global inspection pipeline so per-agent limits and threat **block** actions apply without a
117
+ separate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT
118
+ is fresh.
119
+
120
+ User JWTs from password, API key, or device flow do **not** include `shroud_config`.
108
121
  operationId: agentToken
109
122
  security: []
110
123
  requestBody:
@@ -1854,7 +1867,10 @@ paths:
1854
1867
  tags: [Billing]
1855
1868
  summary: Get LLM token billing status
1856
1869
  operationId: getLlmTokenBilling
1857
- description: Returns whether LLM token billing is enabled for the caller's org.
1870
+ description: >
1871
+ Returns whether LLM token billing is enabled, optional Stripe billing credit balance
1872
+ (metered scope), and estimated cycle usage from the upcoming invoice—including per-line
1873
+ metered rows when Stripe returns them (amounts; quantities such as tokens when present).
1858
1874
  responses:
1859
1875
  "200":
1860
1876
  description: LLM token billing status
@@ -2581,6 +2597,72 @@ paths:
2581
2597
  type: string
2582
2598
  enum: [ok, degraded, unavailable]
2583
2599
 
2600
+ # --- Shroud Activity ---
2601
+
2602
+ /v1/shroud/activity:
2603
+ get:
2604
+ tags: [Shroud]
2605
+ summary: List Shroud activity events
2606
+ description: Returns recent Shroud proxy activity for the organization (LLM requests, inspections, policy actions).
2607
+ security:
2608
+ - BearerAuth: []
2609
+ parameters:
2610
+ - in: query
2611
+ name: agent_id
2612
+ schema:
2613
+ type: string
2614
+ description: Filter by agent ID
2615
+ - in: query
2616
+ name: action
2617
+ schema:
2618
+ type: string
2619
+ description: Filter by action (allowed, blocked, warned)
2620
+ - in: query
2621
+ name: limit
2622
+ schema:
2623
+ type: integer
2624
+ default: 50
2625
+ description: Maximum events to return
2626
+ - in: query
2627
+ name: offset
2628
+ schema:
2629
+ type: integer
2630
+ default: 0
2631
+ description: Pagination offset
2632
+ responses:
2633
+ "200":
2634
+ description: Activity events
2635
+ content:
2636
+ application/json:
2637
+ schema:
2638
+ type: object
2639
+ properties:
2640
+ events:
2641
+ type: array
2642
+ items:
2643
+ $ref: "#/components/schemas/ShroudActivityEvent"
2644
+ total:
2645
+ type: integer
2646
+ "401":
2647
+ description: Unauthorized
2648
+ post:
2649
+ tags: [Shroud]
2650
+ summary: Ingest Shroud activity event (internal)
2651
+ description: Called by the Shroud proxy to record activity events. Not intended for external use.
2652
+ security:
2653
+ - BearerAuth: []
2654
+ requestBody:
2655
+ required: true
2656
+ content:
2657
+ application/json:
2658
+ schema:
2659
+ $ref: "#/components/schemas/IngestShroudActivityRequest"
2660
+ responses:
2661
+ "201":
2662
+ description: Event recorded
2663
+ "401":
2664
+ description: Unauthorized
2665
+
2584
2666
  # =============================================================================
2585
2667
  # COMPONENTS
2586
2668
  # =============================================================================
@@ -3699,6 +3781,21 @@ components:
3699
3781
  type: boolean
3700
3782
  default: true
3701
3783
  description: Whether to log all detected threats to audit (even when action is allow/warn)
3784
+ tool_call_inspection:
3785
+ $ref: "#/components/schemas/ToolCallPolicy"
3786
+ output_policy:
3787
+ $ref: "#/components/schemas/OutputPolicy"
3788
+ secret_injection_detection:
3789
+ $ref: "#/components/schemas/SecretInjectionConfig"
3790
+ advanced_redaction:
3791
+ $ref: "#/components/schemas/AdvancedRedactionConfig"
3792
+ semantic_policy:
3793
+ $ref: "#/components/schemas/SemanticPolicy"
3794
+ flagged_request_retention_days:
3795
+ type: integer
3796
+ minimum: 0
3797
+ maximum: 365
3798
+ description: Number of days to retain flagged request bodies for replay/investigation
3702
3799
 
3703
3800
  UnicodeNormalizationConfig:
3704
3801
  type: object
@@ -3834,6 +3931,150 @@ components:
3834
3931
  type: string
3835
3932
  description: Path patterns to block (e.g., /etc/passwd, ~/.ssh)
3836
3933
 
3934
+ ToolCallPolicy:
3935
+ type: object
3936
+ description: Tool/function call inspection settings
3937
+ properties:
3938
+ enabled:
3939
+ type: boolean
3940
+ default: false
3941
+ description: Enable tool call inspection
3942
+ allowed_tool_names:
3943
+ type: array
3944
+ items:
3945
+ type: string
3946
+ description: Allowed tool/function names (empty = all allowed)
3947
+ denied_tool_names:
3948
+ type: array
3949
+ items:
3950
+ type: string
3951
+ description: Denied tool/function names
3952
+ scan_arguments:
3953
+ type: boolean
3954
+ default: true
3955
+ description: Scan tool call arguments for credential exfiltration
3956
+ block_credential_exfil:
3957
+ type: boolean
3958
+ default: true
3959
+ description: Block tool calls that appear to exfiltrate credentials
3960
+ action:
3961
+ type: string
3962
+ enum: [block, sanitize, warn, log]
3963
+ default: block
3964
+ description: Action when a tool call violation is detected
3965
+
3966
+ OutputPolicy:
3967
+ type: object
3968
+ description: Output content policy settings for LLM responses
3969
+ properties:
3970
+ enabled:
3971
+ type: boolean
3972
+ default: false
3973
+ description: Enable output content policies
3974
+ blocked_patterns:
3975
+ type: array
3976
+ items:
3977
+ type: string
3978
+ description: Custom regex patterns to block in responses
3979
+ blocked_entities:
3980
+ type: array
3981
+ items:
3982
+ type: string
3983
+ description: Named entities to block (e.g., competitor names)
3984
+ block_harmful_content:
3985
+ type: boolean
3986
+ default: false
3987
+ description: Block responses containing harmful content categories
3988
+ harmful_categories:
3989
+ type: array
3990
+ items:
3991
+ type: string
3992
+ enum: [violence, self_harm, illegal, hate, sexual, malware]
3993
+ description: Harm categories to block
3994
+ action:
3995
+ type: string
3996
+ enum: [block, sanitize, warn, log]
3997
+ default: warn
3998
+ description: Action when output policy is violated
3999
+
4000
+ SecretInjectionConfig:
4001
+ type: object
4002
+ description: Detects credentials injected into prompts that are not from the vault
4003
+ properties:
4004
+ enabled:
4005
+ type: boolean
4006
+ default: false
4007
+ description: Enable secret injection detection
4008
+ action:
4009
+ type: string
4010
+ enum: [block, sanitize, warn, log]
4011
+ default: block
4012
+ description: Action when injected credentials are detected
4013
+ sensitivity:
4014
+ type: string
4015
+ enum: [low, medium, high]
4016
+ default: medium
4017
+ description: Detection sensitivity level
4018
+
4019
+ AdvancedRedactionConfig:
4020
+ type: object
4021
+ description: Advanced secret redaction settings (base64-encoded, split, prefix leaks)
4022
+ properties:
4023
+ enabled:
4024
+ type: boolean
4025
+ default: false
4026
+ description: Enable advanced redaction checks
4027
+ detect_base64_encoded:
4028
+ type: boolean
4029
+ default: false
4030
+ description: Detect base64-encoded vault secrets
4031
+ detect_split_secrets:
4032
+ type: boolean
4033
+ default: false
4034
+ description: Detect secrets split across tokens or messages
4035
+ detect_prefix_leak:
4036
+ type: boolean
4037
+ default: false
4038
+ description: Detect partial/prefix leaks of vault secrets
4039
+ min_secret_length:
4040
+ type: integer
4041
+ default: 16
4042
+ description: Minimum secret length to consider for advanced matching
4043
+
4044
+ SemanticPolicy:
4045
+ type: object
4046
+ description: Semantic/intent-level policy enforcement
4047
+ properties:
4048
+ enabled:
4049
+ type: boolean
4050
+ default: false
4051
+ description: Enable semantic policy enforcement
4052
+ allowed_topics:
4053
+ type: array
4054
+ items:
4055
+ type: string
4056
+ description: Topics the agent is allowed to discuss (empty = all)
4057
+ denied_topics:
4058
+ type: array
4059
+ items:
4060
+ type: string
4061
+ description: Topics to block
4062
+ allowed_tasks:
4063
+ type: array
4064
+ items:
4065
+ type: string
4066
+ description: Tasks the agent is allowed to perform (empty = all)
4067
+ denied_tasks:
4068
+ type: array
4069
+ items:
4070
+ type: string
4071
+ description: Tasks to block (e.g., code_generation, data_export)
4072
+ action:
4073
+ type: string
4074
+ enum: [block, sanitize, warn, log]
4075
+ default: warn
4076
+ description: Action when semantic policy is violated
4077
+
3837
4078
  AgentCreatedResponse:
3838
4079
  type: object
3839
4080
  required: [agent]
@@ -4487,14 +4728,74 @@ components:
4487
4728
  limit:
4488
4729
  type: integer
4489
4730
 
4731
+ LlmMeteredInvoiceLine:
4732
+ type: object
4733
+ description: Metered line from Stripe upcoming invoice (usage detail when available).
4734
+ properties:
4735
+ description:
4736
+ type: string
4737
+ nullable: true
4738
+ amount_cents:
4739
+ type: integer
4740
+ format: int64
4741
+ quantity:
4742
+ type: number
4743
+ nullable: true
4744
+ description: Billed usage units when Stripe returns quantity (e.g. tokens).
4745
+ price_nickname:
4746
+ type: string
4747
+ nullable: true
4748
+
4749
+ LlmBillingCycleUsage:
4750
+ type: object
4751
+ description: Accrued LLM charges for the current Stripe subscription period (upcoming invoice).
4752
+ properties:
4753
+ period_start:
4754
+ type: string
4755
+ format: date-time
4756
+ nullable: true
4757
+ period_end:
4758
+ type: string
4759
+ format: date-time
4760
+ nullable: true
4761
+ accrued_usage_cents:
4762
+ type: integer
4763
+ format: int64
4764
+ currency:
4765
+ type: string
4766
+ metered_lines:
4767
+ type: array
4768
+ items:
4769
+ $ref: "#/components/schemas/LlmMeteredInvoiceLine"
4770
+
4771
+ LlmCreditBalance:
4772
+ type: object
4773
+ properties:
4774
+ available_cents:
4775
+ type: integer
4776
+ format: int64
4777
+ ledger_cents:
4778
+ type: integer
4779
+ format: int64
4780
+ used_cents:
4781
+ type: integer
4782
+ format: int64
4783
+ currency:
4784
+ type: string
4785
+
4490
4786
  LlmTokenBillingStatus:
4491
4787
  type: object
4788
+ required: [enabled]
4492
4789
  properties:
4493
4790
  enabled:
4494
4791
  type: boolean
4495
4792
  subscription_status:
4496
4793
  type: string
4497
4794
  enum: [active, inactive]
4795
+ credit_balance:
4796
+ $ref: "#/components/schemas/LlmCreditBalance"
4797
+ billing_cycle_usage:
4798
+ $ref: "#/components/schemas/LlmBillingCycleUsage"
4498
4799
 
4499
4800
  LlmCheckoutResponse:
4500
4801
  type: object
@@ -4919,6 +5220,84 @@ components:
4919
5220
  description:
4920
5221
  type: string
4921
5222
 
5223
+ # --- Shroud Activity ---
5224
+
5225
+ ShroudActivityEvent:
5226
+ type: object
5227
+ properties:
5228
+ id:
5229
+ type: string
5230
+ format: uuid
5231
+ org_id:
5232
+ type: string
5233
+ format: uuid
5234
+ agent_id:
5235
+ type: string
5236
+ provider:
5237
+ type: string
5238
+ model:
5239
+ type: string
5240
+ action:
5241
+ type: string
5242
+ description: Action taken (allowed, blocked, warned)
5243
+ request_tokens:
5244
+ type: integer
5245
+ response_tokens:
5246
+ type: integer
5247
+ latency_ms:
5248
+ type: integer
5249
+ had_secrets_redacted:
5250
+ type: boolean
5251
+ had_pii_detected:
5252
+ type: boolean
5253
+ injection_score:
5254
+ type: number
5255
+ policy_violations:
5256
+ type: array
5257
+ items:
5258
+ type: string
5259
+ metadata:
5260
+ type: object
5261
+ timestamp:
5262
+ type: string
5263
+ format: date-time
5264
+
5265
+ IngestShroudActivityRequest:
5266
+ type: object
5267
+ required: [agent_id, action]
5268
+ properties:
5269
+ agent_id:
5270
+ type: string
5271
+ provider:
5272
+ type: string
5273
+ model:
5274
+ type: string
5275
+ action:
5276
+ type: string
5277
+ request_tokens:
5278
+ type: integer
5279
+ default: 0
5280
+ response_tokens:
5281
+ type: integer
5282
+ default: 0
5283
+ latency_ms:
5284
+ type: integer
5285
+ had_secrets_redacted:
5286
+ type: boolean
5287
+ default: false
5288
+ had_pii_detected:
5289
+ type: boolean
5290
+ default: false
5291
+ injection_score:
5292
+ type: number
5293
+ default: 0
5294
+ policy_violations:
5295
+ type: array
5296
+ items:
5297
+ type: string
5298
+ metadata:
5299
+ type: object
5300
+
4922
5301
  # --- Health ---
4923
5302
 
4924
5303
  HealthResponse:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.16.1",
3
+ "version": "0.17.0",
4
4
  "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API — generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {