@topy-ai/maggie 0.7.40 → 0.7.41
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 +29 -4
- package/README.md +35 -1
- package/bin/maggie.js +24 -5
- package/bundled-contracts/maggie-clone/interaction-state-v1.schema.json +26 -0
- package/bundled-contracts/maggie-content/provenance-v1.schema.json +20 -0
- package/bundled-contracts/maggie-design/brand-kit-v1.schema.json +18 -0
- package/bundled-contracts/maggie-design/browser-interactions-v1.schema.json +27 -0
- package/bundled-contracts/maggie-design/style-editing-v1.schema.json +35 -0
- package/bundled-contracts/maggie-media/image-generation-policy-v1.json +28 -0
- package/bundled-contracts/maggie-media/video-generation-policy-v1.json +40 -0
- package/bundled-contracts/maggie-media/video-job-v1.schema.json +20 -0
- package/bundled-contracts/maggie-media/video-playback-evidence-v1.schema.json +15 -0
- package/bundled-contracts/maggie-ops/npm11-preflight-v1.schema.json +17 -0
- package/bundled-contracts/maggie-scaffold/host-scaffold-v1.schema.json +25 -0
- package/bundled-contracts/maggie-seo/gsc-readiness-v1.schema.json +19 -0
- package/bundled-contracts/maggie-service-booking/delivery-provider-default-v1.json +8 -0
- package/bundled-contracts/maggie-service-booking/delivery-provider-v1.schema.json +16 -0
- package/bundled-contracts/maggiedash/browser-session-v1.schema.json +18 -0
- package/bundled-contracts/maggiedash/content-overrides-v1.schema.json +19 -0
- package/bundled-contracts/maggiedash/public-session-cache-v1.schema.json +17 -0
- package/bundled-references/browser-inspection.md +21 -0
- package/bundled-skills/maggie-blog/SKILL.md +12 -0
- package/bundled-skills/maggie-blog-bootstrap/SKILL.md +23 -0
- package/bundled-skills/maggie-booking/SKILL.md +15 -0
- package/bundled-skills/maggie-clone/SKILL.md +13 -0
- package/bundled-skills/maggie-deployment/SKILL.md +6 -0
- package/bundled-skills/maggie-design/SKILL.md +29 -3
- package/bundled-skills/maggie-ops/SKILL.md +12 -0
- package/bundled-skills/maggie-seo-geo/SKILL.md +33 -0
- package/bundled-tools/clis/maggie_analytics.py +43 -1
- package/bundled-tools/clis/maggie_browser_audit.py +99 -3
- package/bundled-tools/clis/maggie_clone.py +46 -1
- package/bundled-tools/clis/maggie_contracts.py +111 -0
- package/bundled-tools/clis/maggie_design.py +55 -0
- package/bundled-tools/clis/maggie_workflows.py +387 -0
- package/bundled-tools/clis/site_audit.py +28 -1
- package/bundled-tools/integrations/analytics.md +14 -0
- package/bundled-tools/runtime/site_baseline.py +3 -0
- package/package.json +1 -1
- package/references/browser-inspection.md +21 -0
package/README-zh-TW.md
CHANGED
|
@@ -8,11 +8,19 @@ Codex、Claude Code 與相容的 coding agents。
|
|
|
8
8
|
## 安裝
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
npx @topy-ai/maggie@0.7.
|
|
12
|
-
npx @topy-ai/maggie doctor --project .
|
|
11
|
+
npx @topy-ai/maggie@0.7.41 init --agent all
|
|
12
|
+
npx @topy-ai/maggie@0.7.41 doctor --project .
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
目前 release 是 `0.7.
|
|
15
|
+
目前 release 是 `0.7.41`,完成 feedback batches 22、23:加入 declarative
|
|
16
|
+
browser interaction evidence、design markup/style/content-key gate、compiler
|
|
17
|
+
source anchoring、entity double-escape protection、`update --help` read-only,
|
|
18
|
+
以及 noindex hypothetical indexability、可過期 baseline acknowledgement、
|
|
19
|
+
DOM-only link extraction regression。MaggieDash 0.2.10 同步提供 content
|
|
20
|
+
override、短期 browser session、CDN-safe public-session cache contracts;
|
|
21
|
+
authentication 和 isolated dev server 仍由 host 負責。
|
|
22
|
+
|
|
23
|
+
0.7.40 加入 feedback batch 21:progressive enhancement
|
|
16
24
|
的區域/identity/request 驗證、Tailwind utility 與 CSS cascade evidence、
|
|
17
25
|
dashboard/sample surface contract、primary navigation indexability、privacy
|
|
18
26
|
origin parity、provider-neutral site structure、host capability manifest,
|
|
@@ -20,6 +28,23 @@ origin parity、provider-neutral site structure、host capability manifest,
|
|
|
20
28
|
同步更新至 0.2.9,ORA reference host 也提供相同的 capability/site-structure
|
|
21
29
|
邊界。
|
|
22
30
|
|
|
31
|
+
目前也加入 deferred workflow 的共用 contract gate:Gemini image/edit 使用
|
|
32
|
+
Nano Banana 2,hero video 使用 Gemini Omni Flash,GSC 直接擴充 analytics
|
|
33
|
+
release-gate,booking delivery 預設 Resend email + Twilio SMS;credentials、
|
|
34
|
+
billing、storage 和 provider runtime 仍由 host 負責。
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
maggie media image-policy --policy contracts/maggie-media/image-generation-policy-v1.json
|
|
38
|
+
maggie media video-policy --policy contracts/maggie-media/video-generation-policy-v1.json
|
|
39
|
+
maggie analytics gsc-readiness --gsc-evidence .maggie/gsc-readiness.json
|
|
40
|
+
maggie provenance --project . --source src/content/post.md
|
|
41
|
+
maggie scaffold --project . --framework astro --language typescript --write --confirm
|
|
42
|
+
maggie brand-kit --project . --design DESIGN.md --write --confirm
|
|
43
|
+
maggie npm11 --project . --smoke --confirm
|
|
44
|
+
maggie media video-playback --evidence .maggie/video-playback-evidence.json
|
|
45
|
+
maggie booking-delivery --policy .maggie/booking-delivery-policy.json
|
|
46
|
+
```
|
|
47
|
+
|
|
23
48
|
常用流程:
|
|
24
49
|
|
|
25
50
|
```bash
|
|
@@ -48,7 +73,7 @@ structure drift 或重複 treatment product 時 fail closed。
|
|
|
48
73
|
deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
|
|
49
74
|
publish 與 production deployment 需要明確確認。
|
|
50
75
|
|
|
51
|
-
目前 source tree
|
|
76
|
+
目前 source tree 的正式 release 是 `0.7.41`。本版完成 feedback batches 22、23:加入 declarative browser interaction evidence、design markup/style/content-key gate、compiler source anchoring、entity double-escape protection、`update --help` read-only、noindex hypothetical indexability、可過期 baseline acknowledgement、DOM-only link extraction regression,以及 MaggieDash 0.2.10 的 content override、短期 browser session、CDN-safe public-session cache contracts。authentication 和 isolated dev server 仍由 host 負責。`maggie-booking` workflow、傳統 email/password、Stripe、Resend、public booking flow 及既有安全邊界維持不變;provider-bound video generation 與 transactional delivery 仍記錄在 issue #39,前一批延後功能仍在 issue #38,不會直接成為 active memory。0.7.33 記錄並審查一筆更正回饋;確認 0.7.32 已正確處理 batch index,沒有修改已驗證的 shared behavior。0.7.32 加入 feedback 一基索引支援、MaggieDash panel 的 source/freshness/error evidence、Consent Mode 與實際 write/no-op reconciliation、SEO baseline recapture、sitemap origin rebasing、content-diff scope、migration ledger reconciliation、deployment credential preflight、release provenance/runtime preflight、icon release gate、opt-in blog auto-publish gate,以及 least-privilege VPS deployer。也修復 top-level `maggie feedback` dispatcher parity。0.7.31 加入 update 差異摘要、atomic installer copy、subset install manifest merge,以及 inventory drift 時 doctor non-zero。0.7.30 補上 feedback tracking issue closeout gate 與 batch 14/15 audit ledger。0.7.29 修正 npm package landing page 使用英文 README;0.7.28 加入 versioned Gemini model policy、明確 fallback 與 provenance、bundled-first CLI
|
|
52
77
|
dispatch、`maggie --version`、feedback batch review 聚合與重複偵測、marketplace enrichment evidence、booking
|
|
53
78
|
worker/resolver evidence,以及 read-only migration preflight。它也包含 host-owned mobile app surface contract、signed-in
|
|
54
79
|
camera-state QA、直接 Astro route resolution、correlated feedback batch,以及
|
package/README.md
CHANGED
|
@@ -60,7 +60,41 @@ Maggie keeps the existing project foundation and asks for decisions before
|
|
|
60
60
|
shared routes, analytics, or publishing boundaries change. The current
|
|
61
61
|
package ships 20 installable skills and a local-first MaggieDash foundation.
|
|
62
62
|
|
|
63
|
-
The current release is `0.7.
|
|
63
|
+
The current release is `0.7.41`. It closes feedback batches 22 and 23 with
|
|
64
|
+
declarative browser interaction evidence, stable design markup/style/content-key
|
|
65
|
+
gates, compiler source anchoring, entity double-escape protection, and a
|
|
66
|
+
read-only `update --help` path. It also adds hypothetical indexability
|
|
67
|
+
diagnostics for `noindex` pages, expiring baseline acknowledgement evidence,
|
|
68
|
+
DOM-only link extraction regression coverage, and provider-neutral MaggieDash
|
|
69
|
+
contracts for content overrides, short-lived browser sessions, and CDN-safe
|
|
70
|
+
public-session cache boundaries. Host-owned authentication and isolated
|
|
71
|
+
dev-server choices remain explicit. MaggieDash 0.2.10 contains the matching
|
|
72
|
+
host contracts.
|
|
73
|
+
|
|
74
|
+
The source tree also includes the selected deferred-workflow contracts for
|
|
75
|
+
Gemini media, clone interaction replay, GSC readiness, git content provenance,
|
|
76
|
+
npm 11, empty-project scaffolding, brand kits, and booking delivery. The
|
|
77
|
+
default provider policy is Gemini Nano Banana 2 for image/edit, Gemini Omni
|
|
78
|
+
Flash for hero video, and Resend email plus Twilio SMS for booking delivery.
|
|
79
|
+
Credentials, billing, storage, and live provider adapters remain host-owned.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
maggie media image-policy --policy contracts/maggie-media/image-generation-policy-v1.json
|
|
83
|
+
maggie media video-policy --policy contracts/maggie-media/video-generation-policy-v1.json
|
|
84
|
+
maggie analytics gsc-readiness --gsc-evidence .maggie/gsc-readiness.json
|
|
85
|
+
maggie provenance --project . --source src/content/post.md
|
|
86
|
+
maggie scaffold --project . --framework astro --language typescript --write --confirm
|
|
87
|
+
maggie brand-kit --project . --design DESIGN.md --write --confirm
|
|
88
|
+
maggie npm11 --project . --smoke --confirm
|
|
89
|
+
maggie media video-playback --evidence .maggie/video-playback-evidence.json
|
|
90
|
+
maggie booking-delivery --policy .maggie/booking-delivery-policy.json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
These are evidence gates, not implicit provider calls. See the maintainer
|
|
94
|
+
[decision record](../../docs/github-issues/DECISIONS-2026-09-22.md) for the
|
|
95
|
+
remaining host/provider release work.
|
|
96
|
+
|
|
97
|
+
The 0.7.40 release adds feedback batch 21 contracts for
|
|
64
98
|
progressive-enhancement identity/request safety, rendered Tailwind utility and
|
|
65
99
|
CSS-cascade checks, dashboard/sample surface evidence, primary-navigation
|
|
66
100
|
indexability, privacy-origin parity, provider-neutral site structure, host
|
package/bin/maggie.js
CHANGED
|
@@ -68,9 +68,10 @@ Usage:
|
|
|
68
68
|
maggie dash components-audit --bindings-file FILE --sections-file FILE --pages-file FILE
|
|
69
69
|
maggie dash status --project PATH
|
|
70
70
|
maggie dash migrate --project PATH --confirm
|
|
71
|
-
maggie dash capabilities-validate --manifest FILE
|
|
71
|
+
maggie dash capabilities-validate|session-check|content-overrides-check --manifest FILE
|
|
72
|
+
maggie dash cache-boundary-check --evidence FILE
|
|
72
73
|
maggie dash structure-validate --model FILE --evidence FILE
|
|
73
|
-
maggie design progressive-check|css-check|css-cascade-check --evidence FILE
|
|
74
|
+
maggie design progressive-check|css-check|css-cascade-check|style-check --evidence FILE
|
|
74
75
|
maggie design dash-init|dash-validate|sample-init|sample-validate [options]
|
|
75
76
|
maggie seo privacy-check --evidence FILE
|
|
76
77
|
maggie content FILE --source PROVIDER --project PATH --confirm
|
|
@@ -90,6 +91,7 @@ Usage:
|
|
|
90
91
|
maggie clone-to-template validate <id>
|
|
91
92
|
maggie clone run <homepage-url> --run-id <id>
|
|
92
93
|
maggie clone status --run-id <id>
|
|
94
|
+
maggie clone interactions --run-id <id> --browse PATH --interactions FILE
|
|
93
95
|
maggie design run <target-url> --clone-run <id>
|
|
94
96
|
maggie design reference-ui --project PATH --reference PATH --surface blog,service --confirm
|
|
95
97
|
maggie design init --project PATH --surface blog|service --reference-run PATH --confirm
|
|
@@ -99,6 +101,7 @@ Usage:
|
|
|
99
101
|
maggie design icon-inventory --project PATH --source-dir src --runtime assets/icons.css --output docs/icon-inventory.json
|
|
100
102
|
maggie design icon-release-gate --icon-report FILE --browser-report FILE --output FILE
|
|
101
103
|
maggie design author --project PATH --route /about --purpose TEXT --audience TEXT --confirm
|
|
104
|
+
maggie design markup-check --html FILE [--require-content-keys]
|
|
102
105
|
maggie design in-place --project PATH --route /pricing [--content-source PATH]
|
|
103
106
|
maggie design section --project PATH --route /pricing --section-id ID
|
|
104
107
|
maggie design section-validate --before FILE --after FILE --section-id ID
|
|
@@ -131,6 +134,13 @@ Usage:
|
|
|
131
134
|
maggie migration identity --identity-file FILE [--expected-file FILE]
|
|
132
135
|
maggie schedule PATH/.maggie/schedule.json --project PATH
|
|
133
136
|
maggie analytics [traffic-audit|release-gate] --project PATH --environment staging
|
|
137
|
+
maggie analytics gsc-readiness --gsc-evidence FILE
|
|
138
|
+
maggie media [image-policy|video-policy|video-job|video-playback] [--policy/--job/--evidence FILE]
|
|
139
|
+
maggie provenance --project PATH [--source PATH] [--output FILE]
|
|
140
|
+
maggie scaffold --project PATH --framework astro|nextjs|sveltekit|nuxt|vite-react|vite-vue [--write --confirm]
|
|
141
|
+
maggie brand-kit --manifest FILE | --project PATH --design DESIGN.md [--write --confirm]
|
|
142
|
+
maggie npm11 --project PATH [--smoke --confirm]
|
|
143
|
+
maggie booking-delivery [--policy FILE]
|
|
134
144
|
maggie release PATH --environment staging --target vps-with-cloudflare-dns
|
|
135
145
|
maggie api lifecycle --project PATH [--execute --allow-quota]
|
|
136
146
|
maggie memory <init|list|search|context|add|record-error|transition|export> --project PATH
|
|
@@ -141,7 +151,7 @@ Usage:
|
|
|
141
151
|
maggie site-audit URL [--crawl] [--access-log FILE] [--require-sitemap-request] [--languages en-GB,es-MX,ja-JP] [--check-hreflang] [--check-internal-links]
|
|
142
152
|
maggie site-audit URL --crawl --save-baseline FILE --reviewer NAME
|
|
143
153
|
maggie site-audit URL --crawl --baseline FILE [--reason-all REASON]
|
|
144
|
-
maggie browser-audit URL --browse PATH --output DIR --required SELECTOR [--sticky SELECTOR]
|
|
154
|
+
maggie browser-audit URL --browse PATH --output DIR --required SELECTOR [--sticky SELECTOR] [--interactions FILE]
|
|
145
155
|
maggie verification coverage --contract FILE --evidence FILE
|
|
146
156
|
maggie ops audit|preflight|verify|lockfiles|seed-manifest|google-capabilities|favicon-check --project PATH
|
|
147
157
|
maggie ops google-capabilities --project PATH --report FILE [--output FILE]
|
|
@@ -405,6 +415,10 @@ function install(args) {
|
|
|
405
415
|
}
|
|
406
416
|
|
|
407
417
|
function update(args) {
|
|
418
|
+
if (args.some((item) => ["--help", "-h"].includes(item))) {
|
|
419
|
+
usage();
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
408
422
|
const root = projectRoot(args);
|
|
409
423
|
const skills = selectedSkills(args);
|
|
410
424
|
const force = args.includes("--force");
|
|
@@ -570,7 +584,8 @@ try {
|
|
|
570
584
|
else if (command === "clone-to-template") workflowCli("maggie_clone_to_template.py", args);
|
|
571
585
|
else if (command === "design" && args[0] === "icon-inventory") workflowCli("maggie_icon_inventory.py", args.slice(1));
|
|
572
586
|
else if (command === "design" && args[0] === "icon-release-gate") workflowCli("maggie_icon_release_gate.py", args.slice(1));
|
|
573
|
-
else if (command === "design" && ["progressive-check", "css-check", "css-cascade-check", "dash-init", "dash-validate", "sample-init", "sample-validate"].includes(args[0])) workflowCli("maggie_contracts.py", args);
|
|
587
|
+
else if (command === "design" && ["progressive-check", "css-check", "css-cascade-check", "style-check", "dash-init", "dash-validate", "sample-init", "sample-validate"].includes(args[0])) workflowCli("maggie_contracts.py", args);
|
|
588
|
+
else if (command === "design" && args[0] === "markup-check") workflowCli("maggie_design.py", args);
|
|
574
589
|
else if (command === "design") workflowCli("maggie_design.py", args);
|
|
575
590
|
else if (command === "auth") workflowCli("maggie_auth.py", args);
|
|
576
591
|
else if (command === "blog") workflowCli("maggie_blog.py", args);
|
|
@@ -587,6 +602,10 @@ try {
|
|
|
587
602
|
else if (command === "migration") workflowCli("maggie_migration.py", args);
|
|
588
603
|
else if (command === "schedule") workflowCli("maggie_schedule.py", args);
|
|
589
604
|
else if (command === "analytics") workflowCli("maggie_analytics.py", args);
|
|
605
|
+
else if (["media", "provenance", "scaffold", "brand-kit", "npm11", "booking-delivery"].includes(command)) {
|
|
606
|
+
const workflowArgs = command === "media" ? ["media", ...args] : command === "brand-kit" ? ["brand-kit", ...args] : command === "npm11" ? ["npm11", ...args] : command === "booking-delivery" ? ["booking-delivery", ...args] : [command, ...args];
|
|
607
|
+
workflowCli("maggie_workflows.py", workflowArgs);
|
|
608
|
+
}
|
|
590
609
|
else if (command === "release") workflowCli("maggie_release.py", args);
|
|
591
610
|
else if (command === "bootstrap") workflowCli("maggie.py", ["bootstrap", ...args]);
|
|
592
611
|
else if (command === "api") workflowCli("maggie.py", ["api", ...args]);
|
|
@@ -597,7 +616,7 @@ try {
|
|
|
597
616
|
else if (command === "site-audit") workflowCli("site_audit.py", args);
|
|
598
617
|
else if (command === "browser-audit") workflowCli("maggie_browser_audit.py", args);
|
|
599
618
|
else if (command === "verification") workflowCli("maggie_verification.py", args);
|
|
600
|
-
else if (command === "dash" && ["capabilities-validate", "structure-validate"].includes(args[0])) workflowCli("maggie_contracts.py", args);
|
|
619
|
+
else if (command === "dash" && ["capabilities-validate", "structure-validate", "content-overrides-check", "session-check", "cache-boundary-check"].includes(args[0])) workflowCli("maggie_contracts.py", args);
|
|
601
620
|
else if (command === "dash") workflowCli("maggie_dash.py", args);
|
|
602
621
|
else if (command === "booking") workflowCli("maggie_booking.py", args);
|
|
603
622
|
else if (command === "agent-content") workflowCli("maggie_agent_content.py", args);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-clone/interaction-state-v1.schema.json",
|
|
4
|
+
"title": "Maggie clone interaction-state evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "sourceRunId", "interactionManifest", "viewports", "states"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-clone-interaction-state.v1"},
|
|
9
|
+
"sourceRunId": {"type": "string", "pattern": "^[A-Za-z0-9._-]+$"},
|
|
10
|
+
"interactionManifest": {"type": "string", "minLength": 1},
|
|
11
|
+
"viewports": {"type": "array", "items": {"enum": ["desktop", "tablet", "mobile"]}, "minItems": 3, "uniqueItems": true},
|
|
12
|
+
"states": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"minItems": 1,
|
|
15
|
+
"items": {"type": "object", "required": ["viewport", "stepId", "status"], "properties": {
|
|
16
|
+
"viewport": {"enum": ["desktop", "tablet", "mobile"]},
|
|
17
|
+
"stepId": {"type": "string"},
|
|
18
|
+
"status": {"enum": ["passed", "failed"]},
|
|
19
|
+
"screenshot": {"type": ["string", "null"]},
|
|
20
|
+
"error": {"type": ["string", "null"]}
|
|
21
|
+
}, "additionalProperties": false}
|
|
22
|
+
},
|
|
23
|
+
"redacted": {"const": true}
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-content/provenance-v1.schema.json",
|
|
4
|
+
"title": "Maggie git-backed content provenance v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "commit", "branch", "dirty", "sourceRevision", "authoringBoundary"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-content-provenance.v1"},
|
|
9
|
+
"commit": {"type": "string", "pattern": "^[0-9a-f]{7,64}$"},
|
|
10
|
+
"branch": {"type": "string", "minLength": 1},
|
|
11
|
+
"dirty": {"type": "boolean"},
|
|
12
|
+
"sourceRevision": {"type": "string", "pattern": "^[0-9a-f]{7,64}$"},
|
|
13
|
+
"sourcePath": {"type": "string", "minLength": 1},
|
|
14
|
+
"authoringBoundary": {"enum": ["git-source", "host-runtime", "generated-artifact"]},
|
|
15
|
+
"tracked": {"type": "boolean"},
|
|
16
|
+
"staleWritePolicy": {"const": "reject-unless-source-revision-matches"},
|
|
17
|
+
"capturedAt": {"type": "string", "format": "date-time"}
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-design/brand-kit-v1.schema.json",
|
|
4
|
+
"title": "Maggie reusable brand kit v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "designTokens", "logo", "typography", "icons", "assetManifest", "preview", "designBoundary"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-brand-kit.v1"},
|
|
9
|
+
"designTokens": {"type": "object", "minProperties": 1},
|
|
10
|
+
"logo": {"type": "object", "required": ["primary", "variants"], "properties": {"primary": {"type": "string"}, "variants": {"type": "array", "items": {"type": "string"}}}, "additionalProperties": false},
|
|
11
|
+
"typography": {"type": "object", "required": ["families", "weights"], "properties": {"families": {"type": "array", "minItems": 1}, "weights": {"type": "array", "minItems": 1}}, "additionalProperties": false},
|
|
12
|
+
"icons": {"type": "object", "required": ["library", "policy"], "properties": {"library": {"type": "string"}, "policy": {"enum": ["library-first", "host-defined"]}}, "additionalProperties": false},
|
|
13
|
+
"assetManifest": {"type": "string", "minLength": 1},
|
|
14
|
+
"preview": {"type": "string", "minLength": 1},
|
|
15
|
+
"designBoundary": {"const": "DESIGN.md-and-host-tokens-are-source-of-truth"}
|
|
16
|
+
},
|
|
17
|
+
"additionalProperties": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/browser-interactions-v1.schema.json",
|
|
4
|
+
"title": "Maggie browser interaction evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "steps"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-browser-interactions.v1"},
|
|
9
|
+
"steps": {
|
|
10
|
+
"type": "array",
|
|
11
|
+
"minItems": 1,
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": ["id", "action"],
|
|
15
|
+
"properties": {
|
|
16
|
+
"id": {"type": "string", "pattern": "^[A-Za-z0-9._-]+$"},
|
|
17
|
+
"action": {"enum": ["click", "fill", "type", "select", "press", "wait", "assert-visible", "assert-enabled", "assert-disabled", "assert-checked", "assert-editable", "assert-text", "assert-style", "assert-no-request"]},
|
|
18
|
+
"selector": {"type": "string"},
|
|
19
|
+
"property": {"type": "string"},
|
|
20
|
+
"origin": {"type": "string"}
|
|
21
|
+
},
|
|
22
|
+
"additionalProperties": true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/style-editing-v1.schema.json",
|
|
4
|
+
"title": "Maggie design style editing contract v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "properties", "templates"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-style-editing.v1"},
|
|
9
|
+
"properties": {
|
|
10
|
+
"type": "array",
|
|
11
|
+
"minItems": 1,
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": ["name", "pattern"],
|
|
15
|
+
"properties": {
|
|
16
|
+
"name": {"type": "string", "pattern": "^[A-Za-z][A-Za-z0-9-]*$"},
|
|
17
|
+
"pattern": {"type": "string", "minLength": 1},
|
|
18
|
+
"scale": {"type": "array", "items": {"type": "string"}}
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": false
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"templates": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["id", "styles"],
|
|
28
|
+
"properties": {"id": {"type": "string"}, "appliesTo": {"type": "string"}, "styles": {"type": "object"}},
|
|
29
|
+
"additionalProperties": false
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"customValues": {"const": "allow only after property pattern validation"}
|
|
33
|
+
},
|
|
34
|
+
"additionalProperties": false
|
|
35
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/image-generation-policy-v1.json",
|
|
4
|
+
"title": "Maggie Gemini image generation and editing policy v1",
|
|
5
|
+
"schemaVersion": "maggie-image-generation-policy.v1",
|
|
6
|
+
"provider": "google-gemini",
|
|
7
|
+
"model": "gemini-3.1-flash-image",
|
|
8
|
+
"fallbackModel": "gemini-3.1-flash-lite-image",
|
|
9
|
+
"endpointEnv": "GEMINI_API_ENDPOINT",
|
|
10
|
+
"apiKeyEnv": "GEMINI_API_KEY",
|
|
11
|
+
"billingMode": "host-managed-or-byok",
|
|
12
|
+
"rights": {
|
|
13
|
+
"inputRightsRequired": true,
|
|
14
|
+
"outputReviewRequired": true,
|
|
15
|
+
"syntheticWatermarkExpected": true
|
|
16
|
+
},
|
|
17
|
+
"moderation": {
|
|
18
|
+
"preflightRequired": true,
|
|
19
|
+
"postGenerationReviewRequired": true,
|
|
20
|
+
"blockedOutputPolicy": "discard-and-report"
|
|
21
|
+
},
|
|
22
|
+
"outputs": {
|
|
23
|
+
"allowedMimeTypes": ["image/png", "image/jpeg", "image/webp"],
|
|
24
|
+
"allowedSizes": ["1K", "2K", "4K"],
|
|
25
|
+
"maxReferenceImages": 14
|
|
26
|
+
},
|
|
27
|
+
"provenance": ["provider", "model", "promptHash", "inputAssetHashes", "sourceRevision", "createdAt"]
|
|
28
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-generation-policy-v1.json",
|
|
4
|
+
"title": "Maggie Gemini hero video generation policy v1",
|
|
5
|
+
"schemaVersion": "maggie-video-generation-policy.v1",
|
|
6
|
+
"provider": "google-gemini",
|
|
7
|
+
"model": "gemini-omni-1.1-flash",
|
|
8
|
+
"fallbackModel": "veo-3.1-generate-preview",
|
|
9
|
+
"endpointEnv": "GEMINI_API_ENDPOINT",
|
|
10
|
+
"apiKeyEnv": "GEMINI_API_KEY",
|
|
11
|
+
"billingMode": "host-managed-or-byok",
|
|
12
|
+
"costPolicy": {
|
|
13
|
+
"budgetRequired": true,
|
|
14
|
+
"maxAttemptsPerJob": 3,
|
|
15
|
+
"duplicateChargeProtection": "idempotency-key"
|
|
16
|
+
},
|
|
17
|
+
"rights": {
|
|
18
|
+
"inputRightsRequired": true,
|
|
19
|
+
"outputReviewRequired": true,
|
|
20
|
+
"audioRightsRequired": true
|
|
21
|
+
},
|
|
22
|
+
"moderation": {
|
|
23
|
+
"preflightRequired": true,
|
|
24
|
+
"postGenerationReviewRequired": true,
|
|
25
|
+
"blockedOutputPolicy": "discard-and-report"
|
|
26
|
+
},
|
|
27
|
+
"storage": {
|
|
28
|
+
"adapter": "host-owned-object-storage",
|
|
29
|
+
"publicUrlPolicy": "signed-or-approved-public-url",
|
|
30
|
+
"retentionDaysRequired": true,
|
|
31
|
+
"sourceAssetAndJobMetadataRequired": true
|
|
32
|
+
},
|
|
33
|
+
"playback": {
|
|
34
|
+
"posterRequired": true,
|
|
35
|
+
"reducedMotionFallbackRequired": true,
|
|
36
|
+
"saveDataFallbackRequired": true,
|
|
37
|
+
"mobileSafe": true
|
|
38
|
+
},
|
|
39
|
+
"provenance": ["provider", "model", "promptHash", "inputAssetHashes", "sourceRevision", "createdAt"]
|
|
40
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-job-v1.schema.json",
|
|
4
|
+
"title": "Maggie video generation job v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "jobId", "idempotencyKey", "state", "attempt", "sourceRevision", "provenance"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-video-job.v1"},
|
|
9
|
+
"jobId": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$"},
|
|
10
|
+
"idempotencyKey": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$"},
|
|
11
|
+
"state": {"enum": ["queued", "running", "retrying", "cancelled", "blocked", "completed", "failed", "dead-letter"]},
|
|
12
|
+
"attempt": {"type": "integer", "minimum": 0, "maximum": 3},
|
|
13
|
+
"sourceRevision": {"type": "object"},
|
|
14
|
+
"provenance": {"type": "object"},
|
|
15
|
+
"segments": {"type": "array", "items": {"type": "object"}},
|
|
16
|
+
"storage": {"type": "object"},
|
|
17
|
+
"errorClass": {"enum": ["provider-transient", "provider-permanent", "moderation", "rights", "validation", "cancelled", "cost-limit", "unknown"]}
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-playback-evidence-v1.schema.json",
|
|
4
|
+
"title": "Maggie video playback evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "jobId", "sourceRevision", "viewports", "rawProviderPayloadIncluded"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-video-playback-evidence.v1"},
|
|
9
|
+
"jobId": {"type": "string"},
|
|
10
|
+
"sourceRevision": {"type": "object"},
|
|
11
|
+
"viewports": {"type": "array", "minItems": 3, "items": {"type": "object", "required": ["viewport", "status", "posterVisible", "reducedMotionFallback", "saveDataFallback"], "properties": {"viewport": {"enum": ["desktop", "tablet", "mobile"]}, "status": {"const": "passed"}, "posterVisible": {"const": true}, "reducedMotionFallback": {"const": true}, "saveDataFallback": {"const": true}}, "additionalProperties": false}},
|
|
12
|
+
"rawProviderPayloadIncluded": {"const": false}
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-ops/npm11-preflight-v1.schema.json",
|
|
4
|
+
"title": "Maggie npm 11 install preflight v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "supportMatrix", "node", "npm", "installScriptPolicy", "lockfilePolicy", "smoke"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-npm11-preflight.v1"},
|
|
9
|
+
"supportMatrix": {"type": "array", "minItems": 4, "items": {"type": "object", "required": ["packageManager", "supportedVersions", "installCommand", "lockfile", "lifecyclePolicy"], "properties": {"packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]}, "supportedVersions": {"type": "array", "minItems": 1}, "installCommand": {"type": "string"}, "lockfile": {"type": "string"}, "lifecyclePolicy": {"const": "ignore-scripts-smoke-first"}}, "additionalProperties": false}},
|
|
10
|
+
"node": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
|
|
11
|
+
"npm": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
|
|
12
|
+
"installScriptPolicy": {"enum": ["audit-before-run", "ignore-scripts-smoke-first"]},
|
|
13
|
+
"lockfilePolicy": {"enum": ["package-lock-v3", "host-package-manager"]},
|
|
14
|
+
"smoke": {"type": "object", "required": ["ignoreScripts", "passed"], "properties": {"ignoreScripts": {"type": "boolean"}, "passed": {"type": "boolean"}}, "additionalProperties": false}
|
|
15
|
+
},
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-scaffold/host-scaffold-v1.schema.json",
|
|
4
|
+
"title": "Maggie empty-project host scaffold v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "framework", "language", "packageManager", "installPolicy", "hostHandoff"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-host-scaffold.v1"},
|
|
9
|
+
"framework": {"enum": ["astro", "nextjs", "sveltekit", "nuxt", "vite-react", "vite-vue"]},
|
|
10
|
+
"language": {"enum": ["typescript", "javascript"]},
|
|
11
|
+
"packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]},
|
|
12
|
+
"installPolicy": {"type": "object", "required": ["requiresConfirm", "secretsByDefault", "migrationsByDefault"], "properties": {
|
|
13
|
+
"requiresConfirm": {"const": true},
|
|
14
|
+
"secretsByDefault": {"const": "never"},
|
|
15
|
+
"migrationsByDefault": {"const": "never"},
|
|
16
|
+
"installDependencies": {"type": "boolean"}
|
|
17
|
+
}, "additionalProperties": false},
|
|
18
|
+
"hostHandoff": {"type": "object", "required": ["generatedFiles", "rollbackPlan", "nextCommands"], "properties": {
|
|
19
|
+
"generatedFiles": {"type": "array", "items": {"type": "string"}},
|
|
20
|
+
"rollbackPlan": {"type": "string", "minLength": 1},
|
|
21
|
+
"nextCommands": {"type": "array", "items": {"type": "string"}}
|
|
22
|
+
}, "additionalProperties": false}
|
|
23
|
+
},
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-seo/gsc-readiness-v1.schema.json",
|
|
4
|
+
"title": "Maggie Search Console readiness evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "property", "verification", "canonical", "robots", "sitemap", "authorization", "queryReadback", "productionSmoke"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-gsc-readiness.v1"},
|
|
9
|
+
"property": {"type": "object", "required": ["siteUrl", "type"], "properties": {"siteUrl": {"type": "string", "format": "uri"}, "type": {"enum": ["domain", "url-prefix"]}}, "additionalProperties": false},
|
|
10
|
+
"verification": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "method": {"enum": ["dns", "html", "meta"]}}, "additionalProperties": false},
|
|
11
|
+
"canonical": {"type": "object", "required": ["passed", "origin"], "properties": {"passed": {"const": true}, "origin": {"type": "string"}}, "additionalProperties": false},
|
|
12
|
+
"robots": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false},
|
|
13
|
+
"sitemap": {"type": "object", "required": ["passed", "url"], "properties": {"passed": {"const": true}, "url": {"type": "string", "format": "uri"}}, "additionalProperties": false},
|
|
14
|
+
"authorization": {"type": "object", "required": ["readOnly", "authorized"], "properties": {"readOnly": {"const": true}, "authorized": {"const": true}}, "additionalProperties": false},
|
|
15
|
+
"queryReadback": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "rows": {"type": "integer", "minimum": 0}}, "additionalProperties": false},
|
|
16
|
+
"productionSmoke": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false}
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "maggie-booking-delivery-provider.v1",
|
|
3
|
+
"email": {"provider": "resend", "channel": "email", "secretEnv": "RESEND_API_KEY"},
|
|
4
|
+
"sms": {"provider": "twilio", "channel": "sms", "secretEnv": "TWILIO_AUTH_TOKEN"},
|
|
5
|
+
"confirmationRule": "provider-acknowledged-only",
|
|
6
|
+
"retryPolicy": {"maxAttempts": 5, "backoff": "exponential-jitter", "idempotency": "booking-event-and-channel"},
|
|
7
|
+
"deadLetterPolicy": {"afterMaxAttempts": "dead-letter", "replayRequiresExplicitAction": true}
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-service-booking/delivery-provider-v1.schema.json",
|
|
4
|
+
"title": "Maggie booking notification delivery provider v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "email", "sms", "confirmationRule", "retryPolicy", "deadLetterPolicy"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-booking-delivery-provider.v1"},
|
|
9
|
+
"email": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["resend", "provider-neutral"]}, "channel": {"const": "email"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
|
|
10
|
+
"sms": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["twilio", "provider-neutral"]}, "channel": {"const": "sms"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
|
|
11
|
+
"confirmationRule": {"const": "provider-acknowledged-only"},
|
|
12
|
+
"retryPolicy": {"type": "object", "required": ["maxAttempts", "backoff", "idempotency"], "properties": {"maxAttempts": {"type": "integer", "minimum": 1, "maximum": 10}, "backoff": {"enum": ["exponential-jitter", "fixed"]}, "idempotency": {"const": "booking-event-and-channel"}}, "additionalProperties": false},
|
|
13
|
+
"deadLetterPolicy": {"type": "object", "required": ["afterMaxAttempts", "replayRequiresExplicitAction"], "properties": {"afterMaxAttempts": {"const": "dead-letter"}, "replayRequiresExplicitAction": {"const": true}}, "additionalProperties": false}
|
|
14
|
+
},
|
|
15
|
+
"additionalProperties": false
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.noblox.app/contracts/browser-session-v1.schema.json",
|
|
4
|
+
"title": "MaggieDash browser QA session contract v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "mintingBoundary", "passwordHandling", "ttlMinutes", "mintRoute", "revokeRoute"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-browser-session.v1"},
|
|
9
|
+
"mintingBoundary": {"const": "host-adapter"},
|
|
10
|
+
"passwordHandling": {"const": "never-exposed"},
|
|
11
|
+
"ttlMinutes": {"type": "integer", "minimum": 1, "maximum": 240},
|
|
12
|
+
"mintRoute": {"type": "string", "pattern": "^/"},
|
|
13
|
+
"revokeRoute": {"type": "string", "pattern": "^/"},
|
|
14
|
+
"cookie": {"type": "object", "additionalProperties": true},
|
|
15
|
+
"roles": {"type": "array", "items": {"type": "string"}}
|
|
16
|
+
},
|
|
17
|
+
"additionalProperties": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.noblox.app/contracts/content-overrides-v1.schema.json",
|
|
4
|
+
"title": "MaggieDash provider-neutral content overrides v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "readAtRequestTime", "sourceLiteralIsFallback", "writesCreateRevision", "conflictRequiresSourceRevision", "orphanPolicy", "protectedFields"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-content-overrides.v1"},
|
|
9
|
+
"readAtRequestTime": {"const": true},
|
|
10
|
+
"sourceLiteralIsFallback": {"const": true},
|
|
11
|
+
"writesCreateRevision": {"const": true},
|
|
12
|
+
"conflictRequiresSourceRevision": {"const": true},
|
|
13
|
+
"orphanPolicy": {"const": "report-and-never-publish"},
|
|
14
|
+
"protectedFields": {"type": "array", "minItems": 1, "items": {"type": "string"}},
|
|
15
|
+
"storage": {"type": "string"},
|
|
16
|
+
"transport": {"type": "string"}
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.noblox.app/contracts/public-session-cache-v1.schema.json",
|
|
4
|
+
"title": "MaggieDash public session cache boundary v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "publicHtmlVariesBySession", "sessionCookieHttpOnly", "identityHintCookieReadable", "identityRequestWhenHintAbsent"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-public-session-cache.v1"},
|
|
9
|
+
"publicHtmlVariesBySession": {"const": false},
|
|
10
|
+
"sessionCookieHttpOnly": {"const": true},
|
|
11
|
+
"identityHintCookieReadable": {"const": true},
|
|
12
|
+
"identityRequestWhenHintAbsent": {"const": false},
|
|
13
|
+
"hintCookieName": {"type": "string", "minLength": 1},
|
|
14
|
+
"sessionCookieName": {"type": "string", "minLength": 1}
|
|
15
|
+
},
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
}
|