@theyahia/megaplan-mcp 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +119 -157
  3. package/dist/client.d.ts +3 -13
  4. package/dist/client.js +224 -82
  5. package/dist/client.js.map +1 -1
  6. package/dist/format.d.ts +12 -0
  7. package/dist/format.js +148 -0
  8. package/dist/format.js.map +1 -0
  9. package/dist/http.d.ts +3 -0
  10. package/dist/http.js +152 -0
  11. package/dist/http.js.map +1 -0
  12. package/dist/index.d.ts +2 -13
  13. package/dist/index.js +97 -23
  14. package/dist/index.js.map +1 -1
  15. package/dist/meta.d.ts +2 -0
  16. package/dist/meta.js +5 -0
  17. package/dist/meta.js.map +1 -0
  18. package/dist/prompts.d.ts +7 -0
  19. package/dist/prompts.js +22 -0
  20. package/dist/prompts.js.map +1 -0
  21. package/dist/query.d.ts +32 -0
  22. package/dist/query.js +61 -0
  23. package/dist/query.js.map +1 -0
  24. package/dist/tools/comments.d.ts +9 -7
  25. package/dist/tools/comments.js +18 -21
  26. package/dist/tools/comments.js.map +1 -1
  27. package/dist/tools/contractors.d.ts +35 -0
  28. package/dist/tools/contractors.js +39 -0
  29. package/dist/tools/contractors.js.map +1 -0
  30. package/dist/tools/deals.d.ts +53 -8
  31. package/dist/tools/deals.js +71 -23
  32. package/dist/tools/deals.js.map +1 -1
  33. package/dist/tools/employees.d.ts +7 -5
  34. package/dist/tools/employees.js +16 -12
  35. package/dist/tools/employees.js.map +1 -1
  36. package/dist/tools/me.d.ts +9 -0
  37. package/dist/tools/me.js +26 -0
  38. package/dist/tools/me.js.map +1 -0
  39. package/dist/tools/programs.d.ts +26 -0
  40. package/dist/tools/programs.js +25 -0
  41. package/dist/tools/programs.js.map +1 -0
  42. package/dist/tools/projects.d.ts +21 -8
  43. package/dist/tools/projects.js +26 -13
  44. package/dist/tools/projects.js.map +1 -1
  45. package/dist/tools/tasks.d.ts +49 -10
  46. package/dist/tools/tasks.js +62 -20
  47. package/dist/tools/tasks.js.map +1 -1
  48. package/dist/types.d.ts +44 -53
  49. package/dist/types.js +4 -0
  50. package/dist/types.js.map +1 -1
  51. package/package.json +69 -63
  52. package/dist/client.d.ts.map +0 -1
  53. package/dist/index.d.ts.map +0 -1
  54. package/dist/server.d.ts +0 -9
  55. package/dist/server.d.ts.map +0 -1
  56. package/dist/server.js +0 -73
  57. package/dist/server.js.map +0 -1
  58. package/dist/tools/comments.d.ts.map +0 -1
  59. package/dist/tools/deals.d.ts.map +0 -1
  60. package/dist/tools/employees.d.ts.map +0 -1
  61. package/dist/tools/projects.d.ts.map +0 -1
  62. package/dist/tools/tasks.d.ts.map +0 -1
  63. package/dist/types.d.ts.map +0 -1
  64. package/smithery.yaml +0 -33
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { megaplanGet } from "../client.js";
3
+ import { buildListQuery, idSchema } from "../query.js";
4
+ import { formatList, formatEntity, formatClient } from "../format.js";
5
+ // In v3 contractors are split into two entities: people (contractorHuman) and
6
+ // organizations (contractorCompany). The `type` param selects which.
7
+ function pathFor(type) {
8
+ return type === "company" ? "contractorCompany" : "contractorHuman";
9
+ }
10
+ function entityFor(type) {
11
+ return type === "company" ? "ContractorCompany" : "ContractorHuman";
12
+ }
13
+ export const listClientsSchema = z.object({
14
+ type: z.enum(["human", "company"]).default("human").describe("Person (human) or organization (company)"),
15
+ search: z.string().optional().describe("Free-text search by name"),
16
+ limit: z.number().int().min(1).max(100).default(25).describe("Results per page (max 100)"),
17
+ page_after: z.string().optional().describe("Cursor: id of the last client from the previous page"),
18
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
19
+ });
20
+ export async function handleListClients(params) {
21
+ const query = buildListQuery({
22
+ entity: entityFor(params.type),
23
+ limit: params.limit,
24
+ pageAfter: params.page_after,
25
+ search: params.search,
26
+ });
27
+ const result = await megaplanGet(`/${pathFor(params.type)}`, query);
28
+ return formatList(result, formatClient, params.raw);
29
+ }
30
+ export const getClientSchema = z.object({
31
+ type: z.enum(["human", "company"]).default("human").describe("Person (human) or organization (company)"),
32
+ id: idSchema.describe("Client ID"),
33
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
34
+ });
35
+ export async function handleGetClient(params) {
36
+ const result = await megaplanGet(`/${pathFor(params.type)}/${params.id}`);
37
+ return formatEntity(result, formatClient, params.raw);
38
+ }
39
+ //# sourceMappingURL=contractors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractors.js","sourceRoot":"","sources":["../../src/tools/contractors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtE,8EAA8E;AAC9E,qEAAqE;AAErE,SAAS,OAAO,CAAC,IAAyB;IACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACtE,CAAC;AACD,SAAS,SAAS,CAAC,IAAyB;IAC1C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAClG,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyC;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxG,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAuC;IAC3E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC"}
@@ -1,34 +1,52 @@
1
1
  import { z } from "zod";
