@suveren/gateway 0.7.6 → 0.8.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.
Files changed (161) hide show
  1. package/content/integrations/mollie.json +103 -28
  2. package/dist/mcp-server/http.mjs +228 -118
  3. package/dist/ui/assets/{index-CsrM6RQr.js → index-BFnSVa9N.js} +22 -22
  4. package/dist/ui/index.html +1 -1
  5. package/node_modules/@hap/core/dist/index.d.mts +29 -6
  6. package/node_modules/@hap/core/dist/index.d.ts +29 -6
  7. package/node_modules/@hap/core/dist/index.js +54 -8
  8. package/node_modules/@hap/core/dist/index.mjs +53 -8
  9. package/node_modules/@hap/core/package.json +2 -1
  10. package/node_modules/@hap/core/src/frame.ts +115 -14
  11. package/node_modules/@hap/core/src/gatekeeper.ts +26 -0
  12. package/node_modules/@hap/core/src/types.ts +7 -1
  13. package/node_modules/@types/node/README.md +1 -1
  14. package/node_modules/@types/node/buffer.buffer.d.ts +5 -0
  15. package/node_modules/@types/node/crypto.d.ts +0 -2
  16. package/node_modules/@types/node/dgram.d.ts +119 -4
  17. package/node_modules/@types/node/ffi.d.ts +1 -1
  18. package/node_modules/@types/node/fs/promises.d.ts +61 -65
  19. package/node_modules/@types/node/fs.d.ts +86 -76
  20. package/node_modules/@types/node/http.d.ts +1 -1
  21. package/node_modules/@types/node/http2.d.ts +2 -2
  22. package/node_modules/@types/node/index.d.ts +1 -0
  23. package/node_modules/@types/node/inspector.d.ts +2 -1
  24. package/node_modules/@types/node/net.d.ts +108 -16
  25. package/node_modules/@types/node/package.json +2 -2
  26. package/node_modules/@types/node/quic.d.ts +37 -11
  27. package/node_modules/@types/node/stream/iter.d.ts +4 -4
  28. package/node_modules/@types/node/tls.d.ts +24 -0
  29. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  30. package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  31. package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  32. package/node_modules/@types/node/tty.d.ts +4 -3
  33. package/node_modules/@types/node/vfs.d.ts +210 -0
  34. package/node_modules/@types/node/vm.d.ts +1 -1
  35. package/node_modules/express-rate-limit/dist/index.cjs +6 -3
  36. package/node_modules/express-rate-limit/dist/index.d.cts +11 -0
  37. package/node_modules/express-rate-limit/dist/index.d.mts +11 -0
  38. package/node_modules/express-rate-limit/dist/index.d.ts +11 -0
  39. package/node_modules/express-rate-limit/dist/index.mjs +6 -3
  40. package/node_modules/express-rate-limit/{license.md → license} +7 -6
  41. package/node_modules/express-rate-limit/package.json +5 -5
  42. package/node_modules/express-rate-limit/readme.md +1 -0
  43. package/node_modules/fast-uri/index.js +20 -5
  44. package/node_modules/fast-uri/lib/utils.js +8 -1
  45. package/node_modules/fast-uri/package.json +1 -1
  46. package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
  47. package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
  48. package/node_modules/ip-address/README.md +92 -82
  49. package/node_modules/ip-address/dist/common.d.ts +20 -0
  50. package/node_modules/ip-address/dist/common.js +36 -0
  51. package/node_modules/ip-address/dist/common.js.map +1 -1
  52. package/node_modules/ip-address/dist/ipv4.d.ts +50 -0
  53. package/node_modules/ip-address/dist/ipv4.js +75 -0
  54. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  55. package/node_modules/ip-address/dist/ipv6.d.ts +79 -10
  56. package/node_modules/ip-address/dist/ipv6.js +120 -30
  57. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  58. package/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  59. package/node_modules/ip-address/dist/v4/constants.js +40 -1
  60. package/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  61. package/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  62. package/node_modules/ip-address/dist/v6/constants.js +47 -1
  63. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  64. package/node_modules/ip-address/package.json +1 -1
  65. package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
  66. package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +6 -17
  67. package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
  68. package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +11 -34
  69. package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
  70. package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +15 -35
  71. package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -8
  72. package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +5 -5
  73. package/node_modules/jose/dist/types/jwks/local.d.ts +6 -10
  74. package/node_modules/jose/dist/types/jwks/remote.d.ts +13 -24
  75. package/node_modules/jose/dist/types/jws/compact/sign.d.ts +5 -10
  76. package/node_modules/jose/dist/types/jws/compact/verify.d.ts +9 -18
  77. package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +7 -16
  78. package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +9 -18
  79. package/node_modules/jose/dist/types/jws/general/sign.d.ts +11 -21
  80. package/node_modules/jose/dist/types/jws/general/verify.d.ts +9 -18
  81. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
  82. package/node_modules/jose/dist/types/jwt/encrypt.d.ts +6 -13
  83. package/node_modules/jose/dist/types/jwt/sign.d.ts +5 -6
  84. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -14
  85. package/node_modules/jose/dist/types/jwt/verify.d.ts +9 -19
  86. package/node_modules/jose/dist/types/key/export.d.ts +4 -4
  87. package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +6 -8
  88. package/node_modules/jose/dist/types/key/generate_secret.d.ts +4 -11
  89. package/node_modules/jose/dist/types/key/import.d.ts +10 -17
  90. package/node_modules/jose/dist/types/types.d.ts +44 -84
  91. package/node_modules/jose/dist/types/util/base64url.d.ts +2 -2
  92. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +3 -10
  93. package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -4
  94. package/node_modules/jose/dist/types/util/errors.d.ts +26 -53
  95. package/node_modules/jose/dist/webapi/index.js +70 -32
  96. package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +7 -8
  97. package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +42 -48
  98. package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -14
  99. package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -64
  100. package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
  101. package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -169
  102. package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -32
  103. package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -70
  104. package/node_modules/jose/dist/webapi/jwks/local.js +47 -64
  105. package/node_modules/jose/dist/webapi/jwks/remote.js +88 -136
  106. package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -21
  107. package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
  108. package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -31
  109. package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -24
  110. package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -72
  111. package/node_modules/jose/dist/webapi/jws/general/verify.js +45 -69
  112. package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -20
  113. package/node_modules/jose/dist/webapi/jwt/encrypt.js +57 -70
  114. package/node_modules/jose/dist/webapi/jwt/sign.js +17 -16
  115. package/node_modules/jose/dist/webapi/jwt/unsecured.js +32 -40
  116. package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
  117. package/node_modules/jose/dist/webapi/key/export.js +32 -37
  118. package/node_modules/jose/dist/webapi/key/generate_key_pair.js +40 -48
  119. package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -40
  120. package/node_modules/jose/dist/webapi/key/import.js +52 -56
  121. package/node_modules/jose/dist/webapi/lib/asn1.js +130 -169
  122. package/node_modules/jose/dist/webapi/lib/base64.js +18 -20
  123. package/node_modules/jose/dist/webapi/lib/buffer_utils.js +34 -38
  124. package/node_modules/jose/dist/webapi/lib/content_encryption.js +79 -115
  125. package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
  126. package/node_modules/jose/dist/webapi/lib/deflate.js +45 -47
  127. package/node_modules/jose/dist/webapi/lib/helpers.js +40 -37
  128. package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +10 -24
  129. package/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -15
  130. package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +106 -93
  131. package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +207 -230
  132. package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +104 -138
  133. package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +17 -18
  134. package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -16
  135. package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
  136. package/node_modules/jose/dist/webapi/lib/jws_sign.js +50 -75
  137. package/node_modules/jose/dist/webapi/lib/jws_verify.js +80 -125
  138. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +123 -209
  139. package/node_modules/jose/dist/webapi/lib/key.js +84 -136
  140. package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
  141. package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
  142. package/node_modules/jose/dist/webapi/lib/key_management.js +200 -231
  143. package/node_modules/jose/dist/webapi/lib/key_options.js +7 -5
  144. package/node_modules/jose/dist/webapi/lib/options.js +55 -68
  145. package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
  146. package/node_modules/jose/dist/webapi/lib/type_checks.js +26 -29
  147. package/node_modules/jose/dist/webapi/util/base64url.js +26 -35
  148. package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
  149. package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
  150. package/node_modules/jose/dist/webapi/util/errors.js +94 -84
  151. package/node_modules/jose/package.json +17 -81
  152. package/package.json +2 -2
  153. package/profiles/calendar/0.5.profile.json +190 -0
  154. package/profiles/charge/0.5.profile.json +210 -0
  155. package/profiles/customers/0.7.profile.json +157 -0
  156. package/profiles/deploy/0.9.profile.json +176 -0
  157. package/profiles/email/0.6.profile.json +208 -0
  158. package/profiles/index.json +9 -1
  159. package/profiles/publish/0.5.profile.json +186 -0
  160. package/profiles/purchase/0.5.profile.json +231 -0
  161. package/profiles/records/0.5.profile.json +117 -0
