@unclick/mcp-server 0.3.17 → 0.3.18

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 (43) hide show
  1. package/dist/__tests__/legalpass-tool.test.d.ts +2 -0
  2. package/dist/__tests__/legalpass-tool.test.d.ts.map +1 -0
  3. package/dist/__tests__/legalpass-tool.test.js +44 -0
  4. package/dist/__tests__/legalpass-tool.test.js.map +1 -0
  5. package/dist/__tests__/tool-schema-validation.test.d.ts +2 -0
  6. package/dist/__tests__/tool-schema-validation.test.d.ts.map +1 -0
  7. package/dist/__tests__/tool-schema-validation.test.js +54 -0
  8. package/dist/__tests__/tool-schema-validation.test.js.map +1 -0
  9. package/dist/copypass-tool.d.ts +3 -0
  10. package/dist/copypass-tool.d.ts.map +1 -0
  11. package/dist/copypass-tool.js +123 -0
  12. package/dist/copypass-tool.js.map +1 -0
  13. package/dist/copypass-tool.test.d.ts +2 -0
  14. package/dist/copypass-tool.test.d.ts.map +1 -0
  15. package/dist/copypass-tool.test.js +41 -0
  16. package/dist/copypass-tool.test.js.map +1 -0
  17. package/dist/legalpass-tool.d.ts +15 -0
  18. package/dist/legalpass-tool.d.ts.map +1 -0
  19. package/dist/legalpass-tool.js +121 -0
  20. package/dist/legalpass-tool.js.map +1 -0
  21. package/dist/memory/__tests__/response-bounds.test.js +31 -2
  22. package/dist/memory/__tests__/response-bounds.test.js.map +1 -1
  23. package/dist/memory/handlers.d.ts +1 -1
  24. package/dist/memory/handlers.d.ts.map +1 -1
  25. package/dist/memory/handlers.js +77 -5
  26. package/dist/memory/handlers.js.map +1 -1
  27. package/dist/memory/local.d.ts.map +1 -1
  28. package/dist/memory/local.js +2 -0
  29. package/dist/memory/local.js.map +1 -1
  30. package/dist/memory/supabase.d.ts.map +1 -1
  31. package/dist/memory/supabase.js +2 -0
  32. package/dist/memory/supabase.js.map +1 -1
  33. package/dist/memory/types.d.ts +2 -0
  34. package/dist/memory/types.d.ts.map +1 -1
  35. package/dist/server.d.ts +12 -0
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +67 -3
  38. package/dist/server.js.map +1 -1
  39. package/dist/tool-wiring.d.ts +120 -0
  40. package/dist/tool-wiring.d.ts.map +1 -1
  41. package/dist/tool-wiring.js +79 -0
  42. package/dist/tool-wiring.js.map +1 -1
  43. package/package.json +2 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=legalpass-tool.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legalpass-tool.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/legalpass-tool.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { ADDITIONAL_HANDLERS, ADDITIONAL_TOOLS } from "../tool-wiring.js";
