@promptwheel/mcp 0.6.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.
- package/README.md +178 -0
- package/dist/advance-helpers.d.ts +27 -0
- package/dist/advance-helpers.d.ts.map +1 -0
- package/dist/advance-helpers.js +127 -0
- package/dist/advance-helpers.js.map +1 -0
- package/dist/advance-prompts.d.ts +48 -0
- package/dist/advance-prompts.d.ts.map +1 -0
- package/dist/advance-prompts.js +420 -0
- package/dist/advance-prompts.js.map +1 -0
- package/dist/advance.d.ts +30 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +752 -0
- package/dist/advance.js.map +1 -0
- package/dist/codebase-index.d.ts +5 -0
- package/dist/codebase-index.d.ts.map +1 -0
- package/dist/codebase-index.js +5 -0
- package/dist/codebase-index.js.map +1 -0
- package/dist/dedup-memory.d.ts +30 -0
- package/dist/dedup-memory.d.ts.map +1 -0
- package/dist/dedup-memory.js +76 -0
- package/dist/dedup-memory.js.map +1 -0
- package/dist/direct-client.d.ts +57 -0
- package/dist/direct-client.d.ts.map +1 -0
- package/dist/direct-client.js +92 -0
- package/dist/direct-client.js.map +1 -0
- package/dist/event-handlers-qa.d.ts +5 -0
- package/dist/event-handlers-qa.d.ts.map +1 -0
- package/dist/event-handlers-qa.js +186 -0
- package/dist/event-handlers-qa.js.map +1 -0
- package/dist/event-handlers-scout.d.ts +5 -0
- package/dist/event-handlers-scout.d.ts.map +1 -0
- package/dist/event-handlers-scout.js +270 -0
- package/dist/event-handlers-scout.js.map +1 -0
- package/dist/event-handlers-ticket.d.ts +5 -0
- package/dist/event-handlers-ticket.d.ts.map +1 -0
- package/dist/event-handlers-ticket.js +232 -0
- package/dist/event-handlers-ticket.js.map +1 -0
- package/dist/event-helpers.d.ts +46 -0
- package/dist/event-helpers.d.ts.map +1 -0
- package/dist/event-helpers.js +125 -0
- package/dist/event-helpers.js.map +1 -0
- package/dist/event-processor.d.ts +15 -0
- package/dist/event-processor.d.ts.map +1 -0
- package/dist/event-processor.js +111 -0
- package/dist/event-processor.js.map +1 -0
- package/dist/formulas.d.ts +27 -0
- package/dist/formulas.d.ts.map +1 -0
- package/dist/formulas.js +109 -0
- package/dist/formulas.js.map +1 -0
- package/dist/guidelines.d.ts +16 -0
- package/dist/guidelines.d.ts.map +1 -0
- package/dist/guidelines.js +44 -0
- package/dist/guidelines.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/learnings.d.ts +42 -0
- package/dist/learnings.d.ts.map +1 -0
- package/dist/learnings.js +117 -0
- package/dist/learnings.js.map +1 -0
- package/dist/project-metadata.d.ts +34 -0
- package/dist/project-metadata.d.ts.map +1 -0
- package/dist/project-metadata.js +617 -0
- package/dist/project-metadata.js.map +1 -0
- package/dist/proposals.d.ts +23 -0
- package/dist/proposals.d.ts.map +1 -0
- package/dist/proposals.js +201 -0
- package/dist/proposals.js.map +1 -0
- package/dist/qa-stats.d.ts +51 -0
- package/dist/qa-stats.d.ts.map +1 -0
- package/dist/qa-stats.js +121 -0
- package/dist/qa-stats.js.map +1 -0
- package/dist/run-manager.d.ts +97 -0
- package/dist/run-manager.d.ts.map +1 -0
- package/dist/run-manager.js +583 -0
- package/dist/run-manager.js.map +1 -0
- package/dist/run-state-bridge.d.ts +13 -0
- package/dist/run-state-bridge.d.ts.map +1 -0
- package/dist/run-state-bridge.js +101 -0
- package/dist/run-state-bridge.js.map +1 -0
- package/dist/scope-policy.d.ts +83 -0
- package/dist/scope-policy.d.ts.map +1 -0
- package/dist/scope-policy.js +278 -0
- package/dist/scope-policy.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +35 -0
- package/dist/server.js.map +1 -0
- package/dist/spindle.d.ts +41 -0
- package/dist/spindle.d.ts.map +1 -0
- package/dist/spindle.js +230 -0
- package/dist/spindle.js.map +1 -0
- package/dist/state.d.ts +36 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +50 -0
- package/dist/state.js.map +1 -0
- package/dist/ticket-worker.d.ts +37 -0
- package/dist/ticket-worker.d.ts.map +1 -0
- package/dist/ticket-worker.js +527 -0
- package/dist/ticket-worker.js.map +1 -0
- package/dist/tool-registry.d.ts +35 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +129 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/execute.d.ts +17 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +418 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/git.d.ts +7 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +98 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/intelligence.d.ts +10 -0
- package/dist/tools/intelligence.d.ts.map +1 -0
- package/dist/tools/intelligence.js +432 -0
- package/dist/tools/intelligence.js.map +1 -0
- package/dist/tools/session.d.ts +7 -0
- package/dist/tools/session.d.ts.map +1 -0
- package/dist/tools/session.js +533 -0
- package/dist/tools/session.js.map +1 -0
- package/dist/tools/trajectory.d.ts +10 -0
- package/dist/tools/trajectory.d.ts.map +1 -0
- package/dist/tools/trajectory.js +374 -0
- package/dist/tools/trajectory.js.map +1 -0
- package/dist/trajectory-io.d.ts +21 -0
- package/dist/trajectory-io.d.ts.map +1 -0
- package/dist/trajectory-io.js +105 -0
- package/dist/trajectory-io.js.map +1 -0
- package/dist/types.d.ts +229 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-run learning mechanism.
|
|
3
|
+
*
|
|
4
|
+
* Persists learnings to `.promptwheel/learnings.json` and provides
|
|
5
|
+
* decay, consolidation, relevance scoring, and prompt formatting.
|
|
6
|
+
*
|
|
7
|
+
* Pure algorithms live in @promptwheel/core/learnings/shared.
|
|
8
|
+
* This file wraps them with filesystem I/O.
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'node:fs';
|
|
11
|
+
import * as path from 'node:path';
|
|
12
|
+
import * as crypto from 'node:crypto';
|
|
13
|
+
import { applyLearningsDecay, consolidateLearnings as coreConsolidate, LEARNINGS_DEFAULTS, } from '@promptwheel/core/learnings/shared';
|
|
14
|
+
export { formatLearningsForPrompt, extractKeywords, selectRelevant, extractTags, LEARNINGS_DEFAULTS, } from '@promptwheel/core/learnings/shared';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// File I/O
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
const LEARNINGS_FILE = 'learnings.json';
|
|
19
|
+
function learningsPath(projectRoot) {
|
|
20
|
+
return path.join(projectRoot, '.promptwheel', LEARNINGS_FILE);
|
|
21
|
+
}
|
|
22
|
+
function readLearnings(projectRoot) {
|
|
23
|
+
const fp = learningsPath(projectRoot);
|
|
24
|
+
if (!fs.existsSync(fp))
|
|
25
|
+
return [];
|
|
26
|
+
try {
|
|
27
|
+
const raw = fs.readFileSync(fp, 'utf8');
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.warn(`[promptwheel] failed to parse learnings.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function writeLearnings(projectRoot, learnings) {
|
|
37
|
+
const fp = learningsPath(projectRoot);
|
|
38
|
+
const dir = path.dirname(fp);
|
|
39
|
+
if (!fs.existsSync(dir)) {
|
|
40
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
fs.writeFileSync(fp, JSON.stringify(learnings, null, 2) + '\n', 'utf8');
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Core API (wraps core algorithms with I/O)
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* Load learnings, apply decay, prune dead entries, write back.
|
|
49
|
+
* Called once per session start.
|
|
50
|
+
*/
|
|
51
|
+
export function loadLearnings(projectRoot, decayRate = LEARNINGS_DEFAULTS.DECAY_RATE) {
|
|
52
|
+
const learnings = readLearnings(projectRoot);
|
|
53
|
+
const surviving = applyLearningsDecay(learnings, decayRate);
|
|
54
|
+
writeLearnings(projectRoot, surviving);
|
|
55
|
+
return surviving;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Add a new learning with sensible defaults.
|
|
59
|
+
*/
|
|
60
|
+
export function addLearning(projectRoot, input) {
|
|
61
|
+
const learnings = readLearnings(projectRoot);
|
|
62
|
+
const now = new Date().toISOString();
|
|
63
|
+
const learning = {
|
|
64
|
+
id: crypto.randomBytes(4).toString('hex'),
|
|
65
|
+
text: input.text.slice(0, 200),
|
|
66
|
+
category: input.category,
|
|
67
|
+
source: input.source,
|
|
68
|
+
tags: input.tags ?? [],
|
|
69
|
+
weight: LEARNINGS_DEFAULTS.DEFAULT_WEIGHT,
|
|
70
|
+
created_at: now,
|
|
71
|
+
last_confirmed_at: now,
|
|
72
|
+
access_count: 0,
|
|
73
|
+
structured: input.structured,
|
|
74
|
+
};
|
|
75
|
+
learnings.push(learning);
|
|
76
|
+
writeLearnings(projectRoot, learnings);
|
|
77
|
+
return learning;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Confirm a learning: bump weight +10 and update last_confirmed_at.
|
|
81
|
+
*/
|
|
82
|
+
export function confirmLearning(projectRoot, id) {
|
|
83
|
+
const learnings = readLearnings(projectRoot);
|
|
84
|
+
const l = learnings.find(x => x.id === id);
|
|
85
|
+
if (!l)
|
|
86
|
+
return;
|
|
87
|
+
l.weight = Math.min(LEARNINGS_DEFAULTS.MAX_WEIGHT, l.weight + 10);
|
|
88
|
+
l.last_confirmed_at = new Date().toISOString();
|
|
89
|
+
writeLearnings(projectRoot, learnings);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Record access: increment access_count for each id.
|
|
93
|
+
*/
|
|
94
|
+
export function recordAccess(projectRoot, ids) {
|
|
95
|
+
if (ids.length === 0)
|
|
96
|
+
return;
|
|
97
|
+
const learnings = readLearnings(projectRoot);
|
|
98
|
+
const idSet = new Set(ids);
|
|
99
|
+
for (const l of learnings) {
|
|
100
|
+
if (idSet.has(l.id)) {
|
|
101
|
+
l.access_count++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
writeLearnings(projectRoot, learnings);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Consolidate near-duplicate learnings (>70% text similarity).
|
|
108
|
+
* Keeps the higher weight entry, sums access counts.
|
|
109
|
+
*/
|
|
110
|
+
export function consolidateLearnings(projectRoot) {
|
|
111
|
+
const learnings = readLearnings(projectRoot);
|
|
112
|
+
const result = coreConsolidate(learnings);
|
|
113
|
+
if (result !== null) {
|
|
114
|
+
writeLearnings(projectRoot, result);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=learnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learnings.js","sourceRoot":"","sources":["../src/learnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAGL,mBAAmB,EACnB,oBAAoB,IAAI,eAAe,EACvC,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAK5C,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,SAAS,aAAa,CAAC,WAAmB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB;IACxC,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,iDAAiD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClH,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB,EAAE,SAAqB;IAChE,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,YAAoB,kBAAkB,CAAC,UAAU;IAClG,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5D,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,WAAmB,EACnB,KAMC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;QACtB,MAAM,EAAE,kBAAkB,CAAC,cAAc;QACzC,UAAU,EAAE,GAAG;QACf,iBAAiB,EAAE,GAAG;QACtB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,EAAU;IAC7D,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,OAAO;IACf,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,GAAa;IAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,CAAC,CAAC,YAAY,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Metadata — framework-agnostic detection of tooling, test runners,
|
|
3
|
+
* package managers, and languages.
|
|
4
|
+
*
|
|
5
|
+
* Scans config files at the project root to build a structured summary
|
|
6
|
+
* that gets injected into scout prompts so the LLM knows which CLI
|
|
7
|
+
* flags and conventions to use.
|
|
8
|
+
*/
|
|
9
|
+
export interface ProjectMetadata {
|
|
10
|
+
/** Primary language(s) detected */
|
|
11
|
+
languages: string[];
|
|
12
|
+
/** Package manager (npm, yarn, pnpm, bun, pip, poetry, cargo, go, mix, bundle, maven, gradle) */
|
|
13
|
+
package_manager: string | null;
|
|
14
|
+
/** Test runner and CLI syntax */
|
|
15
|
+
test_runner: TestRunnerInfo | null;
|
|
16
|
+
/** App framework (next, remix, express, django, flask, rails, phoenix, spring, etc.) */
|
|
17
|
+
framework: string | null;
|
|
18
|
+
/** Linter (eslint, biome, ruff, clippy, golangci-lint, rubocop, etc.) */
|
|
19
|
+
linter: string | null;
|
|
20
|
+
/** Type checker if separate from compiler (tsc, mypy, pyright, etc.) */
|
|
21
|
+
type_checker: string | null;
|
|
22
|
+
/** Monorepo tool (turborepo, nx, lerna, cargo workspaces, etc.) */
|
|
23
|
+
monorepo_tool: string | null;
|
|
24
|
+
/** Raw detection signals for debugging */
|
|
25
|
+
signals: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface TestRunnerInfo {
|
|
28
|
+
name: string;
|
|
29
|
+
run_command: string;
|
|
30
|
+
filter_syntax: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function detectProjectMetadata(projectRoot: string): ProjectMetadata;
|
|
33
|
+
export declare function formatMetadataForPrompt(meta: ProjectMetadata): string;
|
|
34
|
+
//# sourceMappingURL=project-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-metadata.d.ts","sourceRoot":"","sources":["../src/project-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iGAAiG;IACjG,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iCAAiC;IACjC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,wFAAwF;IACxF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wEAAwE;IACxE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAue1E;AA+BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA8BrE"}
|