@topy-ai/maggie 0.7.52 → 0.7.54
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-zh-TW.md +28 -4
- package/README.md +93 -60
- package/bin/maggie.js +67 -12
- package/bundled-contracts/maggie-assistant-tools/booking-receptionist-example-v1.json +161 -0
- package/bundled-contracts/maggie-assistant-tools/tool-registry-v1.schema.json +268 -20
- package/bundled-contracts/maggie-deployment/bridge-host-example-v1.json +49 -7
- package/bundled-contracts/maggiedash/booking-email-templates-v1.json +181 -13
- package/bundled-contracts/maggiedash/booking-rules-v1.json +1699 -0
- package/bundled-contracts/maggiedash/stripe-booking-capabilities-v1.json +398 -39
- package/bundled-references/maggiedash-booking/PRD.md +22 -11
- package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +1 -1
- package/bundled-references/maggiedash-booking/RULES.md +167 -0
- package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +2 -2
- package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +42 -4
- package/bundled-references/provider-adapter-contract.md +16 -3
- package/bundled-skills/catalog.json +1 -1
- package/bundled-skills/maggie-assistant-tools/SKILL.md +54 -3
- package/bundled-skills/maggie-assistant-tools/references/approvals-and-audit.md +27 -0
- package/bundled-skills/maggie-assistant-tools/references/booking-receptionist.md +45 -0
- package/bundled-skills/maggie-assistant-tools/references/bridge-host.md +54 -0
- package/bundled-skills/maggie-auth-reference/SKILL.md +18 -0
- package/bundled-skills/maggie-blog/SKILL.md +8 -0
- package/bundled-skills/maggie-booking/SKILL.md +66 -14
- package/bundled-skills/maggie-content-localization/SKILL.md +26 -0
- package/bundled-skills/maggie-dash/SKILL.md +28 -2
- package/bundled-skills/maggie-deployment/SKILL.md +48 -0
- package/bundled-skills/maggie-deployment/references/cloudflare.md +19 -0
- package/bundled-skills/maggie-deployment/references/vps.md +92 -0
- package/bundled-skills/maggie-design/SKILL.md +98 -3
- package/bundled-skills/maggie-design/references/app-ui-patterns.md +79 -0
- package/bundled-skills/maggie-feedback/SKILL.md +27 -2
- package/bundled-skills/maggie-marketplace/SKILL.md +12 -0
- package/bundled-skills/maggie-marketplace/references/directory-search.md +51 -0
- package/bundled-skills/maggie-marketplace/references/directory.mjs +112 -0
- package/bundled-skills/maggie-mobile-app/SKILL.md +65 -6
- package/bundled-skills/maggie-mobile-app/references/payments-and-push.md +78 -0
- package/bundled-skills/maggie-qa-workflow/SKILL.md +60 -0
- package/bundled-skills/maggie-seo-geo/SKILL.md +33 -0
- package/bundled-skills/maggie-service-booking/SKILL.md +28 -3
- package/bundled-skills/maggie-social-share/SKILL.md +56 -4
- package/bundled-skills/maggie-social-share/references/queue-and-connections.md +28 -0
- package/bundled-tools/clis/maggie_assistant_tools.py +84 -3
- package/bundled-tools/clis/maggie_booking.py +24 -12
- package/bundled-tools/clis/maggie_booking_connect_qa.py +136 -0
- package/bundled-tools/clis/maggie_booking_rules.py +476 -0
- package/bundled-tools/clis/maggie_bridge_host.py +77 -1
- package/bundled-tools/clis/maggie_dash.py +173 -3
- package/bundled-tools/clis/maggie_deployment_ops.py +524 -0
- package/bundled-tools/clis/maggie_design.py +15 -2
- package/bundled-tools/clis/maggie_design_bulk.py +290 -0
- package/bundled-tools/clis/maggie_design_lint.py +205 -3
- package/bundled-tools/clis/maggie_feedback.py +138 -28
- package/bundled-tools/clis/maggie_live_urls.py +138 -0
- package/bundled-tools/clis/maggie_localization.py +3 -0
- package/bundled-tools/clis/maggie_localization_keys.py +151 -0
- package/bundled-tools/clis/maggie_media_generate.py +174 -0
- package/bundled-tools/clis/maggie_mobile.py +219 -4
- package/bundled-tools/clis/maggie_product_release.py +49 -1
- package/bundled-tools/clis/maggie_qa_app_preflight.py +122 -4
- package/bundled-tools/clis/maggie_qa_fit.py +217 -0
- package/bundled-tools/clis/maggie_qa_workflow.py +5 -0
- package/bundled-tools/clis/maggie_schema_complexity.py +84 -0
- package/bundled-tools/clis/maggie_seo_routes.py +154 -0
- package/bundled-tools/clis/maggie_service_migration.py +272 -0
- package/bundled-tools/clis/maggie_social_queue.py +2 -0
- package/bundled-tools/clis/maggie_social_share.py +174 -7
- package/bundled-tools/integrations/maggie-api-pull.md +22 -0
- package/bundled-tools/runtime/assistant_approval.py +98 -0
- package/package.json +1 -1
- package/references/provider-adapter-contract.md +16 -3
- package/bundled-contracts/maggiedash/execution-board.json +0 -5463
- package/bundled-references/maggiedash-booking/CURRENT-STATE.md +0 -210
- package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +0 -5463
- package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +0 -270
- package/bundled-references/maggiedash-booking/PROGRESS.md +0 -279
- package/bundled-references/maggiedash-booking/README.md +0 -288
- package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +0 -551
- package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +0 -107
- package/bundled-references/maggiedash-booking/TASKS.md +0 -178
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "maggie-assistant-tool-registry.v1",
|
|
3
|
+
"description": "Booking receptionist and public discovery MCP for a multi-business booking marketplace. The receptionist answers visitors on one business's page from that business's facts only; it never books, cancels or takes card details \u2014 it opens the normal booking sheet at a real free time.",
|
|
4
|
+
"visitorPolicy": {
|
|
5
|
+
"enabledByDefault": false,
|
|
6
|
+
"dailyCaps": {
|
|
7
|
+
"perVisitor": 20,
|
|
8
|
+
"perBusiness": 300
|
|
9
|
+
},
|
|
10
|
+
"logAnswers": true,
|
|
11
|
+
"factsOnly": true,
|
|
12
|
+
"cardDetails": "never",
|
|
13
|
+
"handoff": "Show the business's phone and e-mail when the answer is not in its facts."
|
|
14
|
+
},
|
|
15
|
+
"mcpServers": [
|
|
16
|
+
{
|
|
17
|
+
"name": "discovery",
|
|
18
|
+
"auth": "none",
|
|
19
|
+
"rateLimit": {
|
|
20
|
+
"perIpPerMinute": 30,
|
|
21
|
+
"perIpPerDay": 2000
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "owner",
|
|
26
|
+
"auth": "oauth",
|
|
27
|
+
"resource": "https://example.com/mcp",
|
|
28
|
+
"audienceBinding": true
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"threads": {
|
|
32
|
+
"storage": "server",
|
|
33
|
+
"retentionDays": 90,
|
|
34
|
+
"supportAccess": "with-consent",
|
|
35
|
+
"deleteOnAccountDeletion": true
|
|
36
|
+
},
|
|
37
|
+
"tools": [
|
|
38
|
+
{
|
|
39
|
+
"name": "business_facts",
|
|
40
|
+
"description": "Return this business's treatments with prices and durations, opening hours, address, policies (cancellation, deposit, patch tests) and FAQs. Answer only from this data.",
|
|
41
|
+
"risk": "read",
|
|
42
|
+
"scope": "workspace",
|
|
43
|
+
"channels": [
|
|
44
|
+
"web-widget",
|
|
45
|
+
"in-app"
|
|
46
|
+
],
|
|
47
|
+
"user": {
|
|
48
|
+
"label": "Answer from the business's details",
|
|
49
|
+
"detail": "Treatments, prices, opening hours and policies."
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "free_times_find",
|
|
54
|
+
"description": "Return up to 6 real free start times for a treatment (optionally a team member and a day) from the live availability engine.",
|
|
55
|
+
"risk": "read",
|
|
56
|
+
"scope": "workspace",
|
|
57
|
+
"channels": [
|
|
58
|
+
"web-widget",
|
|
59
|
+
"in-app",
|
|
60
|
+
"mcp"
|
|
61
|
+
],
|
|
62
|
+
"mcpServers": [
|
|
63
|
+
"discovery",
|
|
64
|
+
"owner"
|
|
65
|
+
],
|
|
66
|
+
"card": "slot-picker",
|
|
67
|
+
"user": {
|
|
68
|
+
"label": "Find free times",
|
|
69
|
+
"detail": "Real free times you can book."
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "booking_sheet_open",
|
|
74
|
+
"description": "Return a link that opens the business's normal booking sheet preselected at the chosen treatment and time. The visitor books and pays there; this tool never books.",
|
|
75
|
+
"risk": "read",
|
|
76
|
+
"scope": "workspace",
|
|
77
|
+
"channels": [
|
|
78
|
+
"web-widget",
|
|
79
|
+
"mcp"
|
|
80
|
+
],
|
|
81
|
+
"mcpServers": [
|
|
82
|
+
"discovery"
|
|
83
|
+
],
|
|
84
|
+
"user": {
|
|
85
|
+
"label": "Open the booking form",
|
|
86
|
+
"detail": "You finish the booking yourself."
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "business_search",
|
|
91
|
+
"description": "Search published businesses by treatment, town and name; returns names, towns, ratings and profile links.",
|
|
92
|
+
"risk": "read",
|
|
93
|
+
"scope": "workspace",
|
|
94
|
+
"channels": [
|
|
95
|
+
"mcp",
|
|
96
|
+
"chatgpt",
|
|
97
|
+
"claude"
|
|
98
|
+
],
|
|
99
|
+
"mcpServers": [
|
|
100
|
+
"discovery"
|
|
101
|
+
],
|
|
102
|
+
"card": "list",
|
|
103
|
+
"user": {
|
|
104
|
+
"label": "Search businesses",
|
|
105
|
+
"detail": "Published businesses only."
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "business_details",
|
|
110
|
+
"description": "Return one published business's profile: treatments and prices, hours, address, booking link.",
|
|
111
|
+
"risk": "read",
|
|
112
|
+
"scope": "workspace",
|
|
113
|
+
"channels": [
|
|
114
|
+
"mcp",
|
|
115
|
+
"chatgpt",
|
|
116
|
+
"claude"
|
|
117
|
+
],
|
|
118
|
+
"mcpServers": [
|
|
119
|
+
"discovery"
|
|
120
|
+
],
|
|
121
|
+
"card": "place",
|
|
122
|
+
"user": {
|
|
123
|
+
"label": "Show a business",
|
|
124
|
+
"detail": "Its treatments, prices and hours."
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "booking_reschedule",
|
|
129
|
+
"description": "Move one of the signed-in owner's bookings to a new free time after the owner approves the change preview.",
|
|
130
|
+
"risk": "write-reversible",
|
|
131
|
+
"scope": "workspace",
|
|
132
|
+
"channels": [
|
|
133
|
+
"in-app",
|
|
134
|
+
"mcp"
|
|
135
|
+
],
|
|
136
|
+
"mcpServers": [
|
|
137
|
+
"owner"
|
|
138
|
+
],
|
|
139
|
+
"card": "change-preview",
|
|
140
|
+
"user": {
|
|
141
|
+
"label": "Move a booking",
|
|
142
|
+
"detail": "Shows the old and new time first.",
|
|
143
|
+
"confirm": "Move this booking to the new time and tell the client?"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"cantDo": [
|
|
148
|
+
{
|
|
149
|
+
"text": "Book, cancel or change an appointment for you in the chat.",
|
|
150
|
+
"instead": "Pick a time and finish in the booking form."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"text": "Take card details.",
|
|
154
|
+
"instead": "Pay securely in the booking form."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"text": "Give medical advice.",
|
|
158
|
+
"instead": "Ask the business, or your doctor."
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
@@ -4,47 +4,295 @@
|
|
|
4
4
|
"title": "Maggie assistant tool registry",
|
|
5
5
|
"description": "One definition per tool, exported by the product and shared by the in-app agent, MCP server and ChatGPT/Claude apps. Model-facing description and user-facing copy are separate fields. Checked by `maggie assistant registry-validate`.",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": [
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"tools"
|
|
10
|
+
],
|
|
8
11
|
"properties": {
|
|
9
|
-
"schemaVersion": {
|
|
12
|
+
"schemaVersion": {
|
|
13
|
+
"const": "maggie-assistant-tool-registry.v1"
|
|
14
|
+
},
|
|
10
15
|
"gates": {
|
|
11
16
|
"description": "Preconditions a tool may require, e.g. credits, AI generation, verified site.",
|
|
12
17
|
"type": "object",
|
|
13
|
-
"additionalProperties": {
|
|
18
|
+
"additionalProperties": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"required": [
|
|
21
|
+
"label"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"label": {
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"modelNote": {
|
|
28
|
+
"type": "string"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
14
32
|
},
|
|
15
33
|
"tools": {
|
|
16
34
|
"type": "array",
|
|
17
35
|
"minItems": 1,
|
|
18
36
|
"items": {
|
|
19
37
|
"type": "object",
|
|
20
|
-
"required": [
|
|
38
|
+
"required": [
|
|
39
|
+
"name",
|
|
40
|
+
"description",
|
|
41
|
+
"risk",
|
|
42
|
+
"scope",
|
|
43
|
+
"channels",
|
|
44
|
+
"user"
|
|
45
|
+
],
|
|
21
46
|
"properties": {
|
|
22
|
-
"name": {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
47
|
+
"name": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
50
|
+
"maxLength": 64
|
|
51
|
+
},
|
|
52
|
+
"description": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"minLength": 1,
|
|
55
|
+
"description": "Model-facing; never shown to people."
|
|
56
|
+
},
|
|
57
|
+
"risk": {
|
|
58
|
+
"enum": [
|
|
59
|
+
"read",
|
|
60
|
+
"write-reversible",
|
|
61
|
+
"write-spends",
|
|
62
|
+
"write-public",
|
|
63
|
+
"never",
|
|
64
|
+
"R0",
|
|
65
|
+
"W1",
|
|
66
|
+
"W2",
|
|
67
|
+
"W3",
|
|
68
|
+
"W4"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"scope": {
|
|
72
|
+
"enum": [
|
|
73
|
+
"account",
|
|
74
|
+
"workspace"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"channels": {
|
|
78
|
+
"type": "array",
|
|
79
|
+
"minItems": 1,
|
|
80
|
+
"items": {
|
|
81
|
+
"enum": [
|
|
82
|
+
"in-app",
|
|
83
|
+
"mcp",
|
|
84
|
+
"chatgpt",
|
|
85
|
+
"claude",
|
|
86
|
+
"cli",
|
|
87
|
+
"web-widget"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"gates": {
|
|
92
|
+
"type": "array",
|
|
93
|
+
"items": {
|
|
94
|
+
"type": "string"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"idempotent": {
|
|
98
|
+
"type": "boolean"
|
|
99
|
+
},
|
|
100
|
+
"openWorld": {
|
|
101
|
+
"type": "boolean"
|
|
102
|
+
},
|
|
103
|
+
"hidden": {
|
|
104
|
+
"type": "boolean",
|
|
105
|
+
"description": "Omit from the capability page (e.g. host-only helpers)."
|
|
106
|
+
},
|
|
31
107
|
"user": {
|
|
32
108
|
"type": "object",
|
|
33
|
-
"required": [
|
|
109
|
+
"required": [
|
|
110
|
+
"label"
|
|
111
|
+
],
|
|
112
|
+
"properties": {
|
|
113
|
+
"label": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"maxLength": 60
|
|
116
|
+
},
|
|
117
|
+
"detail": {
|
|
118
|
+
"type": "string"
|
|
119
|
+
},
|
|
120
|
+
"confirm": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "Approval-card sentence; required for writes."
|
|
123
|
+
},
|
|
124
|
+
"status": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Shown while the tool runs."
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"audit": {
|
|
131
|
+
"type": "object",
|
|
34
132
|
"properties": {
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
133
|
+
"scope": {
|
|
134
|
+
"enum": [
|
|
135
|
+
"account",
|
|
136
|
+
"workspace"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
39
139
|
}
|
|
40
140
|
},
|
|
41
|
-
"
|
|
141
|
+
"card": {
|
|
142
|
+
"enum": [
|
|
143
|
+
"place",
|
|
144
|
+
"slot-picker",
|
|
145
|
+
"booking",
|
|
146
|
+
"voucher",
|
|
147
|
+
"change-preview",
|
|
148
|
+
"numbers",
|
|
149
|
+
"draft",
|
|
150
|
+
"list"
|
|
151
|
+
],
|
|
152
|
+
"description": "Optional result card the app and ChatGPT/Claude widgets render from structured content; every other surface shows the text result. The tool must still return a readable text result."
|
|
153
|
+
},
|
|
154
|
+
"mcpServers": {
|
|
155
|
+
"type": "array",
|
|
156
|
+
"items": {
|
|
157
|
+
"type": "string"
|
|
158
|
+
},
|
|
159
|
+
"description": "Names from registry.mcpServers that expose this tool (default: the authenticated server when the tool lists the mcp channel)."
|
|
160
|
+
}
|
|
42
161
|
}
|
|
43
162
|
}
|
|
44
163
|
},
|
|
45
164
|
"cantDo": {
|
|
46
165
|
"type": "array",
|
|
47
|
-
"items": {
|
|
166
|
+
"items": {
|
|
167
|
+
"type": "object",
|
|
168
|
+
"required": [
|
|
169
|
+
"text"
|
|
170
|
+
],
|
|
171
|
+
"properties": {
|
|
172
|
+
"text": {
|
|
173
|
+
"type": "string"
|
|
174
|
+
},
|
|
175
|
+
"instead": {
|
|
176
|
+
"type": "string"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"mcpServers": {
|
|
182
|
+
"type": "array",
|
|
183
|
+
"description": "MCP servers built from this registry. A public server is unauthenticated, read-only and rate-limited (AI-search distribution); an authenticated server binds tokens to its resource URL (RFC 8707 audience).",
|
|
184
|
+
"items": {
|
|
185
|
+
"type": "object",
|
|
186
|
+
"required": [
|
|
187
|
+
"name",
|
|
188
|
+
"auth"
|
|
189
|
+
],
|
|
190
|
+
"properties": {
|
|
191
|
+
"name": {
|
|
192
|
+
"type": "string"
|
|
193
|
+
},
|
|
194
|
+
"auth": {
|
|
195
|
+
"enum": [
|
|
196
|
+
"none",
|
|
197
|
+
"oauth"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
"resource": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"description": "Canonical server URL; OAuth tokens must carry it as audience (RFC 8707 resource indicator)."
|
|
203
|
+
},
|
|
204
|
+
"audienceBinding": {
|
|
205
|
+
"type": "boolean",
|
|
206
|
+
"description": "Default true for oauth servers; false needs audienceException."
|
|
207
|
+
},
|
|
208
|
+
"audienceException": {
|
|
209
|
+
"type": "string"
|
|
210
|
+
},
|
|
211
|
+
"rateLimit": {
|
|
212
|
+
"type": "object",
|
|
213
|
+
"properties": {
|
|
214
|
+
"perIpPerMinute": {
|
|
215
|
+
"type": "integer"
|
|
216
|
+
},
|
|
217
|
+
"perIpPerDay": {
|
|
218
|
+
"type": "integer"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"threads": {
|
|
226
|
+
"type": "object",
|
|
227
|
+
"description": "Where conversations live.",
|
|
228
|
+
"properties": {
|
|
229
|
+
"storage": {
|
|
230
|
+
"enum": [
|
|
231
|
+
"device",
|
|
232
|
+
"server"
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
"retentionDays": {
|
|
236
|
+
"type": "integer"
|
|
237
|
+
},
|
|
238
|
+
"supportAccess": {
|
|
239
|
+
"enum": [
|
|
240
|
+
"none",
|
|
241
|
+
"with-consent"
|
|
242
|
+
]
|
|
243
|
+
},
|
|
244
|
+
"deleteOnAccountDeletion": {
|
|
245
|
+
"type": "boolean"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"visitorPolicy": {
|
|
250
|
+
"type": "object",
|
|
251
|
+
"description": "Required when any tool lists the web-widget channel (a visitor-facing assistant such as an AI receptionist).",
|
|
252
|
+
"required": [
|
|
253
|
+
"enabledByDefault",
|
|
254
|
+
"dailyCaps",
|
|
255
|
+
"logAnswers",
|
|
256
|
+
"factsOnly",
|
|
257
|
+
"cardDetails"
|
|
258
|
+
],
|
|
259
|
+
"properties": {
|
|
260
|
+
"enabledByDefault": {
|
|
261
|
+
"const": false
|
|
262
|
+
},
|
|
263
|
+
"dailyCaps": {
|
|
264
|
+
"type": "object",
|
|
265
|
+
"required": [
|
|
266
|
+
"perVisitor",
|
|
267
|
+
"perBusiness"
|
|
268
|
+
],
|
|
269
|
+
"properties": {
|
|
270
|
+
"perVisitor": {
|
|
271
|
+
"type": "integer",
|
|
272
|
+
"minimum": 1
|
|
273
|
+
},
|
|
274
|
+
"perBusiness": {
|
|
275
|
+
"type": "integer",
|
|
276
|
+
"minimum": 1
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"logAnswers": {
|
|
281
|
+
"const": true
|
|
282
|
+
},
|
|
283
|
+
"factsOnly": {
|
|
284
|
+
"const": true
|
|
285
|
+
},
|
|
286
|
+
"cardDetails": {
|
|
287
|
+
"const": "never"
|
|
288
|
+
},
|
|
289
|
+
"handoff": {
|
|
290
|
+
"type": "string"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"description": {
|
|
295
|
+
"type": "string"
|
|
48
296
|
}
|
|
49
297
|
}
|
|
50
298
|
}
|
|
@@ -1,29 +1,71 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "maggie-bridge-host.v1",
|
|
3
3
|
"tenantsRoot": "/srv/bridge/tenants",
|
|
4
|
+
"workloads": [
|
|
5
|
+
"chat",
|
|
6
|
+
"photos",
|
|
7
|
+
"image-generation"
|
|
8
|
+
],
|
|
4
9
|
"isolation": {
|
|
5
10
|
"uidPerTenant": true,
|
|
6
|
-
"uidRange": [
|
|
11
|
+
"uidRange": [
|
|
12
|
+
20000,
|
|
13
|
+
29999
|
|
14
|
+
],
|
|
7
15
|
"tenantDirMode": "0700",
|
|
8
16
|
"parentDirMode": "0711",
|
|
9
17
|
"cleanEnvironment": true,
|
|
10
|
-
"envAllowlist": [
|
|
18
|
+
"envAllowlist": [
|
|
19
|
+
"HOME",
|
|
20
|
+
"PATH",
|
|
21
|
+
"LANG",
|
|
22
|
+
"TZ"
|
|
23
|
+
],
|
|
11
24
|
"ownerPinning": true,
|
|
12
25
|
"nonDumpable": true
|
|
13
26
|
},
|
|
14
|
-
"network": {
|
|
15
|
-
|
|
16
|
-
|
|
27
|
+
"network": {
|
|
28
|
+
"proxy": "nginx",
|
|
29
|
+
"publicBind": "127.0.0.1:3210",
|
|
30
|
+
"adminBind": "127.0.0.1:3211",
|
|
31
|
+
"adminProxied": false,
|
|
32
|
+
"proxyLimits": {
|
|
33
|
+
"clientMaxBodySize": "25m",
|
|
34
|
+
"readTimeoutSeconds": 360
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"capacity": {
|
|
38
|
+
"maxSessions": 20,
|
|
39
|
+
"eviction": "lru-idle",
|
|
40
|
+
"idleTimeoutMinutes": 15
|
|
41
|
+
},
|
|
42
|
+
"recycle": {
|
|
43
|
+
"on": [
|
|
44
|
+
"mcp",
|
|
45
|
+
"skills",
|
|
46
|
+
"cli"
|
|
47
|
+
],
|
|
48
|
+
"busySessions": "after-current-turn"
|
|
49
|
+
},
|
|
17
50
|
"image": {
|
|
18
51
|
"label": "com.example.app=bridge-host",
|
|
19
52
|
"retain": 2,
|
|
20
|
-
"healthcheck": {
|
|
53
|
+
"healthcheck": {
|
|
54
|
+
"path": "/health",
|
|
55
|
+
"attempts": 30,
|
|
56
|
+
"intervalSeconds": 2
|
|
57
|
+
},
|
|
21
58
|
"rollback": true,
|
|
22
59
|
"readOnlyRootfs": true,
|
|
23
60
|
"capDropAll": true,
|
|
24
61
|
"noNewPrivileges": true
|
|
25
62
|
},
|
|
26
63
|
"providers": [
|
|
27
|
-
{
|
|
64
|
+
{
|
|
65
|
+
"name": "assistant-cli",
|
|
66
|
+
"accountType": "customer-own",
|
|
67
|
+
"termsUrl": "https://example.com/terms",
|
|
68
|
+
"termsReviewedAt": "2026-10-01"
|
|
69
|
+
}
|
|
28
70
|
]
|
|
29
71
|
}
|