3
+ import { legalpassRun, legalpassVerdict, lintLegalPassVerdict } from "../legalpass-tool.js";
4
+ describe("LegalPass MCP exposure", () => {
5
+ it("registers legalpass_run and legalpass_verdict", () => {
6
+ const names = ADDITIONAL_TOOLS.map((tool) => tool.name);
7
+ expect(names).toContain("legalpass_run");
8
+ expect(names).toContain("legalpass_verdict");
9
+ expect(ADDITIONAL_HANDLERS).toHaveProperty("legalpass_run");
10
+ expect(ADDITIONAL_HANDLERS).toHaveProperty("legalpass_verdict");
11
+ });
12
+ it("plans LegalPass runs with the issue-spotter guardrail", async () => {
13
+ const result = await legalpassRun({
14
+ target: { kind: "url", url: "https://example.com/terms" },
15
+ jurisdictions: ["AU"],
16
+ });
17
+ expect(result.status).toBe("planned");
18
+ expect(result.pack_id).toBe("legalpass-mvp-v0");
19
+ expect(String(result.disclaimer)).toContain("issue-spotter");
20
+ expect(result.safety).toMatchObject({
21
+ issue_spotter_only: true,
22
+ no_legal_advice: true,
23
+ no_transactional_instrument: true,
24
+ });
25
+ });
26
+ it("returns a validation-style error when target.kind is missing", async () => {
27
+ await expect(legalpassRun({ target: {} })).resolves.toMatchObject({
28
+ error: "target.kind is required",
29
+ });
30
+ });
31
+ it("lints directive LegalPass verdict language", async () => {
32
+ expect(lintLegalPassVerdict("This clause may warrant review.")).toEqual([]);
33
+ const result = await legalpassVerdict({
34
+ verdict_text: "You should file this now because this is illegal.",
35
+ disclaimer_length: "chat",
36
+ });
37
+ expect(result.ok).toBe(false);
38
+ expect(result.safe_to_emit).toBe(false);
39
+ expect(JSON.stringify(result.issues)).toContain("should");
40
+ expect(JSON.stringify(result.issues)).toContain("this is illegal");
41
+ expect(String(result.disclaimer)).toContain("not a lawyer");
42
+ });
43
+ });
44
+ //# sourceMappingURL=legalpass-tool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legalpass-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/legalpass-tool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-schema-validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema-validation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tool-schema-validation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { validateToolArgumentsForRuntime } from "../server.js";
3
+ describe("runtime tool schema validation", () => {
4
+ const probes = [
5
+ { name: "load_memory", args: { num_sessions: 1, bogus_field: "should reject" } },
6
+ { name: "search_memory", args: { query: "strict schema probe", bogus_field: "should reject" } },
7
+ { name: "check_signals", args: { agent_id: "strict-probe", bogus_field: "should reject" } },
8
+ { name: "stripe_customers", args: { secret_key: "sk_test_dummy", action: "X", bogus_field: "should reject" } },
9
+ { name: "stripe_charges", args: { secret_key: "sk_test_dummy", action: "X", bogus_field: "should reject" } },
10
+ {
11
+ name: "paypal_orders",
12
+ args: {
13
+ client_id: "dummy",
14
+ client_secret: "dummy",
15
+ action: "X",
16
+ order_id: "ORDER",
17
+ bogus_field: "should reject",
18
+ },
19
+ },
20
+ { name: "square_payments", args: { access_token: "dummy", action: "X", bogus_field: "should reject" } },
21
+ {
22
+ name: "unclick_call",
23
+ args: {
24
+ endpoint_id: "memory.search_memory",
25
+ params: { query: "strict schema probe" },
26
+ bogus_field: "should reject",
27
+ },
28
+ },
29
+ { name: "unclick_generate_uuid", args: { count: 1, bogus_field: "should reject" } },
30
+ { name: "unclick_random_password", args: { length: 8, bogus_field: "should reject" } },
31
+ ];
32
+ it("rejects extra fields before handlers can run", () => {
33
+ for (const probe of probes) {
34
+ const result = validateToolArgumentsForRuntime(probe.name, probe.args);
35
+ expect(result, probe.name).not.toBeNull();
36
+ expect(result?.code).toBe("validation_error");
37
+ expect(result?.details.some((detail) => detail.keyword === "additionalProperties")).toBe(true);
38
+ expect(JSON.stringify(result)).toContain("bogus_field");
39
+ }
40
+ });
41
+ it("allows valid arguments for the same tool family", () => {
42
+ expect(validateToolArgumentsForRuntime("load_memory", { num_sessions: 1 })).toBeNull();
43
+ expect(validateToolArgumentsForRuntime("save_fact", {
44
+ fact: "Issue: Claude tool-result submission fails in Brave. Solution: disable Brave Shields for claude.ai.",
45
+ category: "troubleshooting",
46
+ })).toBeNull();
47
+ expect(validateToolArgumentsForRuntime("unclick_generate_uuid", { count: 1 })).toBeNull();
48
+ expect(validateToolArgumentsForRuntime("unclick_call", {
49
+ endpoint_id: "memory.search_memory",
50
+ params: { query: "strict schema probe" },
51
+ })).toBeNull();
52
+ });
53
+ });
54
+ //# sourceMappingURL=tool-schema-validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema-validation.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-schema-validation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function copypassRun(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function copypassStatus(args: Record<string, unknown>): Promise<unknown>;
3
+ //# sourceMappingURL=copypass-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copypass-tool.d.ts","sourceRoot":"","sources":["../src/copypass-tool.ts"],"names":[],"mappings":"AAoIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BjF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAepF"}
@@ -0,0 +1,123 @@
1
+ import { randomUUID } from "node:crypto";
2
+ const RUNS = new Map();
3
+ function emptySummary() {
4
+ return { total: 0, check: 0, na: 0, fail: 0, other: 0, pending: 0, pass_rate: 0 };
5
+ }
6
+ function parseProfile(raw) {
7
+ if (raw === undefined || raw === null || raw === "")
8
+ return "smoke";
9
+ return raw === "smoke" || raw === "standard" || raw === "deep" ? raw : null;
10
+ }
11
+ function previewCopy(text) {
12
+ const oneLine = text.replace(/\s+/g, " ").trim();
13
+ return oneLine.length > 160 ? `${oneLine.slice(0, 157)}...` : oneLine;
14
+ }
15
+ function summarize(findings) {
16
+ const summary = emptySummary();
17
+ summary.total = findings.length;
18
+ for (const finding of findings) {
19
+ summary[finding.verdict] += 1;
20
+ }
21
+ const decided = summary.check + summary.na + summary.fail + summary.other;
22
+ summary.pass_rate = decided > 0 ? summary.check / decided : 0;
23
+ return summary;
24
+ }
25
+ function createRunRecord(copyText, profile, args) {
26
+ const record = {
27
+ id: randomUUID(),
28
+ profile,
29
+ status: "queued",
30
+ target: {
31
+ type: "copy",
32
+ copy_text_preview: previewCopy(copyText),
33
+ channel: typeof args.channel === "string" ? args.channel : undefined,
34
+ audience: typeof args.audience === "string" ? args.audience : undefined,
35
+ goal: typeof args.goal === "string" ? args.goal : undefined,
36
+ },
37
+ verdict_summary: emptySummary(),
38
+ created_at: new Date().toISOString(),
39
+ completed_at: null,
40
+ findings: [],
41
+ notes: [],
42
+ };
43
+ RUNS.set(record.id, record);
44
+ return record;
45
+ }
46
+ function appendScaffoldFinding(runId, copyText) {
47
+ const current = RUNS.get(runId);
48
+ if (!current)
49
+ return;
50
+ current.findings.push({
51
+ id: randomUUID(),
52
+ check_id: "copypass.scaffold.placeholder",
53
+ title: "CopyPass scaffold is wired, but automated copy checks have not landed yet",
54
+ severity: "low",
55
+ verdict: "na",
56
+ category: "scaffold",
57
+ description: "This run proves the CopyPass MCP and admin surface are connected. Evidence-led copy checks land in a later chunk.",
58
+ remediation: "Use this scaffold to test routing, entitlement, and UI placement now. Add deterministic copy checks before calling the result a real verdict.",
59
+ evidence: {
60
+ copy_length: copyText.length,
61
+ preview: previewCopy(copyText),
62
+ channel: current.target.channel ?? null,
63
+ audience: current.target.audience ?? null,
64
+ goal: current.target.goal ?? null,
65
+ },
66
+ created_at: new Date().toISOString(),
67
+ });
68
+ current.verdict_summary = summarize(current.findings);
69
+ RUNS.set(runId, current);
70
+ }
71
+ function appendNote(runId, note) {
72
+ const current = RUNS.get(runId);
73
+ if (!current)
74
+ return;
75
+ current.notes.push(note);
76
+ RUNS.set(runId, current);
77
+ }
78
+ export async function copypassRun(args) {
79
+ const copyText = typeof args.copy_text === "string" ? args.copy_text.trim() : "";
80
+ if (!copyText)
81
+ return { error: "copy_text is required" };
82
+ const profile = parseProfile(args.profile);
83
+ if (!profile)
84
+ return { error: "profile must be one of: smoke, standard, deep" };
85
+ const run = createRunRecord(copyText, profile, args);
86
+ RUNS.set(run.id, { ...run, status: "running" });
87
+ appendScaffoldFinding(run.id, copyText);
88
+ appendNote(run.id, "Chunk 1 scaffold only: CopyPass surface is live, but deterministic copy-quality checks land in a later chunk.");
89
+ appendNote(run.id, "Use channel, audience, and goal fields now so later evaluator passes inherit realistic operator context.");
90
+ const completed = RUNS.get(run.id);
91
+ if (!completed)
92
+ return { error: "run disappeared before completion" };
93
+ completed.status = "complete";
94
+ completed.completed_at = new Date().toISOString();
95
+ RUNS.set(run.id, completed);
96
+ return {
97
+ run_id: completed.id,
98
+ status: completed.status,
99
+ finding_count: completed.findings.length,
100
+ verdict_summary: completed.verdict_summary,
101
+ notes: completed.notes,
102
+ preview: completed.target.copy_text_preview,
103
+ };
104
+ }
105
+ export async function copypassStatus(args) {
106
+ const runId = typeof args.run_id === "string" ? args.run_id : "";
107
+ if (!runId)
108
+ return { error: "run_id is required" };
109
+ const run = RUNS.get(runId);
110
+ if (!run)
111
+ return { error: `CopyPass run '${runId}' was not found in this MCP session` };
112
+ return {
113
+ run_id: run.id,
114
+ status: run.status,
115
+ profile: run.profile,
116
+ finding_count: run.findings.length,
117
+ verdict_summary: run.verdict_summary,
118
+ target: run.target,
119
+ notes: run.notes,
120
+ completed_at: run.completed_at,
121
+ };
122
+ }
123
+ //# sourceMappingURL=copypass-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copypass-tool.js","sourceRoot":"","sources":["../src/copypass-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=copypass-tool.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copypass-tool.test.d.ts","sourceRoot":"","sources":["../src/copypass-tool.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { copypassRun, copypassStatus } from "./copypass-tool.js";
3
+ describe("copypass-tool", () => {
4
+ it("requires copy_text", async () => {
5
+ const result = (await copypassRun({}));
6
+ expect(result.error).toMatch(/copy_text is required/);
7
+ });
8
+ it("rejects invalid profiles", async () => {
9
+ const result = (await copypassRun({
10
+ copy_text: "Try the new operator stack.",
11
+ profile: "turbo",
12
+ }));
13
+ expect(result.error).toMatch(/profile must be one of/);
14
+ });
15
+ it("stores an in-memory scaffold run and exposes status", async () => {
16
+ const run = (await copypassRun({
17
+ copy_text: "Ship the fastest way to turn your chat model into a useful operator.",
18
+ channel: "homepage_hero",
19
+ audience: "technical founders",
20
+ goal: "clarity and conversion",
21
+ profile: "smoke",
22
+ }));
23
+ expect(run.status).toBe("complete");
24
+ expect(run.finding_count).toBe(1);
25
+ expect(run.verdict_summary?.na).toBe(1);
26
+ expect(run.run_id).toBeTruthy();
27
+ const status = (await copypassStatus({
28
+ run_id: run.run_id,
29
+ }));
30
+ expect(status.run_id).toBe(run.run_id);
31
+ expect(status.status).toBe("complete");
32
+ expect(status.target?.channel).toBe("homepage_hero");
33
+ });
34
+ it("returns a clear error for missing run ids", async () => {
35
+ const status = (await copypassStatus({
36
+ run_id: "missing-run-id",
37
+ }));
38
+ expect(status.error).toMatch(/was not found in this MCP session/);
39
+ });
40
+ });
41
+ //# sourceMappingURL=copypass-tool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copypass-tool.test.js","sourceRoot":"","sources":["../src/copypass-tool.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEjE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,CAAuB,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC;YAChC,SAAS,EAAE,6BAA6B;YACxC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAuB,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,CAAC,MAAM,WAAW,CAAC;YAC7B,SAAS,EAAE,sEAAsE;YACjF,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,oBAAoB;YAC9B,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAoG,CAAC;QAEvG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAEhC,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAwE,CAAC;QAE3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,CAAC;YACnC,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAuB,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * legalpass-tool - MCP exposure for LegalPass.
3
+ *
4
+ * LegalPass is an issue-spotter only. These handlers expose the existing
5
+ * LegalPass guardrails to MCP callers without pretending a full legal review
6
+ * engine exists yet.
7
+ */
8
+ export declare function lintLegalPassVerdict(text: string): Array<{
9
+ phrase: string;
10
+ index: number;
11
+ reason: string;
12
+ }>;
13
+ export declare function legalpassRun(args: Record<string, unknown>): Promise<unknown>;
14
+ export declare function legalpassVerdict(args: Record<string, unknown>): Promise<unknown>;
15
+ //# sourceMappingURL=legalpass-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legalpass-tool.d.ts","sourceRoot":"","sources":["../src/legalpass-tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2EH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAU3G;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BlF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAYtF"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * legalpass-tool - MCP exposure for LegalPass.
3
+ *
4
+ * LegalPass is an issue-spotter only. These handlers expose the existing
5
+ * LegalPass guardrails to MCP callers without pretending a full legal review
6
+ * engine exists yet.
7
+ */
8
+ const DISCLAIMERS = {
9
+ chat: "LegalPass is an issue-spotter, not a lawyer. It surfaces risks in plain " +
10
+ "English and does not give legal advice, take legal action on your behalf, " +
11
+ "or replace counsel. For action on a specific matter, engage a qualified " +
12
+ "human practitioner in your jurisdiction.",
13
+ results: "These findings are issue-spotting output only. LegalPass is not a lawyer, " +
14
+ "law firm, or substitute for one, and nothing here is legal advice or a " +
15
+ "legal opinion about your situation. No solicitor-client or attorney-client " +
16
+ "relationship is created. Items are flagged using a twelve-hat panel, with " +
17
+ "every claim traced to a primary source by the Citation Verifier. " +
18
+ "Jurisdictions named are routing hints, not warranties of coverage. Before " +
19
+ "acting on any item, consult a qualified practitioner admitted in the " +
20
+ "relevant jurisdiction. You can engage one through the LegalPass " +
21
+ "marketplace bolt-on or any provider of your choice. LegalPass disclaims " +
22
+ "liability for action or inaction taken on the basis of this report.",
23
+ tos: "LegalPass is an automated issue-spotting service operated by UnClick. It " +
24
+ "is not a lawyer, attorney, solicitor, barrister, law firm, or licensed " +
25
+ "provider of legal services in any jurisdiction. Use of LegalPass does " +
26
+ "not create a solicitor-client, attorney-client, or fiduciary relationship " +
27
+ "between you and UnClick. Output is provided for informational purposes " +
28
+ "only. It is not legal advice, a legal opinion, legal representation, " +
29
+ "certification of compliance, or a guarantee that any document is " +
30
+ "lawful. LegalPass does not draft, execute, file, or serve " +
31
+ "any transactional legal instrument and does not recommend that you take " +
32
+ "or refrain from any specific legal action. Findings reference primary " +
33
+ "sources via the Citation Verifier hard-veto, but those references may " +
34
+ "be incomplete or out of date. Jurisdictional routing is best-effort and " +
35
+ "may be wrong; you are responsible for confirming jurisdiction with a " +
36
+ "qualified practitioner. Where LegalPass surfaces an option to engage a " +
37
+ "practitioner through the marketplace bolt-on, that practitioner contracts " +
38
+ "with you directly and is solely responsible for services they provide. " +
39
+ "To the fullest extent permitted by law, UnClick disclaims all liability " +
40
+ "for loss, damage, or cost arising from action or inaction taken on the " +
41
+ "basis of LegalPass output. Always consult a qualified practitioner " +
42
+ "before acting on any finding, and treat the report as a starting point. " +
43
+ "Rubrics are updated periodically; an item rated as a check today may be " +
44
+ "rated otherwise tomorrow, and you should not rely on a stale report. " +
45
+ "LegalPass does not retain privilege over uploads and does not assert " +
46
+ "work-product protection. Where you face dispute resolution, statutes of " +
47
+ "limitation, or any other deadline, LegalPass does not track or warn " +
48
+ "you, and a missed deadline remains your responsibility. If a finding " +
49
+ "conflicts with advice from a practitioner you have engaged, defer to " +
50
+ "the practitioner. UnClick may update these terms, the rubrics, the hat " +
51
+ "roster, and the routing logic at any time without notice, and continued " +
52
+ "use constitutes acceptance.",
53
+ };
54
+ const FORBIDDEN_PHRASES = [
55
+ { phrase: "should", reason: "directive verb - implies a recommendation" },
56
+ { phrase: "must", reason: "directive verb - implies an obligation" },
57
+ { phrase: "you need to", reason: "directive phrasing - implies an instruction" },
58
+ { phrase: "you have to", reason: "directive phrasing - implies an instruction" },
59
+ { phrase: "we recommend", reason: "first-person recommendation - prohibited" },
60
+ { phrase: "this is illegal", reason: "definitive legal conclusion - prohibited" },
61
+ { phrase: "you will win", reason: "outcome prediction - prohibited" },
62
+ { phrase: "you will lose", reason: "outcome prediction - prohibited" },
63
+ ];
64
+ const ALLOWED_PHRASES = ["appears", "may", "consider", "in similar contracts", "warrants review"];
65
+ function escapeRegex(value) {
66
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
67
+ }
68
+ function disclaimerLength(value) {
69
+ return value === "chat" || value === "tos" ? value : "results";
70
+ }
71
+ export function lintLegalPassVerdict(text) {
72
+ const issues = [];
73
+ for (const { phrase, reason } of FORBIDDEN_PHRASES) {
74
+ const pattern = new RegExp(`\\b${escapeRegex(phrase)}\\b`, "gi");
75
+ let match;
76
+ while ((match = pattern.exec(text)) !== null) {
77
+ issues.push({ phrase, index: match.index, reason });
78
+ }
79
+ }
80
+ return issues.sort((a, b) => a.index - b.index);
81
+ }
82
+ export async function legalpassRun(args) {
83
+ const packId = typeof args.pack_id === "string" && args.pack_id ? args.pack_id : "legalpass-mvp-v0";
84
+ const target = args.target && typeof args.target === "object" && !Array.isArray(args.target)
85
+ ? args.target
86
+ : null;
87
+ const profile = typeof args.profile === "string" ? args.profile : "smoke";
88
+ const jurisdictions = Array.isArray(args.jurisdictions) ? args.jurisdictions.filter((item) => typeof item === "string") : [];
89
+ if (!target || typeof target.kind !== "string") {
90
+ return { error: "target.kind is required" };
91
+ }
92
+ return {
93
+ status: "planned",
94
+ pass: "legalpass",
95
+ pack_id: packId,
96
+ target,
97
+ profile,
98
+ jurisdictions,
99
+ disclaimer: DISCLAIMERS.chat,
100
+ note: "LegalPass MCP exposure is scaffold-only. It returns the guarded run plan now; full 12-hat execution lands in a later LegalPass engine chip.",
101
+ safety: {
102
+ issue_spotter_only: true,
103
+ no_legal_advice: true,
104
+ no_transactional_instrument: true,
105
+ },
106
+ };
107
+ }
108
+ export async function legalpassVerdict(args) {
109
+ const verdictText = typeof args.verdict_text === "string" ? args.verdict_text : "";
110
+ const length = disclaimerLength(args.disclaimer_length);
111
+ const issues = verdictText ? lintLegalPassVerdict(verdictText) : [];
112
+ return {
113
+ ok: issues.length === 0,
114
+ safe_to_emit: issues.length === 0,
115
+ issues,
116
+ allowed_framing: ALLOWED_PHRASES,
117
+ disclaimer_length: length,
118
+ disclaimer: DISCLAIMERS[length],
119
+ };
120
+ }
121
+ //# sourceMappingURL=legalpass-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legalpass-tool.js","sourceRoot":"","sources":["../src/legalpass-tool.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { test, describe } from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { compactSearchMemoryForStrictClients, compactStartupContextForStrictClients, filterInvalidatedActiveFactsForLoadMemory, } from "../handlers.js";
3
+ import { compactSearchMemoryForStrictClients, compactStartupContextForStrictClients, normalizeActiveFactsForLoadMemory, } from "../handlers.js";
4
4
  const long = (prefix, size) => `${prefix} ${"x".repeat(size)}`;