2
2
  export declare const getDealsSchema: z.ZodObject<{
3
- filter_status: z.ZodOptional<z.ZodString>;
3
+ filter_status: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
4
4
  filter_responsible_id: z.ZodOptional<z.ZodString>;
5
5
  search: z.ZodOptional<z.ZodString>;
6
6
  limit: z.ZodDefault<z.ZodNumber>;
7
- offset: z.ZodDefault<z.ZodNumber>;
7
+ page_after: z.ZodOptional<z.ZodString>;
8
+ raw: z.ZodOptional<z.ZodBoolean>;
8
9
  }, "strip", z.ZodTypeAny, {
9
10
  limit: number;
10
- offset: number;
11
- filter_status?: string | undefined;
11
+ filter_status?: string | string[] | undefined;
12
12
  filter_responsible_id?: string | undefined;
13
13
  search?: string | undefined;
14
+ page_after?: string | undefined;
15
+ raw?: boolean | undefined;
14
16
  }, {
15
- filter_status?: string | undefined;
17
+ limit?: number | undefined;
18
+ filter_status?: string | string[] | undefined;
16
19
  filter_responsible_id?: string | undefined;
17
20
  search?: string | undefined;
18
- limit?: number | undefined;
19
- offset?: number | undefined;
21
+ page_after?: string | undefined;
22
+ raw?: boolean | undefined;
20
23
  }>;
21
24
  export declare function handleGetDeals(params: z.infer<typeof getDealsSchema>): Promise<string>;
