@jonit-dev/night-watch-cli 1.7.24 → 1.7.27
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/dist/shared/types.d.ts +2 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/src/agents/soul-compiler.d.ts.map +1 -1
- package/dist/src/agents/soul-compiler.js +60 -6
- package/dist/src/agents/soul-compiler.js.map +1 -1
- package/dist/src/commands/qa.d.ts +4 -0
- package/dist/src/commands/qa.d.ts.map +1 -1
- package/dist/src/commands/qa.js +35 -0
- package/dist/src/commands/qa.js.map +1 -1
- package/dist/src/commands/serve.d.ts +12 -0
- package/dist/src/commands/serve.d.ts.map +1 -1
- package/dist/src/commands/serve.js +115 -0
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +16 -3
- package/dist/src/config.js.map +1 -1
- package/dist/src/slack/channel-manager.js +3 -3
- package/dist/src/slack/channel-manager.js.map +1 -1
- package/dist/src/slack/client.d.ts +10 -2
- package/dist/src/slack/client.d.ts.map +1 -1
- package/dist/src/slack/client.js +38 -5
- package/dist/src/slack/client.js.map +1 -1
- package/dist/src/slack/deliberation.d.ts +26 -1
- package/dist/src/slack/deliberation.d.ts.map +1 -1
- package/dist/src/slack/deliberation.js +325 -53
- package/dist/src/slack/deliberation.js.map +1 -1
- package/dist/src/slack/interaction-listener.d.ts +54 -0
- package/dist/src/slack/interaction-listener.d.ts.map +1 -1
- package/dist/src/slack/interaction-listener.js +830 -13
- package/dist/src/slack/interaction-listener.js.map +1 -1
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/index.js +2 -0
- package/dist/src/storage/repositories/index.js.map +1 -1
- package/dist/src/storage/repositories/interfaces.d.ts +1 -0
- package/dist/src/storage/repositories/interfaces.d.ts.map +1 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts +5 -0
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +243 -100
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +1 -1
- package/dist/src/utils/avatar-generator.d.ts +1 -1
- package/dist/src/utils/avatar-generator.d.ts.map +1 -1
- package/dist/src/utils/avatar-generator.js +62 -17
- package/dist/src/utils/avatar-generator.js.map +1 -1
- package/dist/src/utils/notify.d.ts +1 -0
- package/dist/src/utils/notify.d.ts.map +1 -1
- package/dist/src/utils/notify.js +13 -1
- package/dist/src/utils/notify.js.map +1 -1
- package/package.json +1 -1
- package/scripts/night-watch-pr-reviewer-cron.sh +36 -8
- package/scripts/night-watch-qa-cron.sh +15 -3
- package/templates/night-watch-pr-reviewer.md +46 -17
- package/web/dist/avatars/carlos.webp +0 -0
- package/web/dist/avatars/dev.webp +0 -0
- package/web/dist/avatars/maya.webp +0 -0
- package/web/dist/avatars/priya.webp +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-manager.js","sourceRoot":"","sources":["../../../src/slack/channel-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;GAGG;AACH,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,2DAA2D;AAC9E,CAAC;AAED,MAAM,OAAO,cAAc;IACR,YAAY,CAAc;IAC1B,OAAO,CAAoB;IAE5C,YAAY,WAAwB,EAAE,MAAyB;QAC7D,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,WAAmB,EAAE,WAAmB;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,yBAAyB,EAAE,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAE3D,uCAAuC;QACvC,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,cAAc,CAAC;QAChC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,QAAQ,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAErE,mBAAmB;YACnB,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEjE,iCAAiC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEtE,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CACjC,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"channel-manager.js","sourceRoot":"","sources":["../../../src/slack/channel-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,22 @@ export interface ISlackMessage {
|
|
|
7
7
|
ts: string;
|
|
8
8
|
channel: string;
|
|
9
9
|
text: string;
|
|
10
|
+
username?: string;
|
|
10
11
|
}
|
|
11
12
|
export interface ISlackChannel {
|
|
12
13
|
id: string;
|
|
13
14
|
name: string;
|
|
14
15
|
}
|
|
16
|
+
export declare function getFallbackAvatarUrl(persona: IAgentPersona): string;
|
|
15
17
|
export declare class SlackClient {
|
|
16
18
|
private readonly _client;
|
|
17
|
-
|
|
19
|
+
private readonly _serverBaseUrl;
|
|
20
|
+
constructor(botToken: string, serverBaseUrl?: string);
|
|
21
|
+
/**
|
|
22
|
+
* Resolve an avatar URL: relative paths (e.g. /avatars/maya.webp) become
|
|
23
|
+
* absolute using the server base URL so Slack can fetch them.
|
|
24
|
+
*/
|
|
25
|
+
private _resolveAvatarUrl;
|
|
18
26
|
/**
|
|
19
27
|
* Post a message in Slack as a specific agent persona.
|
|
20
28
|
* Uses chat.postMessage with custom username and icon_url.
|
|
@@ -23,7 +31,7 @@ export declare class SlackClient {
|
|
|
23
31
|
/**
|
|
24
32
|
* Post a simple message to Slack using the bot's default identity.
|
|
25
33
|
*/
|
|
26
|
-
postMessage(channel: string, text: string): Promise<void>;
|
|
34
|
+
postMessage(channel: string, text: string, threadTs?: string): Promise<void>;
|
|
27
35
|
/**
|
|
28
36
|
* Resolve the bot user id for mention detection/filtering.
|
|
29
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/slack/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/slack/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAWD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAInE;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,QAAQ,EAAE,MAAM,EAAE,aAAa,SAA0B;IAKrE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;OAGG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAwBzB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM5C;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlD;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,OAAO,CAAC,aAAa,EAAE,CAAC;IAe3B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAY9C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IA6B1D;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAiBzE"}
|
package/dist/src/slack/client.js
CHANGED
|
@@ -3,10 +3,42 @@
|
|
|
3
3
|
* Uses the official @slack/web-api SDK for type-safe API calls.
|
|
4
4
|
*/
|
|
5
5
|
import { WebClient } from '@slack/web-api';
|
|
6
|
+
function roleAvatarColor(role) {
|
|
7
|
+
const normalized = role.toLowerCase();
|
|
8
|
+
if (normalized.includes('security'))
|
|
9
|
+
return '8b1e2f';
|
|
10
|
+
if (normalized.includes('qa') || normalized.includes('quality'))
|
|
11
|
+
return '0f766e';
|
|
12
|
+
if (normalized.includes('lead') || normalized.includes('architect'))
|
|
13
|
+
return '1d4ed8';
|
|
14
|
+
if (normalized.includes('implementer') || normalized.includes('developer'))
|
|
15
|
+
return '374151';
|
|
16
|
+
return '111827';
|
|
17
|
+
}
|
|
18
|
+
export function getFallbackAvatarUrl(persona) {
|
|
19
|
+
const background = roleAvatarColor(persona.role);
|
|
20
|
+
const name = encodeURIComponent(persona.name.trim() || 'Night Watch');
|
|
21
|
+
return `https://ui-avatars.com/api/?name=${name}&background=${background}&color=ffffff&size=128&bold=true&format=png`;
|
|
22
|
+
}
|
|
6
23
|
export class SlackClient {
|
|
7
24
|
_client;
|
|
8
|
-
|
|
25
|
+
_serverBaseUrl;
|
|
26
|
+
constructor(botToken, serverBaseUrl = 'http://localhost:7575') {
|
|
9
27
|
this._client = new WebClient(botToken);
|
|
28
|
+
this._serverBaseUrl = serverBaseUrl.replace(/\/$/, '');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve an avatar URL: relative paths (e.g. /avatars/maya.webp) become
|
|
32
|
+
* absolute using the server base URL so Slack can fetch them.
|
|
33
|
+
*/
|
|
34
|
+
_resolveAvatarUrl(avatarUrl) {
|
|
35
|
+
if (!avatarUrl || avatarUrl.startsWith('data:')) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
if (avatarUrl.startsWith('/')) {
|
|
39
|
+
return `${this._serverBaseUrl}${avatarUrl}`;
|
|
40
|
+
}
|
|
41
|
+
return avatarUrl;
|
|
10
42
|
}
|
|
11
43
|
/**
|
|
12
44
|
* Post a message in Slack as a specific agent persona.
|
|
@@ -14,9 +46,8 @@ export class SlackClient {
|
|
|
14
46
|
*/
|
|
15
47
|
async postAsAgent(channel, text, persona, threadTs) {
|
|
16
48
|
// Slack icon_url must be a real HTTP URL — data URIs are not supported
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
: undefined;
|
|
49
|
+
const resolved = this._resolveAvatarUrl(persona.avatarUrl);
|
|
50
|
+
const iconUrl = resolved || getFallbackAvatarUrl(persona);
|
|
20
51
|
const result = await this._client.chat.postMessage({
|
|
21
52
|
channel,
|
|
22
53
|
text,
|
|
@@ -36,10 +67,11 @@ export class SlackClient {
|
|
|
36
67
|
/**
|
|
37
68
|
* Post a simple message to Slack using the bot's default identity.
|
|
38
69
|
*/
|
|
39
|
-
async postMessage(channel, text) {
|
|
70
|
+
async postMessage(channel, text, threadTs) {
|
|
40
71
|
await this._client.chat.postMessage({
|
|
41
72
|
channel,
|
|
42
73
|
text,
|
|
74
|
+
thread_ts: threadTs,
|
|
43
75
|
});
|
|
44
76
|
}
|
|
45
77
|
/**
|
|
@@ -97,6 +129,7 @@ export class SlackClient {
|
|
|
97
129
|
ts: m.ts,
|
|
98
130
|
channel,
|
|
99
131
|
text: (m.text ?? ''),
|
|
132
|
+
username: m['username'],
|
|
100
133
|
}));
|
|
101
134
|
}
|
|
102
135
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/slack/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/slack/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,19 @@
|
|
|
6
6
|
import { IAgentPersona, IDiscussionTrigger, ISlackDiscussion } from "../../shared/types.js";
|
|
7
7
|
import { SlackClient } from "./client.js";
|
|
8
8
|
import { INightWatchConfig } from "../types.js";
|
|
9
|
+
interface IHumanizeSlackReplyOptions {
|
|
10
|
+
allowEmoji?: boolean;
|
|
11
|
+
allowNonFacialEmoji?: boolean;
|
|
12
|
+
maxSentences?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function humanizeSlackReply(raw: string, options?: IHumanizeSlackReplyOptions): string;
|
|
9
15
|
export declare class DeliberationEngine {
|
|
10
16
|
private readonly _slackClient;
|
|
11
17
|
private readonly _config;
|
|
12
18
|
private readonly _humanResumeTimers;
|
|
19
|
+
private readonly _emojiCadenceCounter;
|
|
13
20
|
constructor(slackClient: SlackClient, config: INightWatchConfig);
|
|
21
|
+
private _humanizeForPost;
|
|
14
22
|
/**
|
|
15
23
|
* Start a new discussion thread for a trigger event.
|
|
16
24
|
* Posts the opening message and kicks off the first round of contributions.
|
|
@@ -45,6 +53,23 @@ export declare class DeliberationEngine {
|
|
|
45
53
|
* Reply as a persona in any Slack thread — no formal discussion required.
|
|
46
54
|
* Used when someone @mentions a persona outside of a Night Watch discussion.
|
|
47
55
|
*/
|
|
48
|
-
replyAsAgent(channel: string, threadTs: string, incomingText: string, persona: IAgentPersona): Promise<void>;
|
|
56
|
+
replyAsAgent(channel: string, threadTs: string, incomingText: string, persona: IAgentPersona, projectContext?: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Generate and post a proactive message from a persona.
|
|
59
|
+
* Used by the interaction listener when a channel has been idle.
|
|
60
|
+
* The persona shares an observation, question, or suggestion based on
|
|
61
|
+
* project context and roadmap state — in their own voice.
|
|
62
|
+
*/
|
|
63
|
+
postProactiveMessage(channel: string, persona: IAgentPersona, projectContext: string, roadmapContext: string): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Generate a structured GitHub issue body written by the Dev persona.
|
|
66
|
+
*/
|
|
67
|
+
private _generateIssueBody;
|
|
68
|
+
/**
|
|
69
|
+
* Open a GitHub issue from a code_watch finding and post back to the thread.
|
|
70
|
+
* Called automatically after an approved code_watch consensus.
|
|
71
|
+
*/
|
|
72
|
+
triggerIssueOpener(discussionId: string, trigger: IDiscussionTrigger): Promise<void>;
|
|
49
73
|
}
|
|
74
|
+
export {};
|
|
50
75
|
//# sourceMappingURL=deliberation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliberation.d.ts","sourceRoot":"","sources":["../../../src/slack/deliberation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"deliberation.d.ts","sourceRoot":"","sources":["../../../src/slack/deliberation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUhD,UAAU,0BAA0B;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsYD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,MAAM,CAgChG;AAYD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoD;IACvF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;gBAEtD,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB;IAK/D,OAAO,CAAC,gBAAgB;IAmBxB;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAmB/D,wBAAwB;IAqEtC;;OAEG;IACG,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDpF;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IA+ChB;;OAEG;YACW,qBAAqB;IAwDnC;;;;OAIG;YACW,kBAAkB;IAoHhC;;;OAGG;IACG,mBAAmB,CACvB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAqDhB;;;OAGG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;IA0ChB;;;;;OAKG;IACG,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IA0ChB;;OAEG;YACW,kBAAkB;IAkChC;;;OAGG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;CAiDjB"}
|