@@ -0,0 +1,190 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/calendar@0.5",
3
+ "name": "Calendar",
4
+ "version": "0.5",
5
+ "description": "Calendar authority — governs calendar access: reading, drafting, and booking events",
6
+ "boundsSchema": {
7
+ "actionTypes": [
8
+ "booking",
9
+ "delete"
10
+ ],
11
+ "keyOrder": [
12
+ "profile",
13
+ "booking_daily_max",
14
+ "booking_duration_max",
15
+ "lookahead_days_max"
16
+ ],
17
+ "fields": {
18
+ "profile": {
19
+ "type": "string",
20
+ "required": true
21
+ },
22
+ "booking_daily_max": {
23
+ "type": "number",
24
+ "required": true,
25
+ "displayName": "Daily booking limit",
26
+ "description": "Maximum new events booked per day",
27
+ "unit": "count",
28
+ "boundType": {
29
+ "kind": "cumulative_count",
30
+ "window": "daily"
31
+ },
32
+ "appliesTo": [
33
+ "booking"
34
+ ]
35
+ },
36
+ "booking_duration_max": {
37
+ "type": "number",
38
+ "required": true,
39
+ "displayName": "Max event duration",
40
+ "description": "Maximum duration of a single event",
41
+ "unit": "minutes",
42
+ "boundType": {
43
+ "kind": "per_transaction",
44
+ "of": "duration"
45
+ }
46
+ },
47
+ "lookahead_days_max": {
48
+ "type": "number",
49
+ "required": true,
50
+ "displayName": "Max lookahead",
51
+ "description": "Maximum number of days into the future an event can be booked",
52
+ "unit": "days",
53
+ "boundType": {
54
+ "kind": "per_transaction",
55
+ "of": "lookahead"
56
+ }
57
+ }
58
+ }
59
+ },
60
+ "contextSchema": {
61
+ "keyOrder": [
62
+ "allowed_calendars",
63
+ "allowed_attendees",
64
+ "allowed_domains"
65
+ ],
66
+ "fields": {
67
+ "allowed_calendars": {
68
+ "type": "string",
69
+ "required": false,
70
+ "displayName": "Allowed calendars",
71
+ "description": "Comma-separated list of calendar names the agent may access",
72
+ "constraint": {
73
+ "type": "string",
74
+ "enforceable": [
75
+ "subset"
76
+ ]
77
+ }
78
+ },
79
+ "allowed_attendees": {
80
+ "type": "string",
81
+ "required": false,
82
+ "displayName": "Allowed attendees",
83
+ "format": "email",
84
+ "description": "Comma-separated list of allowed attendee email addresses",
85
+ "constraint": {
86
+ "type": "string",
87
+ "enforceable": [
88
+ "subset"
89
+ ]
90
+ }
91
+ },
92
+ "allowed_domains": {
93
+ "type": "string",
94
+ "required": false,
95
+ "displayName": "Allowed domains",
96
+ "format": "domain",
97
+ "description": "Comma-separated list of allowed attendee domains (e.g. acme.com,partner.org)",
98
+ "constraint": {
99
+ "type": "string",
100
+ "enforceable": [
101
+ "subset"
102
+ ]
103
+ }
104
+ }
105
+ }
106
+ },
107
+ "executionContextSchema": {
108
+ "fields": {
109
+ "duration": {
110
+ "source": "declared",
111
+ "description": "Duration of the event in minutes",
112
+ "required": true,
113
+ "constraint": {
114
+ "type": "number",
115
+ "enforceable": [
116
+ "max"
117
+ ]
118
+ }
119
+ },
120
+ "lookahead": {
121
+ "source": "declared",
122
+ "description": "Days from now the event is scheduled",
123
+ "required": true,
124
+ "constraint": {
125
+ "type": "number",
126
+ "enforceable": [
127
+ "max"
128
+ ]
129
+ }
130
+ },
131
+ "allowed_calendars": {
132
+ "source": "declared",
133
+ "description": "Calendar being used (checked against authorized calendars)",
134
+ "required": false,
135
+ "constraint": {
136
+ "type": "string",
137
+ "enforceable": [
138
+ "subset"
139
+ ]
140
+ }
141
+ },
142
+ "allowed_attendees": {
143
+ "source": "declared",
144
+ "description": "Attendee addresses from this event (checked against authorized attendees)",
145
+ "required": false,
146
+ "constraint": {
147
+ "type": "string",
148
+ "enforceable": [
149
+ "subset"
150
+ ]
151
+ }
152
+ },
153
+ "allowed_domains": {
154
+ "source": "declared",
155
+ "description": "Unique attendee domains from this event (checked against authorized domains)",
156
+ "required": false,
157
+ "constraint": {
158
+ "type": "string",
159
+ "enforceable": [
160
+ "subset"
161
+ ]
162
+ }
163
+ },
164
+ "booking_count_daily": {
165
+ "source": "cumulative",
166
+ "cumulativeField": "_count",
167
+ "window": "daily",
168
+ "description": "Running daily booking count (resolved from execution log)",
169
+ "required": true,
170
+ "constraint": {
171
+ "type": "number",
172
+ "enforceable": [
173
+ "max"
174
+ ]
175
+ }
176
+ }
177
+ }
178
+ },
179
+ "requiredGates": [
180
+ "bounds",
181
+ "intent",
182
+ "commitment",
183
+ "decision_owner"
184
+ ],
185
+ "ttl": {
186
+ "default": 86400,
187
+ "max": 31536000
188
+ },
189
+ "retention_minimum": 7776000
190
+ }
@@ -0,0 +1,210 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/charge@0.5",
3
+ "name": "Charge",
4
+ "version": "0.5",
5
+ "description": "Charge authority — governs charging customers: payments, refunds, subscriptions",
6
+ "boundsSchema": {
7
+ "actionTypes": [
8
+ "charge",
9
+ "subscribe",
10
+ "unclassified"
11
+ ],
12
+ "keyOrder": [
13
+ "profile",
14
+ "amount_max",
15
+ "amount_daily_max",
16
+ "amount_monthly_max",
17
+ "transaction_count_daily_max"
18
+ ],
19
+ "fields": {
20
+ "profile": {
21
+ "type": "string",
22
+ "required": true
23
+ },
24
+ "amount_max": {
25
+ "type": "number",
26
+ "required": true,
27
+ "displayName": "Max per transaction",
28
+ "description": "Maximum monetary amount per transaction in currency units",
29
+ "unit": "currency:EUR",
30
+ "boundType": {
31
+ "kind": "per_transaction",
32
+ "of": "amount"
33
+ }
34
+ },
35
+ "amount_daily_max": {
36
+ "type": "number",
37
+ "required": true,
38
+ "displayName": "Daily charge limit",
39
+ "description": "Maximum cumulative charges per day in currency units",
40
+ "unit": "currency:EUR",
41
+ "boundType": {
42
+ "kind": "cumulative_sum",
43
+ "of": "amount",
44
+ "window": "daily"
45
+ }
46
+ },
47
+ "amount_monthly_max": {
48
+ "type": "number",
49
+ "required": true,
50
+ "displayName": "Monthly charge limit",
51
+ "description": "Maximum cumulative charges per month in currency units",
52
+ "unit": "currency:EUR",
53
+ "boundType": {
54
+ "kind": "cumulative_sum",
55
+ "of": "amount",
56
+ "window": "monthly"
57
+ }
58
+ },
59
+ "transaction_count_daily_max": {
60
+ "type": "number",
61
+ "required": true,
62
+ "displayName": "Daily transaction limit",
63
+ "description": "Maximum number of transactions per day",
64
+ "unit": "count",
65
+ "boundType": {
66
+ "kind": "cumulative_count",
67
+ "window": "daily"
68
+ },
69
+ "appliesTo": [
70
+ "charge",
71
+ "subscribe",
72
+ "unclassified"
73
+ ]
74
+ }
75
+ }
76
+ },
77
+ "contextSchema": {
78
+ "keyOrder": [
79
+ "currency",
80
+ "action_type"
81
+ ],
82
+ "fields": {
83
+ "currency": {
84
+ "type": "string",
85
+ "required": true,
86
+ "displayName": "Currency",
87
+ "description": "Permitted currency code",
88
+ "constraint": {
89
+ "type": "string",
90
+ "enforceable": [
91
+ "enum"
92
+ ]
93
+ },
94
+ "enum": [
95
+ "USD",
96
+ "EUR",
97
+ "GBP",
98
+ "CHF",
99
+ "JPY",
100
+ "CAD",
101
+ "AUD"
102
+ ]
103
+ },
104
+ "action_type": {
105
+ "type": "string",
106
+ "required": true,
107
+ "displayName": "Action type",
108
+ "description": "Authorized financial operation",
109
+ "constraint": {
110
+ "type": "string",
111
+ "enforceable": [
112
+ "enum"
113
+ ]
114
+ },
115
+ "enum": [
116
+ "charge",
117
+ "refund",
118
+ "subscribe"
119
+ ]
120
+ }
121
+ }
122
+ },
123
+ "executionContextSchema": {
124
+ "fields": {
125
+ "action_type": {
126
+ "source": "declared",
127
+ "description": "Financial operation being performed",
128
+ "required": true,
129
+ "constraint": {
130
+ "type": "string",
131
+ "enforceable": [
132
+ "enum"
133
+ ]
134
+ }
135
+ },
136
+ "amount": {
137
+ "source": "declared",
138
+ "description": "Monetary amount in currency units",
139
+ "required": true,
140
+ "constraint": {
141
+ "type": "number",
142
+ "enforceable": [
143
+ "max"
144
+ ]
145
+ }
146
+ },
147
+ "currency": {
148
+ "source": "declared",
149
+ "description": "Currency code",
150
+ "required": true,
151
+ "constraint": {
152
+ "type": "string",
153
+ "enforceable": [
154
+ "enum"
155
+ ]
156
+ }
157
+ },
158
+ "amount_daily": {
159
+ "source": "cumulative",
160
+ "cumulativeField": "amount",
161
+ "window": "daily",
162
+ "description": "Running daily charge total (resolved from execution log)",
163
+ "required": true,
164
+ "constraint": {
165
+ "type": "number",
166
+ "enforceable": [
167
+ "max"
168
+ ]
169
+ }
170
+ },
171
+ "amount_monthly": {
172
+ "source": "cumulative",
173
+ "cumulativeField": "amount",
174
+ "window": "monthly",
175
+ "description": "Running monthly charge total (resolved from execution log)",
176
+ "required": true,
177
+ "constraint": {
178
+ "type": "number",
179
+ "enforceable": [
180
+ "max"
181
+ ]
182
+ }
183
+ },
184
+ "transaction_count_daily": {
185
+ "source": "cumulative",
186
+ "cumulativeField": "_count",
187
+ "window": "daily",
188
+ "description": "Running daily transaction count (resolved from execution log)",
189
+ "required": true,
190
+ "constraint": {
191
+ "type": "number",
192
+ "enforceable": [
193
+ "max"
194
+ ]
195
+ }
196
+ }
197
+ }
198
+ },
199
+ "requiredGates": [
200
+ "bounds",
201
+ "intent",
202
+ "commitment",
203
+ "decision_owner"
204
+ ],
205
+ "ttl": {
206
+ "default": 86400,
207
+ "max": 2592000
208
+ },
209
+ "retention_minimum": 7776000
210
+ }
@@ -0,0 +1,157 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/customers@0.7",
3
+ "name": "Customer Management",
4
+ "version": "0.7",
5
+ "description": "Customer authority — governs CRM operations: contacts, activities, deals, tasks",
6
+ "boundsSchema": {
7
+ "actionTypes": [
8
+ "delete",
9
+ "write"
10
+ ],
11
+ "keyOrder": [
12
+ "profile",
13
+ "read_access",
14
+ "export_access",
15
+ "write_daily_max",
16
+ "delete_daily_max"
17
+ ],
18
+ "fields": {
19
+ "profile": {
20
+ "type": "string",
21
+ "required": true
22
+ },
23
+ "read_access": {
24
+ "type": "string",
25
+ "required": true,
26
+ "displayName": "Read access",
27
+ "description": "Allow the agent to browse contacts, timelines, pipeline and tasks. Bulk export is governed separately by Export access.",
28
+ "boundType": {
29
+ "kind": "enum",
30
+ "values": [
31
+ "unlimited",
32
+ "none"
33
+ ]
34
+ },
35
+ "toolsDescription": "find_contacts, get_timeline, get_pipeline, list_tasks",
36
+ "default": "unlimited"
37
+ },
38
+ "export_access": {
39
+ "type": "string",
40
+ "required": true,
41
+ "displayName": "Export access",
42
+ "description": "Allow the agent to export the ENTIRE CRM in one call. Separate from read access because the risk is different in kind: reading one contact and extracting the whole customer database are not the same decision.",
43
+ "boundType": {
44
+ "kind": "enum",
45
+ "values": [
46
+ "allowed",
47
+ "none"
48
+ ]
49
+ },
50
+ "toolsDescription": "export_crm",
51
+ "default": "none"
52
+ },
53
+ "write_daily_max": {
54
+ "type": "number",
55
+ "required": true,
56
+ "displayName": "Daily write limit",
57
+ "description": "Maximum CRM write operations per day (creates, updates)",
58
+ "unit": "count",
59
+ "boundType": {
60
+ "kind": "cumulative_count",
61
+ "window": "daily"
62
+ },
63
+ "paths": [
64
+ "customers-write"
65
+ ],
66
+ "appliesTo": [
67
+ "write"
68
+ ]
69
+ },
70
+ "delete_daily_max": {
71
+ "type": "number",
72
+ "required": true,
73
+ "displayName": "Daily delete limit",
74
+ "description": "Maximum CRM delete operations per day",
75
+ "unit": "count",
76
+ "boundType": {
77
+ "kind": "cumulative_count",
78
+ "window": "daily"
79
+ },
80
+ "paths": [
81
+ "customers-delete"
82
+ ],
83
+ "appliesTo": [
84
+ "delete"
85
+ ]
86
+ }
87
+ }
88
+ },
89
+ "contextSchema": {
90
+ "keyOrder": [
91
+ "contact_type"
92
+ ],
93
+ "fields": {
94
+ "contact_type": {
95
+ "type": "string",
96
+ "required": true,
97
+ "displayName": "Contact types the agent may create or modify",
98
+ "description": "Contact types the agent may create, update or delete. Does NOT restrict reading — reads are governed by read_access.",
99
+ "enum": [
100
+ "customer",
101
+ "lead",
102
+ "partner",
103
+ "vendor"
104
+ ],
105
+ "constraint": {
106
+ "type": "string",
107
+ "enforceable": [
108
+ "subset"
109
+ ]
110
+ }
111
+ }
112
+ }
113
+ },
114
+ "executionContextSchema": {
115
+ "fields": {
116
+ "contact_type": {
117
+ "source": "declared",
118
+ "description": "Contact type being accessed",
119
+ "required": true,
120
+ "constraint": {
121
+ "type": "string",
122
+ "enforceable": [
123
+ "subset"
124
+ ]
125
+ }
126
+ },
127
+ "write_count_daily": {
128
+ "source": "cumulative",
129
+ "cumulativeField": "_count",
130
+ "window": "daily",
131
+ "description": "Running daily write operation count",
132
+ "required": true,
133
+ "constraint": {
134
+ "type": "number",
135
+ "enforceable": [
136
+ "max"
137
+ ]
138
+ }
139
+ }
140
+ }
141
+ },
142
+ "requiredGates": [
143
+ "bounds",
144
+ "intent",
145
+ "commitment",
146
+ "decision_owner"
147
+ ],
148
+ "ttl": {
149
+ "default": 86400,
150
+ "max": 31536000
151
+ },
152
+ "retention_minimum": 7776000,
153
+ "content_binding": {
154
+ "version": "1",
155
+ "kind": "jcs"
156
+ }
157
+ }