25
+ export declare const getDealSchema: z.ZodObject<{
26
+ id: z.ZodString;
27
+ raw: z.ZodOptional<z.ZodBoolean>;
28
+ }, "strip", z.ZodTypeAny, {
29
+ id: string;
30
+ raw?: boolean | undefined;
31
+ }, {
32
+ id: string;
33
+ raw?: boolean | undefined;
34
+ }>;
35
+ export declare function handleGetDeal(params: z.infer<typeof getDealSchema>): Promise<string>;
22
36
  export declare const createDealSchema: z.ZodObject<{
23
37
  name: z.ZodString;
24
38
  program_id: z.ZodString;
25
39
  responsible_id: z.ZodOptional<z.ZodString>;
26
40
  contact_id: z.ZodOptional<z.ZodString>;
41
+ contact_type: z.ZodDefault<z.ZodEnum<["human", "company"]>>;
27
42
  amount: z.ZodOptional<z.ZodNumber>;
43
+ currency: z.ZodDefault<z.ZodString>;
28
44
  description: z.ZodOptional<z.ZodString>;
29
45
  }, "strip", z.ZodTypeAny, {
30
46
  name: string;
47
+ currency: string;
31
48
  program_id: string;
49
+ contact_type: "human" | "company";
32
50
  description?: string | undefined;
33
51
  responsible_id?: string | undefined;
34
52
  contact_id?: string | undefined;
@@ -36,10 +54,37 @@ export declare const createDealSchema: z.ZodObject<{
36
54
  }, {
37
55
  name: string;
38
56
  program_id: string;
57
+ currency?: string | undefined;
39
58
  description?: string | undefined;
40
59
  responsible_id?: string | undefined;
41
60
  contact_id?: string | undefined;
61
+ contact_type?: "human" | "company" | undefined;
42
62
  amount?: number | undefined;
43
63
  }>;
44
64
  export declare function handleCreateDeal(params: z.infer<typeof createDealSchema>): Promise<string>;
45
- //# sourceMappingURL=deals.d.ts.map
65
+ export declare const updateDealSchema: z.ZodObject<{
66
+ id: z.ZodString;
67
+ name: z.ZodOptional<z.ZodString>;
68
+ responsible_id: z.ZodOptional<z.ZodString>;
69
+ amount: z.ZodOptional<z.ZodNumber>;
70
+ currency: z.ZodDefault<z.ZodString>;
71
+ description: z.ZodOptional<z.ZodString>;
72
+ status: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ id: string;
75
+ currency: string;
76
+ name?: string | undefined;
77
+ status?: string | undefined;
78
+ description?: string | undefined;
79
+ responsible_id?: string | undefined;
80
+ amount?: number | undefined;
81
+ }, {
82
+ id: string;
83
+ name?: string | undefined;
84
+ currency?: string | undefined;
85
+ status?: string | undefined;
86
+ description?: string | undefined;
87
+ responsible_id?: string | undefined;
88
+ amount?: number | undefined;
89
+ }>;
90
+ export declare function handleUpdateDeal(params: z.infer<typeof updateDealSchema>): Promise<string>;
@@ -1,49 +1,97 @@
1
1
  import { z } from "zod";
2
2
  import { megaplanGet, megaplanPost } from "../client.js";
3
+ import { buildListQuery, toMoney, idSchema } from "../query.js";
4
+ import { formatList, formatEntity, formatDeal } from "../format.js";
5
+ const statusFilter = z
6
+ .union([z.string(), z.array(z.string())])
7
+ .optional()
8
+ .describe('Filter by status code(s). Codes are account-specific.');
3
9
  export const getDealsSchema = z.object({
4
- filter_status: z.string().optional().describe("Filter by deal status"),
10
+ filter_status: statusFilter,
5
11
  filter_responsible_id: z.string().optional().describe("Filter by responsible employee ID"),
6
- search: z.string().optional().describe("Search by deal name"),
7
- limit: z.number().int().min(1).max(100).default(25).describe("Results per page"),
8
- offset: z.number().int().default(0).describe("Offset for pagination"),
12
+ search: z.string().optional().describe("Free-text search by deal name"),
13
+ limit: z.number().int().min(1).max(100).default(25).describe("Results per page (max 100)"),
14
+ page_after: z.string().optional().describe("Cursor: id of the last deal from the previous page"),
15
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
9
16
  });
10
17
  export async function handleGetDeals(params) {
11
- const query = {
12
- limit: String(params.limit),
13
- offset: String(params.offset),
14
- };
15
- if (params.filter_status)
16
- query["filter[status]"] = params.filter_status;
17
- if (params.filter_responsible_id)
18
- query["filter[responsible]"] = params.filter_responsible_id;
19
- if (params.search)
20
- query["search"] = params.search;
18
+ const query = buildListQuery({
19
+ entity: "Deal",
20
+ limit: params.limit,
21
+ pageAfter: params.page_after,
22
+ status: params.filter_status,
23
+ refs: params.filter_responsible_id
24
+ ? [{ field: "responsible", contentType: "Employee", id: params.filter_responsible_id }]
25
+ : [],
26
+ search: params.search,
27
+ });
21
28
  const result = await megaplanGet("/deal", query);
22
- return JSON.stringify(result, null, 2);
29
+ return formatList(result, formatDeal, params.raw);
30
+ }
31
+ export const getDealSchema = z.object({
32
+ id: idSchema.describe("Deal ID"),
33
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
34
+ });
35
+ export async function handleGetDeal(params) {
36
+ const result = await megaplanGet(`/deal/${params.id}`);
37
+ return formatEntity(result, formatDeal, params.raw);
23
38
  }
24
39
  export const createDealSchema = z.object({
25
40
  name: z.string().describe("Deal name/title"),
26
- program_id: z.string().describe("Deal program (pipeline) ID"),
41
+ program_id: z.string().describe("Deal program (pipeline) ID — discover via get_deal_programs"),
27
42
  responsible_id: z.string().optional().describe("Responsible employee ID"),
28
43
  contact_id: z.string().optional().describe("Contact/client ID"),
29
- amount: z.number().optional().describe("Deal amount"),
44
+ contact_type: z
45
+ .enum(["human", "company"])
46
+ .default("human")
47
+ .describe("Whether contact_id is a person (human) or an organization (company)"),
48
+ amount: z.number().optional().describe("Deal amount (maps to the 'price' / final-sum field)"),
49
+ currency: z.string().default("RUB").describe("ISO currency code for amount"),
30
50
  description: z.string().optional().describe("Deal description"),
31
51
  });
32
52
  export async function handleCreateDeal(params) {
33
53
  const body = {
34
54
  contentType: "Deal",
35
55
  name: params.name,
36
- program: { id: params.program_id, contentType: "DealProgram" },
56
+ program: { id: params.program_id, contentType: "Program" },
37
57
  };
38
- if (params.responsible_id)
58
+ if (params.responsible_id) {
39
59
  body.responsible = { id: params.responsible_id, contentType: "Employee" };
40
- if (params.contact_id)
41
- body.contact = { id: params.contact_id, contentType: "Contractor" };
60
+ }
61
+ if (params.contact_id) {
62
+ const contentType = params.contact_type === "company" ? "ContractorCompany" : "ContractorHuman";
63
+ body.contact = { id: params.contact_id, contentType };
64
+ }
42
65
  if (params.amount != null)
43
- body.cost = params.amount;
66
+ body.price = toMoney(params.amount, params.currency);
44
67
  if (params.description)
45
68
  body.description = params.description;
46
69
  const result = await megaplanPost("/deal", body);
47
- return JSON.stringify(result, null, 2);
70
+ return formatEntity(result, formatDeal);
71
+ }
72
+ export const updateDealSchema = z.object({
73
+ id: idSchema.describe("Deal ID to update"),
74
+ name: z.string().optional().describe("New name/title"),
75
+ responsible_id: z.string().optional().describe("New responsible employee ID"),
76
+ amount: z.number().optional().describe("New deal amount (maps to 'price')"),
77
+ currency: z.string().default("RUB").describe("ISO currency code for amount"),
78
+ description: z.string().optional().describe("New description"),
79
+ status: z.string().optional().describe("New status code (experimental — field shape unverified)"),
80
+ });
81
+ export async function handleUpdateDeal(params) {
82
+ const body = { contentType: "Deal" };
83
+ if (params.name !== undefined)
84
+ body.name = params.name;
85
+ if (params.responsible_id)
86
+ body.responsible = { id: params.responsible_id, contentType: "Employee" };
87
+ if (params.amount != null)
88
+ body.price = toMoney(params.amount, params.currency);
89
+ if (params.description !== undefined)
90
+ body.description = params.description;
91
+ // TODO(live-verify): status may need a link-entity rather than a bare code.
92
+ if (params.status !== undefined)
93
+ body.status = params.status;
94
+ const result = await megaplanPost(`/deal/${params.id}`, body);
95
+ return formatEntity(result, formatDeal);
48
96
  }
49
97
  //# sourceMappingURL=deals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deals.js","sourceRoot":"","sources":["../../src/tools/deals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deals.js","sourceRoot":"","sources":["../../src/tools/deals.ts"],"names":[],"mappings":"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"}
@@ -3,17 +3,19 @@ export declare const getEmployeesSchema: z.ZodObject<{
3
3
  search: z.ZodOptional<z.ZodString>;
4
4
  filter_department_id: z.ZodOptional<z.ZodString>;
5
5
  limit: z.ZodDefault<z.ZodNumber>;
6
- offset: z.ZodDefault<z.ZodNumber>;
6
+ page_after: z.ZodOptional<z.ZodString>;
7
+ raw: z.ZodOptional<z.ZodBoolean>;
7
8
  }, "strip", z.ZodTypeAny, {
8
9
  limit: number;
9
- offset: number;
10
10
  search?: string | undefined;
11
+ page_after?: string | undefined;
12
+ raw?: boolean | undefined;
11
13
  filter_department_id?: string | undefined;
12
14
  }, {
13
- search?: string | undefined;
14
15
  limit?: number | undefined;
15
- offset?: number | undefined;
16
+ search?: string | undefined;
17
+ page_after?: string | undefined;
18
+ raw?: boolean | undefined;
16
19
  filter_department_id?: string | undefined;
17
20
  }>;
18
21
  export declare function handleGetEmployees(params: z.infer<typeof getEmployeesSchema>): Promise<string>;
19
- //# sourceMappingURL=employees.d.ts.map
@@ -1,21 +1,25 @@
1
1
  import { z } from "zod";
2
2
  import { megaplanGet } from "../client.js";
3
+ import { buildListQuery } from "../query.js";
4
+ import { formatList, formatEmployee } from "../format.js";
3
5
  export const getEmployeesSchema = z.object({
4
- search: z.string().optional().describe("Search by employee name or email"),
6
+ search: z.string().optional().describe("Free-text search by employee name or email"),
5
7
  filter_department_id: z.string().optional().describe("Filter by department ID"),
6
- limit: z.number().int().min(1).max(100).default(25).describe("Results per page"),
7
- offset: z.number().int().default(0).describe("Offset for pagination"),
8
+ limit: z.number().int().min(1).max(100).default(25).describe("Results per page (max 100)"),
9
+ page_after: z.string().optional().describe("Cursor: id of the last employee from the previous page"),
10
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
8
11
  });
9
12
  export async function handleGetEmployees(params) {
10
- const query = {
11
- limit: String(params.limit),
12
- offset: String(params.offset),
13
- };
14
- if (params.search)
15
- query["search"] = params.search;
16
- if (params.filter_department_id)
17
- query["filter[department]"] = params.filter_department_id;
13
+ const query = buildListQuery({
14
+ entity: "Employee",
15
+ limit: params.limit,
16
+ pageAfter: params.page_after,
17
+ refs: params.filter_department_id
18
+ ? [{ field: "department", contentType: "Department", id: params.filter_department_id }]
19
+ : [],
20
+ search: params.search,
21
+ });
18
22
  const result = await megaplanGet("/employee", query);
19
- return JSON.stringify(result, null, 2);
23
+ return formatList(result, formatEmployee, params.raw);
20
24
  }
21
25
  //# sourceMappingURL=employees.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"employees.js","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0C;IACjF,MAAM,KAAK,GAA2B;QACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KAC9B,CAAC;IACF,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,IAAI,MAAM,CAAC,oBAAoB;QAAE,KAAK,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAE3F,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"employees.js","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACpF,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IACpG,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0C;IACjF,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,IAAI,EAAE,MAAM,CAAC,oBAAoB;YAC/B,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACvF,CAAC,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ export declare const getCurrentUserSchema: z.ZodObject<{
3
+ raw: z.ZodOptional<z.ZodBoolean>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ raw?: boolean | undefined;
6
+ }, {
7
+ raw?: boolean | undefined;
8
+ }>;
9
+ export declare function handleGetCurrentUser(params: z.infer<typeof getCurrentUserSchema>): Promise<string>;
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ import { megaplanGet } from "../client.js";
3
+ import { formatEntity, formatEmployee } from "../format.js";
4
+ // EXPERIMENTAL: the current-user endpoint is not documented for v3.
5
+ // GET /api/v3/employee/current is the most likely path; if the account returns
6
+ // 404 we surface a helpful message instead of failing opaquely.
7
+ export const getCurrentUserSchema = z.object({
8
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
9
+ });
10
+ export async function handleGetCurrentUser(params) {
11
+ try {
12
+ const result = await megaplanGet("/employee/current");
13
+ return formatEntity(result, formatEmployee, params.raw);
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : String(error);
17
+ // TODO(live-verify): confirm the current-user path on a real account.
18
+ if (/\b40[34]\b/.test(message)) {
19
+ return JSON.stringify({
20
+ error: "Current-user endpoint not available on this account. Find your employee id via get_employees and pass it explicitly (e.g. to get_tasks filter_responsible_id).",
21
+ }, null, 2);
22
+ }
23
+ throw error;
24
+ }
25
+ }
26
+ //# sourceMappingURL=me.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.js","sourceRoot":"","sources":["../../src/tools/me.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,oEAAoE;AACpE,+EAA+E;AAC/E,gEAAgE;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACtD,OAAO,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,sEAAsE;QACtE,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,SAAS,CACnB;gBACE,KAAK,EACH,gKAAgK;aACnK,EACD,IAAI,EACJ,CAAC,CACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export declare const getDealProgramsSchema: z.ZodObject<{
3
+ limit: z.ZodDefault<z.ZodNumber>;
4
+ page_after: z.ZodOptional<z.ZodString>;
5
+ raw: z.ZodOptional<z.ZodBoolean>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ limit: number;
8
+ page_after?: string | undefined;
9
+ raw?: boolean | undefined;
10
+ }, {
11
+ limit?: number | undefined;
12
+ page_after?: string | undefined;
13
+ raw?: boolean | undefined;
14
+ }>;
15
+ export declare function handleGetDealPrograms(params: z.infer<typeof getDealProgramsSchema>): Promise<string>;
16
+ export declare const getDealProgramSchema: z.ZodObject<{
17
+ id: z.ZodString;
18
+ raw: z.ZodOptional<z.ZodBoolean>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ id: string;
21
+ raw?: boolean | undefined;
22
+ }, {
23
+ id: string;
24
+ raw?: boolean | undefined;
25
+ }>;
26
+ export declare function handleGetDealProgram(params: z.infer<typeof getDealProgramSchema>): Promise<string>;
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { megaplanGet } from "../client.js";
3
+ import { buildListQuery, idSchema } from "../query.js";
4
+ import { formatList, formatEntity, formatProgram } from "../format.js";
5
+ // Deal programs (a.k.a. pipelines). create_deal requires a program_id, and this
6
+ // is the only way to discover it.
7
+ export const getDealProgramsSchema = z.object({
8
+ limit: z.number().int().min(1).max(100).default(25).describe("Results per page (max 100)"),
9
+ page_after: z.string().optional().describe("Cursor: id of the last program from the previous page"),
10
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
11
+ });
12
+ export async function handleGetDealPrograms(params) {
13
+ const query = buildListQuery({ entity: "Program", limit: params.limit, pageAfter: params.page_after });
14
+ const result = await megaplanGet("/program", query);
15
+ return formatList(result, formatProgram, params.raw);
16
+ }
17
+ export const getDealProgramSchema = z.object({
18
+ id: idSchema.describe("Deal program (pipeline) ID"),
19
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
20
+ });
21
+ export async function handleGetDealProgram(params) {
22
+ const result = await megaplanGet(`/program/${params.id}`);
23
+ return formatEntity(result, formatProgram, params.raw);
24
+ }
25
+ //# sourceMappingURL=programs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programs.js","sourceRoot":"","sources":["../../src/tools/programs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEvE,gFAAgF;AAChF,kCAAkC;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACnG,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA6C;IAE7C,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACnD,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA4C;IAE5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC"}
@@ -1,19 +1,32 @@
1
1
  import { z } from "zod";
