@suveren/gateway 0.2.8 → 0.2.10

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.
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Suveren</title>
7
- <script type="module" crossorigin src="/assets/index-DIC0vtHi.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-D3srGi9r.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-BUgn3e63.css">
9
9
  </head>
10
10
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suveren/gateway",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "Suveren gateway — local agent gateway built in compliance with the Human Agency Protocol (HAP). Runs the UI, control plane, and MCP server in one Node process.",
5
5
  "type": "module",
6
6
  "main": "server.js",
@@ -0,0 +1,209 @@
1
+ # HAP Authority Profiles
2
+
3
+ Authorization templates for the [Human Agency Protocol](https://humanagencyprotocol.org). Each profile defines what an AI agent is allowed to do within a specific domain — the bounds a human sets, and the Gatekeeper enforces.
4
+
5
+ > **Version 0.4** — March 2026
6
+
7
+ ---
8
+
9
+ ## What Profiles Define
10
+
11
+ A profile is a complete authorization schema. It specifies:
12
+
13
+ - **Bounds schema** — the limits a human commits to (e.g., max amount, allowed currencies)
14
+ - **Context schema** — local parameters that stay encrypted (e.g., allowed services, environment)
15
+ - **Execution context** — what the Gatekeeper checks at runtime, including cumulative limits
16
+ - **Execution paths** — governance tiers with required domain owners and TTLs
17
+ - **Gates** — the structured questions a human must answer before authorization
18
+
19
+ Profiles are referenced by ID (e.g., `charge@0.4`) and are immutable once published.
20
+
21
+ ---
22
+
23
+ ## Profiles
24
+
25
+ ### charge — Charge Authority
26
+
27
+ Governs charging customers: payments, refunds, subscriptions.
28
+
29
+ | Bound | Type | Purpose |
30
+ |-------|------|---------|
31
+ | `amount_max` | per-transaction | Maximum monetary amount |
32
+ | `amount_daily_max` | cumulative | Daily charge cap |
33
+ | `amount_monthly_max` | cumulative | Monthly charge cap |
34
+ | `transaction_count_daily_max` | cumulative | Daily transaction limit |
35
+
36
+ | Context | Type | Purpose |
37
+ |---------|------|---------|
38
+ | `currency` | enum | Permitted currencies |
39
+ | `action_type` | enum | charge, refund, subscribe |
40
+
41
+ | Path | Default TTL |
42
+ |------|-------------|
43
+ | `charge-routine` | 24h |
44
+ | `charge-reviewed` | 4h |
45
+
46
+ ---
47
+
48
+ ### purchase — Purchase Authority
49
+
50
+ Governs spending company money: subscriptions, supplies, services, advertising.
51
+
52
+ | Bound | Type | Purpose |
53
+ |-------|------|---------|
54
+ | `spend_max` | per-transaction | Maximum spend amount |
55
+ | `spend_daily_max` | cumulative | Daily spend cap |
56
+ | `spend_monthly_max` | cumulative | Monthly spend cap |
57
+ | `transaction_count_daily_max` | cumulative | Daily transaction limit |
58
+
59
+ | Context | Type | Purpose |
60
+ |---------|------|---------|
61
+ | `currency` | enum | Permitted currencies |
62
+ | `category` | enum | subscription, supply, service, advertising |
63
+ | `allowed_vendors` | subset | Approved vendor names |
64
+
65
+ | Path | Default TTL |
66
+ |------|-------------|
67
+ | `purchase-routine` | 24h |
68
+ | `purchase-reviewed` | 4h |
69
+
70
+ ---
71
+
72
+ ### email — Email Authority
73
+
74
+ Governs sending, drafting, and reading email via Gmail.
75
+
76
+ | Bound | Type | Purpose |
77
+ |-------|------|---------|
78
+ | `recipient_max` | per-email | Maximum recipients |
79
+ | `send_daily_max` | cumulative | Daily send/draft limit |
80
+ | `read_max_age_days` | per-query | Max email age for search |
81
+ | `read_daily_max` | cumulative | Daily read limit |
82
+
83
+ | Context | Type | Purpose |
84
+ |---------|------|---------|
85
+ | `allowed_recipients` | subset | Permitted email addresses |
86
+ | `allowed_domains` | subset | Permitted recipient domains |
87
+
88
+ | Path | Default TTL |
89
+ |------|-------------|
90
+ | `email-draft` | 24h |
91
+ | `email-send` | 4h |
92
+ | `email-read` | 24h |
93
+
94
+ ---
95
+
96
+ ### customers — Customer Management
97
+
98
+ Governs CRM operations: contacts, activities, deals, tasks.
99
+
100
+ | Bound | Type | Purpose |
101
+ |-------|------|---------|
102
+ | `write_daily_max` | cumulative | Daily write operations |
103
+
104
+ | Context | Type | Purpose |
105
+ |---------|------|---------|
106
+ | `contact_type` | subset | customer, lead, partner, vendor |
107
+
108
+ | Path | Default TTL |
109
+ |------|-------------|
110
+ | `customers-read` | 24h |
111
+ | `customers-write` | 8h |
112
+ | `customers-delete` | 2h |
113
+
114
+ ---
115
+
116
+ ### schedule — Scheduling Authority
117
+
118
+ Governs calendar access: reading, drafting, and booking events.
119
+
120
+ | Bound | Type | Purpose |
121
+ |-------|------|---------|
122
+ | `booking_daily_max` | cumulative | Daily new bookings |
123
+ | `booking_duration_max` | per-event | Max event duration (minutes) |
124
+ | `lookahead_days_max` | per-event | Max days into the future |
125
+
126
+ | Context | Type | Purpose |
127
+ |---------|------|---------|
128
+ | `allowed_calendars` | subset | Permitted calendar names |
129
+ | `allowed_attendees` | subset | Permitted attendee emails |
130
+ | `allowed_domains` | subset | Permitted attendee domains |
131
+
132
+ | Path | Default TTL |
133
+ |------|-------------|
134
+ | `schedule-read` | 24h |
135
+ | `schedule-draft` | 24h |
136
+ | `schedule-book` | 4h |
137
+
138
+ ---
139
+
140
+ ### publish — Content Publishing
141
+
142
+ Governs posting public content to social media, blogs, and other platforms.
143
+
144
+ | Bound | Type | Purpose |
145
+ |-------|------|---------|
146
+ | `post_daily_max` | cumulative | Daily post limit |
147
+ | `post_monthly_max` | cumulative | Monthly post limit |
148
+
149
+ | Context | Type | Purpose |
150
+ |---------|------|---------|
151
+ | `allowed_platforms` | subset | twitter, linkedin, instagram, blog, medium |
152
+ | `content_type` | enum | text, image, link, thread |
153
+ | `audience` | enum | public, followers, connections |
154
+
155
+ | Path | Default TTL |
156
+ |------|-------------|
157
+ | `publish-draft` | 24h |
158
+ | `publish-post` | 4h |
159
+
160
+ ---
161
+
162
+ ### records — Records Authority
163
+
164
+ Governs accessing and modifying personal structured data: queries, schema changes, exports. Renamed from `data` — for personal databases and spreadsheet replacements, not shared CRM data.
165
+
166
+ | Bound | Type | Purpose |
167
+ |-------|------|---------|
168
+ | `row_limit_max` | per-query | Maximum rows returned |
169
+ | `query_count_daily_max` | cumulative | Daily query limit |
170
+ | `export_row_count_daily_max` | cumulative | Daily exported row limit |
171
+
172
+ | Context | Type | Purpose |
173
+ |---------|------|---------|
174
+ | `access_level` | enum | read, write, admin |
175
+ | `data_scope` | enum | public, internal, pii |
176
+ | `scope` | enum | external (production), internal (sandbox) |
177
+
178
+ | Path | Default TTL |
179
+ |------|-------------|
180
+ | `records-read` | 8h |
181
+ | `records-write` | 2h |
182
+ | `records-export` | 1h |
183
+
184
+ ---
185
+
186
+ ## How Profiles Work
187
+
188
+ A human creates an authorization by selecting a profile and execution path, setting the bounds, and answering the gate questions. Domain owners cryptographically attest to the bounds. The Gatekeeper then enforces those bounds on every tool call:
189
+
190
+ ```
191
+ Human sets bounds Agent requests execution Gatekeeper checks
192
+ amount_max: 80 EUR -> amount: 5 EUR -> 5 <= 80, approved
193
+ action_type: [charge] action_type: "charge" "charge" in [charge], approved
194
+ amount_daily_max: 500 amount_daily: 423 (from log) 423 + 5 <= 500, approved
195
+ ```
196
+
197
+ If any bound is exceeded, the Gatekeeper blocks execution.
198
+
199
+ All profiles require the same six gates: bounds, problem, objective, tradeoff, commitment, and decision owner.
200
+
201
+ ---
202
+
203
+ ## Community Profiles
204
+
205
+ Anyone can create and publish profiles through the [HAP Service Provider](https://humanagencyprotocol.com). Published profiles are immutable and versioned. There is no approval process — trust decisions are local.
206
+
207
+ ---
208
+
209
+ See [humanagencyprotocol.org](https://humanagencyprotocol.org) for the full protocol specification.
@@ -0,0 +1,183 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/calendar@0.4",
3
+ "name": "Calendar",
4
+ "version": "0.4",
5
+ "description": "Calendar authority \u2014 governs calendar access: reading, drafting, and booking events",
6
+ "boundsSchema": {
7
+ "keyOrder": [
8
+ "profile",
9
+ "booking_daily_max",
10
+ "booking_duration_max",
11
+ "lookahead_days_max"
12
+ ],
13
+ "fields": {
14
+ "profile": {
15
+ "type": "string",
16
+ "required": true
17
+ },
18
+ "booking_daily_max": {
19
+ "type": "number",
20
+ "required": true,
21
+ "displayName": "Daily booking limit",
22
+ "description": "Maximum new events booked per day",
23
+ "unit": "count",
24
+ "boundType": {
25
+ "kind": "cumulative_count",
26
+ "window": "daily"
27
+ }
28
+ },
29
+ "booking_duration_max": {
30
+ "type": "number",
31
+ "required": true,
32
+ "displayName": "Max event duration",
33
+ "description": "Maximum duration of a single event",
34
+ "unit": "minutes",
35
+ "boundType": {
36
+ "kind": "per_transaction",
37
+ "of": "duration"
38
+ }
39
+ },
40
+ "lookahead_days_max": {
41
+ "type": "number",
42
+ "required": true,
43
+ "displayName": "Max lookahead",
44
+ "description": "Maximum number of days into the future an event can be booked",
45
+ "unit": "days",
46
+ "boundType": {
47
+ "kind": "per_transaction",
48
+ "of": "lookahead"
49
+ }
50
+ }
51
+ }
52
+ },
53
+ "contextSchema": {
54
+ "keyOrder": [
55
+ "allowed_calendars",
56
+ "allowed_attendees",
57
+ "allowed_domains"
58
+ ],
59
+ "fields": {
60
+ "allowed_calendars": {
61
+ "type": "string",
62
+ "required": false,
63
+ "displayName": "Allowed calendars",
64
+ "description": "Comma-separated list of calendar names the agent may access",
65
+ "constraint": {
66
+ "type": "string",
67
+ "enforceable": [
68
+ "subset"
69
+ ]
70
+ }
71
+ },
72
+ "allowed_attendees": {
73
+ "type": "string",
74
+ "required": false,
75
+ "displayName": "Allowed attendees",
76
+ "format": "email",
77
+ "description": "Comma-separated list of allowed attendee email addresses",
78
+ "constraint": {
79
+ "type": "string",
80
+ "enforceable": [
81
+ "subset"
82
+ ]
83
+ }
84
+ },
85
+ "allowed_domains": {
86
+ "type": "string",
87
+ "required": false,
88
+ "displayName": "Allowed domains",
89
+ "format": "domain",
90
+ "description": "Comma-separated list of allowed attendee domains (e.g. acme.com,partner.org)",
91
+ "constraint": {
92
+ "type": "string",
93
+ "enforceable": [
94
+ "subset"
95
+ ]
96
+ }
97
+ }
98
+ }
99
+ },
100
+ "executionContextSchema": {
101
+ "fields": {
102
+ "duration": {
103
+ "source": "declared",
104
+ "description": "Duration of the event in minutes",
105
+ "required": true,
106
+ "constraint": {
107
+ "type": "number",
108
+ "enforceable": [
109
+ "max"
110
+ ]
111
+ }
112
+ },
113
+ "lookahead": {
114
+ "source": "declared",
115
+ "description": "Days from now the event is scheduled",
116
+ "required": true,
117
+ "constraint": {
118
+ "type": "number",
119
+ "enforceable": [
120
+ "max"
121
+ ]
122
+ }
123
+ },
124
+ "allowed_calendars": {
125
+ "source": "declared",
126
+ "description": "Calendar being used (checked against authorized calendars)",
127
+ "required": false,
128
+ "constraint": {
129
+ "type": "string",
130
+ "enforceable": [
131
+ "subset"
132
+ ]
133
+ }
134
+ },
135
+ "allowed_attendees": {
136
+ "source": "declared",
137
+ "description": "Attendee addresses from this event (checked against authorized attendees)",
138
+ "required": false,
139
+ "constraint": {
140
+ "type": "string",
141
+ "enforceable": [
142
+ "subset"
143
+ ]
144
+ }
145
+ },
146
+ "allowed_domains": {
147
+ "source": "declared",
148
+ "description": "Unique attendee domains from this event (checked against authorized domains)",
149
+ "required": false,
150
+ "constraint": {
151
+ "type": "string",
152
+ "enforceable": [
153
+ "subset"
154
+ ]
155
+ }
156
+ },
157
+ "booking_count_daily": {
158
+ "source": "cumulative",
159
+ "cumulativeField": "_count",
160
+ "window": "daily",
161
+ "description": "Running daily booking count (resolved from execution log)",
162
+ "required": true,
163
+ "constraint": {
164
+ "type": "number",
165
+ "enforceable": [
166
+ "max"
167
+ ]
168
+ }
169
+ }
170
+ }
171
+ },
172
+ "requiredGates": [
173
+ "bounds",
174
+ "intent",
175
+ "commitment",
176
+ "decision_owner"
177
+ ],
178
+ "ttl": {
179
+ "default": 86400,
180
+ "max": 31536000
181
+ },
182
+ "retention_minimum": 7776000
183
+ }
@@ -0,0 +1,173 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/charge@0.3",
3
+ "version": "0.3",
4
+ "name": "Charge",
5
+ "description": "Charge authority — governs charging customers: payments, refunds, subscriptions",
6
+
7
+ "frameSchema": {
8
+ "keyOrder": ["profile", "path", "amount_max", "currency", "action_type"],
9
+ "fields": {
10
+ "profile": { "type": "string", "required": true },
11
+ "path": { "type": "string", "required": true },
12
+ "amount_max": {
13
+ "type": "number",
14
+ "required": true,
15
+ "description": "Maximum monetary amount per transaction in currency units",
16
+ "constraint": { "type": "number", "enforceable": ["max"] }
17
+ },
18
+ "currency": {
19
+ "type": "string",
20
+ "required": true,
21
+ "description": "Permitted currency code",
22
+ "constraint": { "type": "string", "enforceable": ["enum"] }
23
+ },
24
+ "action_type": {
25
+ "type": "string",
26
+ "required": true,
27
+ "description": "Authorized financial operation (charge, refund, subscribe)",
28
+ "constraint": { "type": "string", "enforceable": ["enum"] }
29
+ },
30
+ "amount_daily_max": {
31
+ "type": "number",
32
+ "required": true,
33
+ "description": "Maximum cumulative charges per day in currency units",
34
+ "constraint": { "type": "number", "enforceable": ["max"] }
35
+ },
36
+ "amount_monthly_max": {
37
+ "type": "number",
38
+ "required": true,
39
+ "description": "Maximum cumulative charges per month in currency units",
40
+ "constraint": { "type": "number", "enforceable": ["max"] }
41
+ },
42
+ "transaction_count_daily_max": {
43
+ "type": "number",
44
+ "required": true,
45
+ "description": "Maximum number of transactions per day",
46
+ "constraint": { "type": "number", "enforceable": ["max"] }
47
+ }
48
+ }
49
+ },
50
+
51
+ "executionContextSchema": {
52
+ "fields": {
53
+ "action_type": {
54
+ "source": "declared",
55
+ "description": "Financial operation being performed",
56
+ "required": true,
57
+ "constraint": { "type": "string", "enforceable": ["enum"] }
58
+ },
59
+ "amount": {
60
+ "source": "declared",
61
+ "description": "Monetary amount in currency units",
62
+ "required": true,
63
+ "constraint": { "type": "number", "enforceable": ["max"] }
64
+ },
65
+ "currency": {
66
+ "source": "declared",
67
+ "description": "Currency code",
68
+ "required": true,
69
+ "constraint": { "type": "string", "enforceable": ["enum"] }
70
+ },
71
+ "amount_daily": {
72
+ "source": "cumulative",
73
+ "cumulativeField": "amount",
74
+ "window": "daily",
75
+ "description": "Running daily charge total (resolved from execution log)",
76
+ "required": true,
77
+ "constraint": { "type": "number", "enforceable": ["max"] }
78
+ },
79
+ "amount_monthly": {
80
+ "source": "cumulative",
81
+ "cumulativeField": "amount",
82
+ "window": "monthly",
83
+ "description": "Running monthly charge total (resolved from execution log)",
84
+ "required": true,
85
+ "constraint": { "type": "number", "enforceable": ["max"] }
86
+ },
87
+ "transaction_count_daily": {
88
+ "source": "cumulative",
89
+ "cumulativeField": "_count",
90
+ "window": "daily",
91
+ "description": "Running daily transaction count (resolved from execution log)",
92
+ "required": true,
93
+ "constraint": { "type": "number", "enforceable": ["max"] }
94
+ }
95
+ }
96
+ },
97
+
98
+ "executionPaths": {
99
+ "charge-routine": {
100
+ "description": "Day-to-day financial transactions within authorized bounds",
101
+ "requiredDomains": ["finance"],
102
+ "ttl": { "default": 86400, "max": 86400 }
103
+ },
104
+ "charge-reviewed": {
105
+ "description": "Large or unusual transactions requiring dual authorization",
106
+ "requiredDomains": ["finance", "compliance"],
107
+ "ttl": { "default": 14400, "max": 86400 }
108
+ }
109
+ },
110
+
111
+ "requiredGates": ["frame", "problem", "objective", "tradeoff", "commitment", "decision_owner"],
112
+
113
+ "gateQuestions": {
114
+ "problem": { "question": "What problem does this charge authority address?", "required": true },
115
+ "objective": { "question": "What outcome should this charge authority enable?", "required": true },
116
+ "tradeoffs": { "question": "What financial risks do you accept with this authority?", "required": true }
117
+ },
118
+
119
+ "ttl": { "default": 86400, "max": 86400 },
120
+ "retention_minimum": 7776000,
121
+
122
+ "toolGating": {
123
+ "default": {
124
+ "executionMapping": {},
125
+ "staticExecution": { "action_type": "read" }
126
+ },
127
+ "overrides": {
128
+ "create_payment_link": {
129
+ "executionMapping": {
130
+ "unit_amount": { "field": "amount", "divisor": 100 },
131
+ "currency": "currency"
132
+ },
133
+ "staticExecution": { "action_type": "charge" }
134
+ },
135
+ "create_price": {
136
+ "executionMapping": {
137
+ "unit_amount": { "field": "amount", "divisor": 100 },
138
+ "currency": "currency"
139
+ },
140
+ "staticExecution": { "action_type": "charge" }
141
+ },
142
+ "create_invoice_item": {
143
+ "executionMapping": {
144
+ "amount": { "field": "amount", "divisor": 100 },
145
+ "currency": "currency"
146
+ },
147
+ "staticExecution": { "action_type": "charge" }
148
+ },
149
+ "create_refund": {
150
+ "executionMapping": {
151
+ "amount": { "field": "amount", "divisor": 100 }
152
+ },
153
+ "staticExecution": { "action_type": "refund" }
154
+ },
155
+ "create_subscription": {
156
+ "executionMapping": {},
157
+ "staticExecution": { "action_type": "subscribe" }
158
+ },
159
+ "cancel_subscription": {
160
+ "executionMapping": {},
161
+ "staticExecution": { "action_type": "subscribe" }
162
+ },
163
+ "update_subscription": {
164
+ "executionMapping": {},
165
+ "staticExecution": { "action_type": "subscribe" }
166
+ },
167
+ "retrieve_balance": null,
168
+ "list_invoices": null,
169
+ "list_subscriptions": null,
170
+ "list_payment_methods": null
171
+ }
172
+ }
173
+ }