5
5
  describe("strict-client memory response bounds", () => {
6
6
  test("load_memory compact mode skips session bodies and keeps payload small", () => {
@@ -73,7 +73,7 @@ describe("strict-client memory response bounds", () => {
73
73
  assert.equal(compact.response_bounds.active_facts_available_in_loaded_window, 12);
74
74
  });
75
75
  test("load_memory full-content path filters invalidated active facts", () => {
76
- const filtered = filterInvalidatedActiveFactsForLoadMemory({
76
+ const filtered = normalizeActiveFactsForLoadMemory({
77
77
  active_facts: [
78
78
  { fact: "live", invalidated_at: null, extra: "kept" },
79
79
  { fact: "stale", invalidated_at: "2026-04-29T00:00:00Z" },
@@ -81,6 +81,35 @@ describe("strict-client memory response bounds", () => {
81
81
  });
82
82
  assert.deepEqual(filtered.active_facts, [{ fact: "live", invalidated_at: null, extra: "kept" }]);
83
83
  });
84
+ test("load_memory demotes operational self-report rows behind durable user facts", () => {
85
+ const compact = compactStartupContextForStrictClients({
86
+ active_facts: [
87
+ {
88
+ fact: "No Fishbowl write tools were available in this environment.",
89
+ category: "memory",
90
+ confidence: 0.99,
91
+ created_at: "2026-04-27T10:00:00Z",
92
+ },
93
+ {
94
+ fact: "TESTPASS_CRON_USER_ID cron blocker resolved after redeploy.",
95
+ category: "ops",
96
+ confidence: 0.98,
97
+ created_at: "2026-04-27T10:01:00Z",
98
+ },
99
+ ...Array.from({ length: 12 }, (_, i) => ({
100
+ fact: `durable-user-fact-${i}`,
101
+ category: "user",
102
+ confidence: 0.9 - i * 0.01,
103
+ created_at: `2026-04-29T00:${String(i).padStart(2, "0")}:00Z`,
104
+ })),
105
+ ],
106
+ });
107
+ const facts = compact.active_facts.map((row) => row.fact);
108
+ assert.equal(facts.length, 12);
109
+ assert.equal(facts.includes("No Fishbowl write tools were available in this environment."), false);
110
+ assert.equal(facts.includes("TESTPASS_CRON_USER_ID cron blocker resolved after redeploy."), false);
111
+ assert.deepEqual(facts.slice(0, 3), ["durable-user-fact-0", "durable-user-fact-1", "durable-user-fact-2"]);
112
+ });
84
113
  test("search_memory caps content previews by default", () => {
85
114
  const compact = compactSearchMemoryForStrictClients(Array.from({ length: 10 }, (_, i) => ({
86
115
  id: `r-${i}`,
@@ -1 +1 @@
1
- {"version":3,"file":"response-bounds.test.js","sourceRoot":"","sources":["../../../src/memory/__tests__/response-bounds.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-bounds.test.js","sourceRoot":"","sources":["../../../src/memory/__tests__/response-bounds.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,mCAAmC,EACnC,qCAAqC,EACrC,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AAExB,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAE/E,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;QACjF,MAAM,GAAG,GAAG;YACV,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,QAAQ,CAAC,EAAE;gBAChB,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;gBAC7B,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,OAAO,CAAC,EAAE;gBAChB,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;gBACzB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACzC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC3B,UAAU,EAAE,sBAAsB;aACnC,CAAC,CAAC;YACH,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpD,UAAU,EAAE,KAAK,CAAC,EAAE;gBACpB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;gBAC9B,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAClC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC5B,UAAU,EAAE,sBAAsB;aACnC,CAAC,CAAC;YACH,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;gBAC7B,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,sBAAsB;aACnC,CAAC,CAAC;SACJ,CAAC;QAEF,MAAM,OAAO,GAAG,qCAAqC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,eAAe,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAE,OAA0C,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG,qCAAqC,CAAC;YACpD,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;SACzE,EAAE,IAAI,CAAoD,CAAC;QAE5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC/E,MAAM,OAAO,GAAG,qCAAqC,CAAC;YACpD,YAAY,EAAE;gBACZ;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,sBAAsB;oBAClC,cAAc,EAAE,sBAAsB;iBACvC;gBACD,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvC,IAAI,EAAE,QAAQ,CAAC,EAAE;oBACjB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,sBAAsB;oBAClC,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;aACJ;SACF,CAAoH,CAAC;QAEtH,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC1E,MAAM,QAAQ,GAAG,iCAAiC,CAAC;YACjD,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;gBACrD,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE;aAC1D;SACF,CAA6F,CAAC;QAE/F,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACtF,MAAM,OAAO,GAAG,qCAAqC,CAAC;YACpD,YAAY,EAAE;gBACZ;oBACE,IAAI,EAAE,6DAA6D;oBACnE,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,sBAAsB;iBACnC;gBACD;oBACE,IAAI,EAAE,6DAA6D;oBACnE,QAAQ,EAAE,KAAK;oBACf,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,sBAAsB;iBACnC;gBACD,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvC,IAAI,EAAE,qBAAqB,CAAC,EAAE;oBAC9B,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI;oBAC1B,UAAU,EAAE,iBAAiB,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM;iBAC9D,CAAC,CAAC;aACJ;SACF,CAA8C,CAAC;QAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,6DAA6D,CAAC,EAAE,KAAK,CAAC,CAAC;QACnG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,6DAA6D,CAAC,EAAE,KAAK,CAAC,CAAC;QACnG,MAAM,CAAC,SAAS,CACd,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CACtE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG,mCAAmC,CACjD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;SAC/B,CAAC,CAAC,CACJ,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,eAAe,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAE,OAAsC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * params object. Used by both direct MCP tools and the unclick_call meta-tool.
7
7
  */
8
8
  type Args = Record<string, unknown>;
9
- export declare function filterInvalidatedActiveFactsForLoadMemory(value: unknown): unknown;
9
+ export declare function normalizeActiveFactsForLoadMemory(value: unknown): unknown;
10
10
  export declare function compactStartupContextForStrictClients(value: unknown, includeSessionSummaries?: boolean): unknown;
11
11
  export declare function compactSearchMemoryForStrictClients(value: unknown): unknown;
12
12
  export declare const MEMORY_HANDLERS: Record<string, (args: Args) => Promise<unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/memory/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAgDpC,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOjF;AAED,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,EACd,uBAAuB,UAAQ,GAC9B,OAAO,CA8CT;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW3E;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAuO5E,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/memory/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA0GpC,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuBzE;AAED,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,EACd,uBAAuB,UAAQ,GAC9B,OAAO,CA8CT;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW3E;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAuO5E,CAAC"}