2
2
  export declare const getProjectsSchema: z.ZodObject<{
3
- filter_status: z.ZodOptional<z.ZodString>;
3
+ filter_status: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
4
4
  search: z.ZodOptional<z.ZodString>;
5
5
  limit: z.ZodDefault<z.ZodNumber>;
6
- offset: z.ZodDefault<z.ZodNumber>;
6
+ page_after: z.ZodOptional<z.ZodString>;
7
+ raw: z.ZodOptional<z.ZodBoolean>;
7
8
  }, "strip", z.ZodTypeAny, {
8
9
  limit: number;
9
- offset: number;
10
- filter_status?: string | undefined;
10
+ filter_status?: string | string[] | undefined;
11
11
  search?: string | undefined;
12
+ page_after?: string | undefined;
13
+ raw?: boolean | undefined;
12
14
  }, {
13
- filter_status?: string | undefined;
14
- search?: string | undefined;
15
15
  limit?: number | undefined;
16
- offset?: number | undefined;
16
+ filter_status?: string | string[] | undefined;
17
+ search?: string | undefined;
18
+ page_after?: string | undefined;
19
+ raw?: boolean | undefined;
17
20
  }>;
18
21
  export declare function handleGetProjects(params: z.infer<typeof getProjectsSchema>): Promise<string>;
