@extenshi/mcp 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/bff.d.ts +14 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +2 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +18 -18
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +4 -2
- package/dist/development-guide.js.map +1 -1
- package/dist/landing-read.d.ts +72 -0
- package/dist/landing-read.d.ts.map +1 -0
- package/dist/landing-read.js +136 -0
- package/dist/landing-read.js.map +1 -0
- package/dist/landing-workflow.js +3 -3
- package/dist/landing-workflow.js.map +1 -1
- package/dist/license-terms-tools.d.ts +17 -0
- package/dist/license-terms-tools.d.ts.map +1 -0
- package/dist/license-terms-tools.js +56 -0
- package/dist/license-terms-tools.js.map +1 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/tools.d.ts +25 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +72 -39
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact reads of the hosted landing page (DX report 2026-10-10 §2 row 15).
|
|
3
|
+
*
|
|
4
|
+
* `get_landing_page` returns the form the live version was rendered from. With
|
|
5
|
+
* eleven locales and an inline logo that form is ~80 KB — more than an MCP
|
|
6
|
+
* response carries. So the tool answers with a summary by default (what is
|
|
7
|
+
* live, which locales and sections exist, how big each part is) and returns
|
|
8
|
+
* the form only on request, optionally narrowed to some top-level fields and
|
|
9
|
+
* some translations.
|
|
10
|
+
*
|
|
11
|
+
* Shaped here, from the response the BFF already sends, rather than in the BFF:
|
|
12
|
+
* every BFF version returns the same full form, so this works against an old
|
|
13
|
+
* BFF and a new one alike, and the BFF contract does not change.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
export declare const LANDING_READ_VIEWS: readonly ["summary", "full"];
|
|
17
|
+
export type LandingReadView = (typeof LANDING_READ_VIEWS)[number];
|
|
18
|
+
/** get_landing_page parameters besides projectId. */
|
|
19
|
+
export declare const LANDING_READ_SHAPE: {
|
|
20
|
+
view: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
|
|
21
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
22
|
+
locales: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
+
};
|
|
24
|
+
export interface LandingReadOptions {
|
|
25
|
+
view?: LandingReadView;
|
|
26
|
+
/** Top-level form keys to keep in a full read (e.g. `sections`, `seo`). */
|
|
27
|
+
fields?: readonly string[];
|
|
28
|
+
/** Translations to keep in `form.locales` in a full read (`de`, `pt-BR`). The base content is always kept. */
|
|
29
|
+
locales?: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
type Json = Record<string, unknown>;
|
|
32
|
+
/** What an agent decides from before asking for the form itself. */
|
|
33
|
+
export declare function summarizeLandingForm(form: Json): {
|
|
34
|
+
bytes: number;
|
|
35
|
+
schemaVersion: {};
|
|
36
|
+
extensionName: unknown;
|
|
37
|
+
tagline: unknown;
|
|
38
|
+
theme: unknown;
|
|
39
|
+
accentColor: unknown;
|
|
40
|
+
defaultLocale: string;
|
|
41
|
+
translations: {
|
|
42
|
+
locale: string;
|
|
43
|
+
bytes: number;
|
|
44
|
+
}[];
|
|
45
|
+
sections: {
|
|
46
|
+
bytes: number;
|
|
47
|
+
hidden?: boolean | undefined;
|
|
48
|
+
index: number;
|
|
49
|
+
id: unknown;
|
|
50
|
+
type: unknown;
|
|
51
|
+
}[];
|
|
52
|
+
links: {
|
|
53
|
+
[k: string]: string;
|
|
54
|
+
};
|
|
55
|
+
logo: {
|
|
56
|
+
kind: "svg" | "data-url" | "url" | "none";
|
|
57
|
+
bytes: number;
|
|
58
|
+
};
|
|
59
|
+
features: number;
|
|
60
|
+
screenshots: number;
|
|
61
|
+
fields: {
|
|
62
|
+
field: string;
|
|
63
|
+
bytes: number;
|
|
64
|
+
}[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Shape a `getLandingPage` response for the agent. Anything that is not the
|
|
68
|
+
* expected `{ page, url, form }` object passes through untouched.
|
|
69
|
+
*/
|
|
70
|
+
export declare function shapeLandingRead(result: unknown, options?: LandingReadOptions): unknown;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=landing-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing-read.d.ts","sourceRoot":"","sources":["../src/landing-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,kBAAkB,8BAA+B,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,qDAAqD;AACrD,eAAO,MAAM,kBAAkB;;;;CAqB9B,CAAA;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,8GAA8G;IAC9G,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B;AAED,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA2BnC,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;;cARV,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;eAAS,MAAM;;;;;;;;EA0CtF;AA0BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAwB3F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact reads of the hosted landing page (DX report 2026-10-10 §2 row 15).
|
|
3
|
+
*
|
|
4
|
+
* `get_landing_page` returns the form the live version was rendered from. With
|
|
5
|
+
* eleven locales and an inline logo that form is ~80 KB — more than an MCP
|
|
6
|
+
* response carries. So the tool answers with a summary by default (what is
|
|
7
|
+
* live, which locales and sections exist, how big each part is) and returns
|
|
8
|
+
* the form only on request, optionally narrowed to some top-level fields and
|
|
9
|
+
* some translations.
|
|
10
|
+
*
|
|
11
|
+
* Shaped here, from the response the BFF already sends, rather than in the BFF:
|
|
12
|
+
* every BFF version returns the same full form, so this works against an old
|
|
13
|
+
* BFF and a new one alike, and the BFF contract does not change.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { normalizeLandingLocale } from './landing-sections.js';
|
|
17
|
+
export const LANDING_READ_VIEWS = ['summary', 'full'];
|
|
18
|
+
/** get_landing_page parameters besides projectId. */
|
|
19
|
+
export const LANDING_READ_SHAPE = {
|
|
20
|
+
view: z
|
|
21
|
+
.enum(LANDING_READ_VIEWS)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('"summary" (default): what is live and how big each part of the form is. "full": the form itself.'),
|
|
24
|
+
fields: z
|
|
25
|
+
.array(z.string().max(40))
|
|
26
|
+
.max(40)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('With view "full": top-level form keys to return, e.g. ["sections", "seo"] (names and sizes are in formSummary.fields). Default: all.'),
|
|
29
|
+
locales: z
|
|
30
|
+
.array(z.string().max(35))
|
|
31
|
+
.max(100)
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('With view "full": translations to keep in form.locales, e.g. ["de"]; [] drops them all. The base content is part of every full read.'),
|
|
34
|
+
};
|
|
35
|
+
const isObject = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
36
|
+
const bytesOf = (value) => value === undefined ? 0 : new TextEncoder().encode(JSON.stringify(value)).length;
|
|
37
|
+
const LINK_FIELDS = [
|
|
38
|
+
'homepageUrl',
|
|
39
|
+
'chromeUrl',
|
|
40
|
+
'firefoxUrl',
|
|
41
|
+
'edgeUrl',
|
|
42
|
+
'privacyPolicyUrl',
|
|
43
|
+
'supportUrl',
|
|
44
|
+
'uninstallUrl',
|
|
45
|
+
'termsUrl',
|
|
46
|
+
];
|
|
47
|
+
/** `bytes` is measured like every other size here: the field as JSON (quotes included). */
|
|
48
|
+
function logoOf(form) {
|
|
49
|
+
if (typeof form.logoSvg === 'string' && form.logoSvg)
|
|
50
|
+
return { kind: 'svg', bytes: bytesOf(form.logoSvg) };
|
|
51
|
+
if (typeof form.logoUrl === 'string' && form.logoUrl)
|
|
52
|
+
return { kind: form.logoUrl.startsWith('data:') ? 'data-url' : 'url', bytes: bytesOf(form.logoUrl) };
|
|
53
|
+
return { kind: 'none', bytes: 0 };
|
|
54
|
+
}
|
|
55
|
+
/** What an agent decides from before asking for the form itself. */
|
|
56
|
+
export function summarizeLandingForm(form) {
|
|
57
|
+
const sections = Array.isArray(form.sections) ? form.sections : [];
|
|
58
|
+
const locales = isObject(form.locales) ? form.locales : {};
|
|
59
|
+
const links = Object.fromEntries(LINK_FIELDS.flatMap((key) => (typeof form[key] === 'string' && form[key] ? [[key, form[key]]] : [])));
|
|
60
|
+
return {
|
|
61
|
+
bytes: bytesOf(form),
|
|
62
|
+
schemaVersion: form.schemaVersion ?? 1,
|
|
63
|
+
extensionName: form.extensionName,
|
|
64
|
+
tagline: form.tagline,
|
|
65
|
+
theme: form.theme,
|
|
66
|
+
accentColor: form.accentColor,
|
|
67
|
+
defaultLocale: normalizeLandingLocale(form.defaultLocale) ?? 'en',
|
|
68
|
+
translations: Object.entries(locales).map(([locale, content]) => ({ locale, bytes: bytesOf(content) })),
|
|
69
|
+
sections: sections.map((section, index) => {
|
|
70
|
+
const s = isObject(section) ? section : {};
|
|
71
|
+
return {
|
|
72
|
+
index,
|
|
73
|
+
id: s.id,
|
|
74
|
+
type: s.type,
|
|
75
|
+
...(s.hidden ? { hidden: true } : {}),
|
|
76
|
+
bytes: bytesOf(section),
|
|
77
|
+
};
|
|
78
|
+
}),
|
|
79
|
+
links,
|
|
80
|
+
logo: logoOf(form),
|
|
81
|
+
features: Array.isArray(form.features) ? form.features.length : 0,
|
|
82
|
+
screenshots: Array.isArray(form.screenshots) ? form.screenshots.length : 0,
|
|
83
|
+
// Largest first: the parts worth leaving out of a full read.
|
|
84
|
+
fields: Object.keys(form)
|
|
85
|
+
.map((field) => ({ field, bytes: bytesOf(form[field]) }))
|
|
86
|
+
.sort((a, b) => b.bytes - a.bytes),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function narrowForm(form, fields, locales) {
|
|
90
|
+
let out = form;
|
|
91
|
+
if (fields?.length) {
|
|
92
|
+
// schemaVersion decides how the rest reads, so it always comes along; asking
|
|
93
|
+
// for translations by `locales` keeps `locales` even when `fields` omits it.
|
|
94
|
+
const keep = new Set([...fields, 'schemaVersion', ...(locales ? ['locales'] : [])]);
|
|
95
|
+
out = Object.fromEntries(Object.entries(out).filter(([key]) => keep.has(key)));
|
|
96
|
+
}
|
|
97
|
+
if (locales && isObject(out.locales)) {
|
|
98
|
+
const wanted = new Set(locales.map((l) => normalizeLandingLocale(l) ?? l));
|
|
99
|
+
out = {
|
|
100
|
+
...out,
|
|
101
|
+
locales: Object.fromEntries(Object.entries(out.locales).filter(([key]) => wanted.has(normalizeLandingLocale(key) ?? key))),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Shape a `getLandingPage` response for the agent. Anything that is not the
|
|
108
|
+
* expected `{ page, url, form }` object passes through untouched.
|
|
109
|
+
*/
|
|
110
|
+
export function shapeLandingRead(result, options = {}) {
|
|
111
|
+
if (!isObject(result) || !('form' in result))
|
|
112
|
+
return result;
|
|
113
|
+
const form = isObject(result.form) ? result.form : null;
|
|
114
|
+
if ((options.view ?? 'summary') === 'full') {
|
|
115
|
+
const narrowed = form ? narrowForm(form, options.fields, options.locales) : result.form;
|
|
116
|
+
return {
|
|
117
|
+
...result,
|
|
118
|
+
form: narrowed,
|
|
119
|
+
...(form && narrowed !== form
|
|
120
|
+
? { formBytes: { full: bytesOf(form), returned: bytesOf(narrowed) } }
|
|
121
|
+
: {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const { form: _form, ...rest } = result;
|
|
125
|
+
return {
|
|
126
|
+
...rest,
|
|
127
|
+
view: 'summary',
|
|
128
|
+
formSummary: form ? summarizeLandingForm(form) : null,
|
|
129
|
+
...(form
|
|
130
|
+
? {
|
|
131
|
+
next: 'Pass view "full" for the form; add fields (top-level keys from formSummary.fields) and locales to read only part of it.',
|
|
132
|
+
}
|
|
133
|
+
: {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=landing-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing-read.js","sourceRoot":"","sources":["../src/landing-read.ts"],"names":[],"mappings":"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"}
|
package/dist/landing-workflow.js
CHANGED
|
@@ -66,7 +66,7 @@ export function landingNextSteps(homepageUrl) {
|
|
|
66
66
|
? `Confirm the page loads at ${homepageUrl} (the canonical/og:url tags already point there).`
|
|
67
67
|
: 'Once the final URL is known, regenerate with homepageUrl set to it so the canonical, og:url and JSON-LD url tags are filled in, and re-upload.',
|
|
68
68
|
'Register the URL on the project: upsert_hosted_page {projectId, kind: "homepage", url} (needs identity and hosted.write; the server fetches the public page and hashes it, so it has to be publicly reachable). CLI equivalent: npx @extenshi/cli@latest page register --project <id> --url <https-url>.',
|
|
69
|
-
'
|
|
69
|
+
'get_project_state now returns a regenerated integration.file (the content for integration.path) that carries the new HOMEPAGE_URL; updating the repository with it is the author’s choice.',
|
|
70
70
|
'After later edits to the hosted page, verify_hosted_artifact {projectId, kind: "homepage"} reports whether the live page still matches the registered hash.',
|
|
71
71
|
];
|
|
72
72
|
}
|
|
@@ -130,8 +130,8 @@ export function hostedLandingNextSteps(result) {
|
|
|
130
130
|
: [`Published at ${url}, not verified (this server does not check the public URL). ${verify}`];
|
|
131
131
|
steps.push(homepage.registered
|
|
132
132
|
? reachable
|
|
133
|
-
? 'It is now the project homepage.
|
|
134
|
-
: 'It is registered as the project homepage, but until the URL serves the page HOMEPAGE_URL would send users to an error
|
|
133
|
+
? 'It is now the project homepage. get_project_state returns an integration.file (the content for integration.path) that uses it as HOMEPAGE_URL; the repository is updated with it only when the author wants that.'
|
|
134
|
+
: 'It is registered as the project homepage, but until the URL serves the page HOMEPAGE_URL would send users to an error; get_project_state returns an integration.file that carries that URL.'
|
|
135
135
|
: 'The homepage registration was left unchanged (registerAsHomepage: false).');
|
|
136
136
|
if (reachable)
|
|
137
137
|
steps.push('verify_hosted_artifact {projectId, kind: "homepage"} confirms the public URL serves the published bytes (the hash is contentHash).');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"landing-workflow.js","sourceRoot":"","sources":["../src/landing-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,oBAAoB,EAGpB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAGN,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,uBAAuB,CAAA;AAyC9B,MAAM,OAAO,GAAG;IACf,UAAU;IACV,QAAQ;IACR,KAAK;IACL,eAAe;IACf,SAAS;IACT,IAAI;IACJ,cAAc;IACd,UAAU;CACD,CAAA;AAEV,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACxD,MAAM,IAAI,GAAgB;QACzB,GAAG,oBAAoB;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC,WAAW;QACjE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK;QAC/C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;QAC7C,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QACjC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;KAClG,CAAA;IACD,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IACzD,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7C,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7C,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IACtG,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC;QAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;IACpD,4EAA4E;IAC5E,kDAAkD;IAClD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;YAAG,IAA2C,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,IAAqC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAoB;IACpD,OAAO;QACN,0HAA0H;QAC1H,yRAAyR;QACzR,WAAW;YACV,CAAC,CAAC,6BAA6B,WAAW,mDAAmD;YAC7F,CAAC,CAAC,gJAAgJ;QACnJ,0SAA0S;QAC1S,
|
|
1
|
+
{"version":3,"file":"landing-workflow.js","sourceRoot":"","sources":["../src/landing-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only license terms tools (DX report 2026-10-10 §2 row 16).
|
|
3
|
+
*
|
|
4
|
+
* Without pay.read an agent could not see the "License terms & refunds"
|
|
5
|
+
* questionnaire at all; it existed only in the Dojo card. These two tools give
|
|
6
|
+
* it the questions and an unsaved draft from its own answers, under project
|
|
7
|
+
* read access. They carry no saved answers (the seller's legal name, address
|
|
8
|
+
* and registration live there) and no Pay state, which is what keeps them off
|
|
9
|
+
* pay.read; saving and publishing stay with the owner in Dojo.
|
|
10
|
+
*/
|
|
11
|
+
import type { FastMCPSessionAuth, Tool, ToolParameters } from 'fastmcp';
|
|
12
|
+
import type { Bff } from './bff.js';
|
|
13
|
+
import type { ToolCallContext } from './tools.js';
|
|
14
|
+
type AddTool = <P extends ToolParameters>(tool: Tool<FastMCPSessionAuth, P>) => void;
|
|
15
|
+
export declare function registerLicenseTermsTools(add: AddTool, bff: (context: ToolCallContext) => Bff, fail: (err: unknown) => never): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=license-terms-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license-terms-tools.d.ts","sourceRoot":"","sources":["../src/license-terms-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,KAAK,OAAO,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAA;AAIpF,wBAAgB,yBAAyB,CACxC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,GAAG,EACtC,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,GAC3B,IAAI,CA4CN"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only license terms tools (DX report 2026-10-10 §2 row 16).
|
|
3
|
+
*
|
|
4
|
+
* Without pay.read an agent could not see the "License terms & refunds"
|
|
5
|
+
* questionnaire at all; it existed only in the Dojo card. These two tools give
|
|
6
|
+
* it the questions and an unsaved draft from its own answers, under project
|
|
7
|
+
* read access. They carry no saved answers (the seller's legal name, address
|
|
8
|
+
* and registration live there) and no Pay state, which is what keeps them off
|
|
9
|
+
* pay.read; saving and publishing stay with the owner in Dojo.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
const READ_ONLY = { readOnlyHint: true, idempotentHint: true, destructiveHint: false, openWorldHint: true };
|
|
13
|
+
export function registerLicenseTermsTools(add, bff, fail) {
|
|
14
|
+
add({
|
|
15
|
+
name: 'get_license_terms_questionnaire',
|
|
16
|
+
description: 'The questions of the project\'s "License terms & refunds" questionnaire as data: field, question, ' +
|
|
17
|
+
'type, choices, length and number limits, and when each answer is required before the owner can ' +
|
|
18
|
+
'publish. Questions only: it returns no saved answers, seller or Pay state, so project read access ' +
|
|
19
|
+
'is enough (no pay.read). Pair it with draft_license_terms. FREE.',
|
|
20
|
+
parameters: z.object({ projectId: z.string().uuid() }),
|
|
21
|
+
annotations: { title: 'Read the license terms questionnaire', ...READ_ONLY },
|
|
22
|
+
execute: async (args, context) => {
|
|
23
|
+
try {
|
|
24
|
+
return JSON.stringify(await bff(context).getLicenseTermsQuestionnaire(args));
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
return fail(err);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
add({
|
|
32
|
+
name: 'draft_license_terms',
|
|
33
|
+
description: 'Generate the license terms & refunds text from answers supplied in the call, without saving ' +
|
|
34
|
+
'anything: the markdown the owner would publish, the unanswered questions that block publishing, ' +
|
|
35
|
+
'and the normalized answers. An empty extensionName takes the project name. Saved answers, the ' +
|
|
36
|
+
'seller and Pay offers are not read (they need pay.read), so plan types the seller sells are not ' +
|
|
37
|
+
'cross-checked here; Dojo checks them when the owner saves and publishes. FREE.',
|
|
38
|
+
parameters: z.object({
|
|
39
|
+
projectId: z.string().uuid(),
|
|
40
|
+
answers: z
|
|
41
|
+
.record(z.unknown())
|
|
42
|
+
.optional()
|
|
43
|
+
.describe('Answers keyed by the field names get_license_terms_questionnaire lists, e.g. {"sellerCountry": "Spain", "planKinds": ["lifetime"], "refundPolicy": "window", "refundWindowDays": 14}. Omitted fields count as unanswered.'),
|
|
44
|
+
}),
|
|
45
|
+
annotations: { title: 'Draft license terms from answers', ...READ_ONLY },
|
|
46
|
+
execute: async (args, context) => {
|
|
47
|
+
try {
|
|
48
|
+
return JSON.stringify(await bff(context).draftLicenseTerms(args));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
return fail(err);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=license-terms-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license-terms-tools.js","sourceRoot":"","sources":["../src/license-terms-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;AAE3G,MAAM,UAAU,yBAAyB,CACxC,GAAY,EACZ,GAAsC,EACtC,IAA6B;IAE7B,GAAG,CAAC;QACH,IAAI,EAAE,iCAAiC;QACvC,WAAW,EACV,oGAAoG;YACpG,iGAAiG;YACjG,oGAAoG;YACpG,kEAAkE;QACnE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACtD,WAAW,EAAE,EAAE,KAAK,EAAE,sCAAsC,EAAE,GAAG,SAAS,EAAE;QAC5E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAChC,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAA;YAC7E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;QACF,CAAC;KACD,CAAC,CAAA;IACF,GAAG,CAAC;QACH,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACV,8FAA8F;YAC9F,kGAAkG;YAClG,gGAAgG;YAChG,kGAAkG;YAClG,gFAAgF;QACjF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC5B,OAAO,EAAE,CAAC;iBACR,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBACnB,QAAQ,EAAE;iBACV,QAAQ,CACR,2NAA2N,CAC3N;SACF,CAAC;QACF,WAAW,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,GAAG,SAAS,EAAE;QACxE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAChC,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;YAClE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;QACF,CAAC;KACD,CAAC,CAAA;AACH,CAAC"}
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAKN,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;IACxF,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IACrE,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACtF;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAIhD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,CAAC,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,gBAAgB,CAQlB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CA0B3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAE3D;AAED,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,cAAc,CAAC,EAAE;QAChB,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,kFAAkF;QAClF,WAAW,EAAE,OAAO,CAAA;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAC5B,CAAA;CACD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;CACpD,GAAG,OAAO,CAoCV;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAKN,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;IACxF,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IACrE,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACtF;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAIhD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,CAAC,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,gBAAgB,CAQlB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CA0B3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAE3D;AAED,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,cAAc,CAAC,EAAE;QAChB,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,kFAAkF;QAClF,WAAW,EAAE,OAAO,CAAA;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAC5B,CAAA;CACD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;CACpD,GAAG,OAAO,CAoCV;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4GjF,CAAL;eAEI,CAAF;;;;;;;;EAlFD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAqDxF;AAED,wBAAsB,wBAAwB,CAC7C,MAAM,CAAC,EAAE,SAAS,EAAE,GAClB,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CA4B3E"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -39,6 +39,11 @@ export declare const SIGNUP_PAGE = "https://auth.extenshi.io/signup";
|
|
|
39
39
|
export declare const BILLING_PAGE = "https://dojo.extenshi.io/billing";
|
|
40
40
|
export declare const HOSTED_PAGES_DOCS = "https://docs.extenshi.io/developers/project-sync#hosted-pages-from-the-api";
|
|
41
41
|
export declare const MISSING_KEY_MESSAGE: string;
|
|
42
|
+
/**
|
|
43
|
+
* The remote connector's counterpart of MISSING_KEY_MESSAGE. It signs in over
|
|
44
|
+
* OAuth, so a rejected request means the sign-in lapsed — there is no key to find.
|
|
45
|
+
*/
|
|
46
|
+
export declare const RECONNECT_MESSAGE: string;
|
|
42
47
|
/**
|
|
43
48
|
* Max extensions `get_risk_by_store_ids` accepts per call.
|
|
44
49
|
*
|
|
@@ -51,9 +56,21 @@ export declare const MISSING_KEY_MESSAGE: string;
|
|
|
51
56
|
*/
|
|
52
57
|
export declare const MAX_BATCH_EXTENSIONS = 40;
|
|
53
58
|
export declare const SERVER_NAME = "extenshi";
|
|
59
|
+
/**
|
|
60
|
+
* How the caller signs in. The stdio package reads an `ek_…` API key; the remote
|
|
61
|
+
* connector signs in over OAuth and has no key at all, so any text that sends the
|
|
62
|
+
* user to find one is wrong there.
|
|
63
|
+
*/
|
|
64
|
+
export type McpAuth = 'api-key' | 'oauth';
|
|
65
|
+
/**
|
|
66
|
+
* Shown to the model at `initialize`. It states what the tools return and what
|
|
67
|
+
* the account can do — not how to work — and is kept short: directory review
|
|
68
|
+
* reads this block in full, and a cut-off copy hides the end of it. The length
|
|
69
|
+
* is pinned by a test.
|
|
70
|
+
*/
|
|
54
71
|
export declare const SERVER_INSTRUCTIONS: string;
|
|
55
72
|
/** Match initialize instructions to the same capabilities used for registration. */
|
|
56
|
-
export declare function getServerInstructions(capabilities: ReadonlySet<Capability
|
|
73
|
+
export declare function getServerInstructions(capabilities: ReadonlySet<Capability>, auth?: McpAuth): string;
|
|
57
74
|
/** Which tool groups to register on this transport. */
|
|
58
75
|
export type Capability = 'read' | 'docs' | 'scan' | 'publish';
|
|
59
76
|
/**
|
|
@@ -94,7 +111,13 @@ export interface ToolDeps {
|
|
|
94
111
|
* key or undefined. stdio supplies the (nullable) env key.
|
|
95
112
|
*/
|
|
96
113
|
getApiKey?: (ctx: ToolCallContext) => string | undefined;
|
|
97
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* How this transport signs the caller in (default `api-key`, the stdio package).
|
|
116
|
+
* The remote connector passes `oauth`, which swaps every "get an API key" hint
|
|
117
|
+
* for the reconnect path.
|
|
118
|
+
*/
|
|
119
|
+
auth?: McpAuth;
|
|
120
|
+
/** Optional override of the missing-key message (defaults to the one for `auth`). */
|
|
98
121
|
missingKeyMessage?: string;
|
|
99
122
|
}
|
|
100
123
|
/**
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAG1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAG1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AA6DnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAC9D,eAAO,MAAM,iBAAiB,+EAA+E,CAAA;AAO7G,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEiE,CAAA;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAYiD,CAAA;AAEjF,oFAAoF;AACpF,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,EACrC,IAAI,GAAE,OAAmB,GACvB,MAAM,CAYR;AAID,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AAuuBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA+yDnE"}
|