crewly 1.20.25 → 1.20.28
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/backend/backend/src/constants.d.ts +2 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +2 -2
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +38 -7
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request-types.d.ts +12 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +64 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +9 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +40 -6
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +7 -3
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +5 -2
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +10 -2
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +3 -2
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +4 -4
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +4 -4
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +2 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +21 -2
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +14 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts +68 -0
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.js +140 -0
- package/dist/backend/backend/src/utils/runtime-model-flags.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +2 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +2 -2
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +40 -6
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +7 -3
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +5 -2
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +10 -2
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +3 -2
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +4 -4
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +4 -4
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +2 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +21 -2
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +14 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts +68 -0
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.js +140 -0
- package/dist/cli/backend/src/utils/runtime-model-flags.utils.js.map +1 -0
- package/frontend/dist/assets/{index-f761b08d.js → index-d1bd0dec.js} +274 -274
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-agent model selection for the PTY runtimes.
|
|
3
|
+
*
|
|
4
|
+
* Every harness exposes a launch flag that pins the model for the session
|
|
5
|
+
* (the in-process Crewly Agent runtime takes its model in code instead):
|
|
6
|
+
*
|
|
7
|
+
* | runtime | model flag | reasoning effort |
|
|
8
|
+
* |--------------|-----------------------|-------------------------------------------|
|
|
9
|
+
* | claude-code | `--model <name>` | `--effort low|medium|high|xhigh|max` |
|
|
10
|
+
* | codex-cli | `-m <name>` | `-c model_reasoning_effort="<level>"` |
|
|
11
|
+
* | gemini-cli | `-m <name>` | — |
|
|
12
|
+
* | opencode-cli | `--model <prov/model>`| — |
|
|
13
|
+
*
|
|
14
|
+
* `buildRuntimeModelFlags` turns a member's `modelId` / `reasoningEffort`
|
|
15
|
+
* into those flags; `injectRuntimeFlags` places any flag list right after
|
|
16
|
+
* the harness binary in a launch command (`codex resume …` included) and
|
|
17
|
+
* drops a pre-existing copy of the same flag so the member override wins
|
|
18
|
+
* without tripping clap's "cannot be used multiple times".
|
|
19
|
+
*
|
|
20
|
+
* @module utils/runtime-model-flags
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Whether a model id is safe to put on a command line.
|
|
24
|
+
*
|
|
25
|
+
* @param modelId - Candidate model id
|
|
26
|
+
* @returns True when it matches the allowed character set
|
|
27
|
+
*/
|
|
28
|
+
export declare function isSafeModelId(modelId: string | undefined): modelId is string;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a reasoning-effort level is safe to put on a command line.
|
|
31
|
+
*
|
|
32
|
+
* @param effort - Candidate level
|
|
33
|
+
* @returns True when it is a single lowercase word
|
|
34
|
+
*/
|
|
35
|
+
export declare function isSafeReasoningEffort(effort: string | undefined): effort is string;
|
|
36
|
+
/**
|
|
37
|
+
* Build the launch flags that pin a model (and optionally the reasoning
|
|
38
|
+
* effort) for one runtime. Unknown runtimes and the in-process Crewly
|
|
39
|
+
* Agent get no flags; unsafe values are ignored rather than quoted.
|
|
40
|
+
*
|
|
41
|
+
* @param runtimeType - The member's runtime
|
|
42
|
+
* @param modelId - Model name as the harness expects it (`opus`, `gpt-5.6-sol`, `anthropic/claude-sonnet-4`)
|
|
43
|
+
* @param reasoningEffort - Optional effort level (Claude Code / Codex only)
|
|
44
|
+
* @returns Flags to insert after the binary, e.g. `['--model', 'opus']`
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* buildRuntimeModelFlags('codex-cli', 'gpt-5.6-sol', 'high')
|
|
48
|
+
* // => ['-m', 'gpt-5.6-sol', '-c', 'model_reasoning_effort="high"']
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildRuntimeModelFlags(runtimeType: string, modelId?: string, reasoningEffort?: string): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Insert flags into a launch command right after the runtime binary
|
|
53
|
+
* (`claude`, `codex`/`codex resume`, `gemini`, `opencode`). A flag that is
|
|
54
|
+
* already present in the command is replaced. When the binary is not found
|
|
55
|
+
* (custom wrapper scripts), the flags go before
|
|
56
|
+
* `--dangerously-skip-permissions` if present, else at the end.
|
|
57
|
+
*
|
|
58
|
+
* @param command - One launch command line (may carry a `VAR=1` prefix)
|
|
59
|
+
* @param runtimeType - The runtime the command starts
|
|
60
|
+
* @param flags - Flags to insert (already shell-safe)
|
|
61
|
+
* @returns The rewritten command; unchanged when `flags` is empty
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* injectRuntimeFlags('codex -a never -s danger-full-access', 'codex-cli', ['-m', 'gpt-5.6-sol'])
|
|
65
|
+
* // => 'codex -m gpt-5.6-sol -a never -s danger-full-access'
|
|
66
|
+
*/
|
|
67
|
+
export declare function injectRuntimeFlags(command: string, runtimeType: string, flags: string[]): string;
|
|
68
|
+
//# sourceMappingURL=runtime-model-flags.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-model-flags.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/runtime-model-flags.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA0BH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,IAAI,MAAM,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,CAElF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CAkBV;AAeD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAgBhG"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-agent model selection for the PTY runtimes.
|
|
3
|
+
*
|
|
4
|
+
* Every harness exposes a launch flag that pins the model for the session
|
|
5
|
+
* (the in-process Crewly Agent runtime takes its model in code instead):
|
|
6
|
+
*
|
|
7
|
+
* | runtime | model flag | reasoning effort |
|
|
8
|
+
* |--------------|-----------------------|-------------------------------------------|
|
|
9
|
+
* | claude-code | `--model <name>` | `--effort low|medium|high|xhigh|max` |
|
|
10
|
+
* | codex-cli | `-m <name>` | `-c model_reasoning_effort="<level>"` |
|
|
11
|
+
* | gemini-cli | `-m <name>` | — |
|
|
12
|
+
* | opencode-cli | `--model <prov/model>`| — |
|
|
13
|
+
*
|
|
14
|
+
* `buildRuntimeModelFlags` turns a member's `modelId` / `reasoningEffort`
|
|
15
|
+
* into those flags; `injectRuntimeFlags` places any flag list right after
|
|
16
|
+
* the harness binary in a launch command (`codex resume …` included) and
|
|
17
|
+
* drops a pre-existing copy of the same flag so the member override wins
|
|
18
|
+
* without tripping clap's "cannot be used multiple times".
|
|
19
|
+
*
|
|
20
|
+
* @module utils/runtime-model-flags
|
|
21
|
+
*/
|
|
22
|
+
import { RUNTIME_TYPES } from '../constants.js';
|
|
23
|
+
/** Model names are passed to a shell: only the characters real model ids use. */
|
|
24
|
+
const MODEL_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
|
|
25
|
+
/** Effort levels are single lowercase words (`low`, `xhigh`, …). */
|
|
26
|
+
const EFFORT_RE = /^[a-z][a-z0-9]{0,15}$/;
|
|
27
|
+
/** Flags that select a model / effort, per runtime, so an existing copy can be replaced. */
|
|
28
|
+
const MODEL_FLAG_NAMES = {
|
|
29
|
+
[RUNTIME_TYPES.CLAUDE_CODE]: ['--model', '--effort'],
|
|
30
|
+
[RUNTIME_TYPES.CODEX_CLI]: ['--model', '-m'],
|
|
31
|
+
[RUNTIME_TYPES.GEMINI_CLI]: ['--model', '-m'],
|
|
32
|
+
[RUNTIME_TYPES.OPENCODE_CLI]: ['--model', '-m'],
|
|
33
|
+
};
|
|
34
|
+
/** Runtime binaries, used to find the insertion point in a launch command. */
|
|
35
|
+
const RUNTIME_BINARY_RE = {
|
|
36
|
+
[RUNTIME_TYPES.CLAUDE_CODE]: /\bclaude\b/,
|
|
37
|
+
// `codex resume <id>` takes the same global flags after the subcommand.
|
|
38
|
+
[RUNTIME_TYPES.CODEX_CLI]: /\bcodex(?:\s+resume)?\b/,
|
|
39
|
+
[RUNTIME_TYPES.GEMINI_CLI]: /\bgemini\b/,
|
|
40
|
+
[RUNTIME_TYPES.OPENCODE_CLI]: /\bopencode\b/,
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Whether a model id is safe to put on a command line.
|
|
44
|
+
*
|
|
45
|
+
* @param modelId - Candidate model id
|
|
46
|
+
* @returns True when it matches the allowed character set
|
|
47
|
+
*/
|
|
48
|
+
export function isSafeModelId(modelId) {
|
|
49
|
+
return typeof modelId === 'string' && MODEL_ID_RE.test(modelId);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Whether a reasoning-effort level is safe to put on a command line.
|
|
53
|
+
*
|
|
54
|
+
* @param effort - Candidate level
|
|
55
|
+
* @returns True when it is a single lowercase word
|
|
56
|
+
*/
|
|
57
|
+
export function isSafeReasoningEffort(effort) {
|
|
58
|
+
return typeof effort === 'string' && EFFORT_RE.test(effort);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build the launch flags that pin a model (and optionally the reasoning
|
|
62
|
+
* effort) for one runtime. Unknown runtimes and the in-process Crewly
|
|
63
|
+
* Agent get no flags; unsafe values are ignored rather than quoted.
|
|
64
|
+
*
|
|
65
|
+
* @param runtimeType - The member's runtime
|
|
66
|
+
* @param modelId - Model name as the harness expects it (`opus`, `gpt-5.6-sol`, `anthropic/claude-sonnet-4`)
|
|
67
|
+
* @param reasoningEffort - Optional effort level (Claude Code / Codex only)
|
|
68
|
+
* @returns Flags to insert after the binary, e.g. `['--model', 'opus']`
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* buildRuntimeModelFlags('codex-cli', 'gpt-5.6-sol', 'high')
|
|
72
|
+
* // => ['-m', 'gpt-5.6-sol', '-c', 'model_reasoning_effort="high"']
|
|
73
|
+
*/
|
|
74
|
+
export function buildRuntimeModelFlags(runtimeType, modelId, reasoningEffort) {
|
|
75
|
+
const model = isSafeModelId(modelId) ? modelId : undefined;
|
|
76
|
+
const effort = isSafeReasoningEffort(reasoningEffort) ? reasoningEffort : undefined;
|
|
77
|
+
switch (runtimeType) {
|
|
78
|
+
case RUNTIME_TYPES.CLAUDE_CODE:
|
|
79
|
+
return [...(model ? ['--model', model] : []), ...(effort ? ['--effort', effort] : [])];
|
|
80
|
+
case RUNTIME_TYPES.CODEX_CLI:
|
|
81
|
+
return [
|
|
82
|
+
...(model ? ['-m', model] : []),
|
|
83
|
+
...(effort ? ['-c', `model_reasoning_effort="${effort}"`] : []),
|
|
84
|
+
];
|
|
85
|
+
case RUNTIME_TYPES.GEMINI_CLI:
|
|
86
|
+
return model ? ['-m', model] : [];
|
|
87
|
+
case RUNTIME_TYPES.OPENCODE_CLI:
|
|
88
|
+
return model ? ['--model', model] : [];
|
|
89
|
+
default:
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Remove an existing `<flag> <value>` / `<flag>=<value>` pair from a command.
|
|
95
|
+
*
|
|
96
|
+
* @param command - Launch command
|
|
97
|
+
* @param flagName - e.g. `--model` or `-m`
|
|
98
|
+
* @returns Command without that flag
|
|
99
|
+
*/
|
|
100
|
+
function stripFlag(command, flagName) {
|
|
101
|
+
const escaped = flagName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
102
|
+
const re = new RegExp(`(^|\\s)${escaped}(?:=|\\s+)(?:"[^"]*"|'[^']*'|\\S+)(?=\\s|$)`, 'g');
|
|
103
|
+
return command.replace(re, '$1').replace(/\s{2,}/g, ' ').trim();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Insert flags into a launch command right after the runtime binary
|
|
107
|
+
* (`claude`, `codex`/`codex resume`, `gemini`, `opencode`). A flag that is
|
|
108
|
+
* already present in the command is replaced. When the binary is not found
|
|
109
|
+
* (custom wrapper scripts), the flags go before
|
|
110
|
+
* `--dangerously-skip-permissions` if present, else at the end.
|
|
111
|
+
*
|
|
112
|
+
* @param command - One launch command line (may carry a `VAR=1` prefix)
|
|
113
|
+
* @param runtimeType - The runtime the command starts
|
|
114
|
+
* @param flags - Flags to insert (already shell-safe)
|
|
115
|
+
* @returns The rewritten command; unchanged when `flags` is empty
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* injectRuntimeFlags('codex -a never -s danger-full-access', 'codex-cli', ['-m', 'gpt-5.6-sol'])
|
|
119
|
+
* // => 'codex -m gpt-5.6-sol -a never -s danger-full-access'
|
|
120
|
+
*/
|
|
121
|
+
export function injectRuntimeFlags(command, runtimeType, flags) {
|
|
122
|
+
if (flags.length === 0)
|
|
123
|
+
return command;
|
|
124
|
+
let cmd = command;
|
|
125
|
+
const known = MODEL_FLAG_NAMES[runtimeType] ?? [];
|
|
126
|
+
for (const flag of flags) {
|
|
127
|
+
if (flag.startsWith('-') && known.includes(flag))
|
|
128
|
+
cmd = stripFlag(cmd, flag);
|
|
129
|
+
}
|
|
130
|
+
const flagStr = flags.join(' ');
|
|
131
|
+
const binary = RUNTIME_BINARY_RE[runtimeType];
|
|
132
|
+
if (binary && binary.test(cmd)) {
|
|
133
|
+
return cmd.replace(binary, (m) => `${m} ${flagStr}`);
|
|
134
|
+
}
|
|
135
|
+
if (cmd.includes('--dangerously-skip-permissions')) {
|
|
136
|
+
return cmd.replace('--dangerously-skip-permissions', `${flagStr} --dangerously-skip-permissions`);
|
|
137
|
+
}
|
|
138
|
+
return `${cmd} ${flagStr}`;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=runtime-model-flags.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-model-flags.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/runtime-model-flags.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,iFAAiF;AACjF,MAAM,WAAW,GAAG,sCAAsC,CAAC;AAC3D,oEAAoE;AACpE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAE1C,4FAA4F;AAC5F,MAAM,gBAAgB,GAA6B;IACjD,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IACpD,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;IAC5C,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;IAC7C,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;CAChD,CAAC;AAEF,8EAA8E;AAC9E,MAAM,iBAAiB,GAA2B;IAChD,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,YAAY;IACzC,wEAAwE;IACxE,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,yBAAyB;IACpD,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,YAAY;IACxC,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,cAAc;CAC7C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAA2B;IACvD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA0B;IAC9D,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,OAAgB,EAChB,eAAwB;IAExB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,aAAa,CAAC,WAAW;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzF,KAAK,aAAa,CAAC,SAAS;YAC1B,OAAO;gBACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,2BAA2B,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;QACJ,KAAK,aAAa,CAAC,UAAU;YAC3B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,KAAK,aAAa,CAAC,YAAY;YAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,OAAO,6CAA6C,EAAE,GAAG,CAAC,CAAC;IAC3F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,WAAmB,EAAE,KAAe;IACtF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC,OAAO,CAAC,gCAAgC,EAAE,GAAG,OAAO,iCAAiC,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|