19
- //# sourceMappingURL=projects.d.ts.map
22
+ export declare const getProjectSchema: z.ZodObject<{
23
+ id: z.ZodString;
24
+ raw: z.ZodOptional<z.ZodBoolean>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ id: string;
27
+ raw?: boolean | undefined;
28
+ }, {
29
+ id: string;
30
+ raw?: boolean | undefined;
31
+ }>;
32
+ export declare function handleGetProject(params: z.infer<typeof getProjectSchema>): Promise<string>;
@@ -1,21 +1,34 @@
1
1
  import { z } from "zod";
2
2
  import { megaplanGet } from "../client.js";
3
+ import { buildListQuery, idSchema } from "../query.js";
4
+ import { formatList, formatEntity, formatProject } from "../format.js";
3
5
  export const getProjectsSchema = z.object({
4
- filter_status: z.string().optional().describe("Filter by status (active, completed, etc.)"),
5
- search: z.string().optional().describe("Search by project name"),
6
- limit: z.number().int().min(1).max(100).default(25).describe("Results per page"),
7
- offset: z.number().int().default(0).describe("Offset for pagination"),
6
+ filter_status: z
7
+ .union([z.string(), z.array(z.string())])
8
+ .optional()
9
+ .describe("Filter by status code(s). Codes are account-specific."),
10
+ search: z.string().optional().describe("Free-text search by project name"),
11
+ limit: z.number().int().min(1).max(100).default(25).describe("Results per page (max 100)"),
12
+ page_after: z.string().optional().describe("Cursor: id of the last project from the previous page"),
13
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
8
14
  });
9
15
  export async function handleGetProjects(params) {
10
- const query = {
11
- limit: String(params.limit),
12
- offset: String(params.offset),
13
- };
14
- if (params.filter_status)
15
- query["filter[status]"] = params.filter_status;
16
- if (params.search)
17
- query["search"] = params.search;
16
+ const query = buildListQuery({
17
+ entity: "Project",
18
+ limit: params.limit,
19
+ pageAfter: params.page_after,
20
+ status: params.filter_status,
21
+ search: params.search,
22
+ });
18
23
  const result = await megaplanGet("/project", query);
19
- return JSON.stringify(result, null, 2);
24
+ return formatList(result, formatProject, params.raw);
25
+ }
26
+ export const getProjectSchema = z.object({
27
+ id: idSchema.describe("Project ID"),
28
+ raw: z.boolean().optional().describe("Return raw API JSON instead of a compact summary"),
29
+ });
30
+ export async function handleGetProject(params) {
31
+ const result = await megaplanGet(`/project/${params.id}`);
32
+ return formatEntity(result, formatProject, params.raw);
20
33
  }
21
34
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyC;IAC/E,MAAM,KAAK,GAA2B;QACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KAC9B,CAAC;IACF,IAAI,MAAM,CAAC,aAAa;QAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;IACzE,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACxC,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACnG,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyC;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,MAAM,EAAE,MAAM,CAAC,aAAa;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACzF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwC;IAC7E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC"}