@goondan/cli 0.0.3-alpha3 → 0.0.3-alpha5
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/commands/instance.js +2 -1
- package/dist/commands/instance.js.map +1 -1
- package/dist/commands/run.js +0 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/parser.d.ts +0 -1
- package/dist/parser.js +0 -1
- package/dist/parser.js.map +1 -1
- package/dist/services/runtime.js +95 -94
- package/dist/services/runtime.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/package.json +2 -2
- package/dist/commands/context.d.ts +0 -8
- package/dist/commands/context.js +0 -2
- package/dist/commands/context.js.map +0 -1
- package/dist/help.d.ts +0 -1
- package/dist/help.js +0 -25
- package/dist/help.js.map +0 -1
- package/dist/options.d.ts +0 -13
- package/dist/options.js +0 -57
- package/dist/options.js.map +0 -1
- package/dist/services/conversation-state.d.ts +0 -20
- package/dist/services/conversation-state.js +0 -198
- package/dist/services/conversation-state.js.map +0 -1
- package/dist/services/runtime-restart-signal.d.ts +0 -5
- package/dist/services/runtime-restart-signal.js +0 -18
- package/dist/services/runtime-restart-signal.js.map +0 -1
- package/dist/services/runtime-restart.d.ts +0 -11
- package/dist/services/runtime-restart.js +0 -151
- package/dist/services/runtime-restart.js.map +0 -1
- package/dist/services/runtime-routing.d.ts +0 -40
- package/dist/services/runtime-routing.js +0 -154
- package/dist/services/runtime-routing.js.map +0 -1
- package/dist/services/runtime-runner-connector-child.d.ts +0 -1
- package/dist/services/runtime-runner-connector-child.js +0 -188
- package/dist/services/runtime-runner-connector-child.js.map +0 -1
- package/dist/services/runtime-runner-protocol.d.ts +0 -12
- package/dist/services/runtime-runner-protocol.js +0 -14
- package/dist/services/runtime-runner-protocol.js.map +0 -1
- package/dist/services/runtime-runner.d.ts +0 -1
- package/dist/services/runtime-runner.js +0 -2595
- package/dist/services/runtime-runner.js.map +0 -1
- package/dist/services/turn-policy.d.ts +0 -7
- package/dist/services/turn-policy.js +0 -13
- package/dist/services/turn-policy.js.map +0 -1
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type Message } from '@goondan/runtime';
|
|
2
|
-
export interface ConversationTurn {
|
|
3
|
-
role: 'user' | 'assistant';
|
|
4
|
-
content: unknown;
|
|
5
|
-
}
|
|
6
|
-
interface LlmMessage {
|
|
7
|
-
role: string;
|
|
8
|
-
content: unknown;
|
|
9
|
-
}
|
|
10
|
-
export interface AnthropicPreparedConversation {
|
|
11
|
-
messages: Record<string, unknown>[];
|
|
12
|
-
systemAddendum: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function trimConversation(turns: ConversationTurn[], maxTurns: number): ConversationTurn[];
|
|
15
|
-
export declare function toConversationTurns(messages: Message[]): ConversationTurn[];
|
|
16
|
-
export declare function toPersistentMessages(turns: ConversationTurn[]): Message[];
|
|
17
|
-
export declare function toAnthropicMessages(turns: ConversationTurn[]): Record<string, unknown>[];
|
|
18
|
-
export declare function toConversationTurnsFromAnthropicMessages(messages: unknown[]): ConversationTurn[];
|
|
19
|
-
export declare function prepareAnthropicConversation(messages: LlmMessage[]): AnthropicPreparedConversation;
|
|
20
|
-
export {};
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { isJsonObject } from '@goondan/runtime';
|
|
2
|
-
export function trimConversation(turns, maxTurns) {
|
|
3
|
-
const limit = Math.max(1, maxTurns) * 2;
|
|
4
|
-
if (turns.length <= limit) {
|
|
5
|
-
return turns;
|
|
6
|
-
}
|
|
7
|
-
return turns.slice(turns.length - limit);
|
|
8
|
-
}
|
|
9
|
-
export function toConversationTurns(messages) {
|
|
10
|
-
const turns = [];
|
|
11
|
-
for (const message of messages) {
|
|
12
|
-
const role = message.data.role;
|
|
13
|
-
if (role !== 'user' && role !== 'assistant') {
|
|
14
|
-
continue;
|
|
15
|
-
}
|
|
16
|
-
turns.push({
|
|
17
|
-
role,
|
|
18
|
-
content: message.data.content,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
return turns;
|
|
22
|
-
}
|
|
23
|
-
export function toPersistentMessages(turns) {
|
|
24
|
-
const messages = [];
|
|
25
|
-
for (let index = 0; index < turns.length; index += 1) {
|
|
26
|
-
const turn = turns[index];
|
|
27
|
-
if (!turn) {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
if (turn.role === 'assistant') {
|
|
31
|
-
messages.push({
|
|
32
|
-
id: `persist-${index}`,
|
|
33
|
-
data: {
|
|
34
|
-
role: 'assistant',
|
|
35
|
-
content: turn.content,
|
|
36
|
-
},
|
|
37
|
-
metadata: {},
|
|
38
|
-
createdAt: new Date(),
|
|
39
|
-
source: {
|
|
40
|
-
type: 'assistant',
|
|
41
|
-
stepId: `persist-step-${index}`,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
messages.push({
|
|
47
|
-
id: `persist-${index}`,
|
|
48
|
-
data: {
|
|
49
|
-
role: 'user',
|
|
50
|
-
content: turn.content,
|
|
51
|
-
},
|
|
52
|
-
metadata: {},
|
|
53
|
-
createdAt: new Date(),
|
|
54
|
-
source: {
|
|
55
|
-
type: 'user',
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
return messages;
|
|
60
|
-
}
|
|
61
|
-
export function toAnthropicMessages(turns) {
|
|
62
|
-
return turns.map((turn) => ({
|
|
63
|
-
role: turn.role,
|
|
64
|
-
content: turn.content,
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
export function toConversationTurnsFromAnthropicMessages(messages) {
|
|
68
|
-
const turns = [];
|
|
69
|
-
for (const message of messages) {
|
|
70
|
-
if (!isJsonObject(message)) {
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
const role = message.role;
|
|
74
|
-
if (role !== 'user' && role !== 'assistant') {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (!Object.hasOwn(message, 'content')) {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
turns.push({
|
|
81
|
-
role,
|
|
82
|
-
content: message.content,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return turns;
|
|
86
|
-
}
|
|
87
|
-
function safeStringify(value) {
|
|
88
|
-
try {
|
|
89
|
-
return JSON.stringify(value);
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return String(value);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
function toSystemText(content) {
|
|
96
|
-
if (typeof content === 'string') {
|
|
97
|
-
return content;
|
|
98
|
-
}
|
|
99
|
-
if (Array.isArray(content)) {
|
|
100
|
-
const lines = [];
|
|
101
|
-
for (const item of content) {
|
|
102
|
-
if (isJsonObject(item) && item.type === 'text' && typeof item.text === 'string') {
|
|
103
|
-
lines.push(item.text);
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
lines.push(safeStringify(item));
|
|
107
|
-
}
|
|
108
|
-
return lines.join('\n');
|
|
109
|
-
}
|
|
110
|
-
if (isJsonObject(content) && content.type === 'text' && typeof content.text === 'string') {
|
|
111
|
-
return content.text;
|
|
112
|
-
}
|
|
113
|
-
return safeStringify(content);
|
|
114
|
-
}
|
|
115
|
-
function extractToolUseIds(content) {
|
|
116
|
-
const ids = new Set();
|
|
117
|
-
if (!Array.isArray(content)) {
|
|
118
|
-
return ids;
|
|
119
|
-
}
|
|
120
|
-
for (const block of content) {
|
|
121
|
-
if (!isJsonObject(block) || block.type !== 'tool_use') {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
const id = block.id;
|
|
125
|
-
if (typeof id === 'string' && id.trim().length > 0) {
|
|
126
|
-
ids.add(id);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return ids;
|
|
130
|
-
}
|
|
131
|
-
function sanitizeUserContent(content, allowedToolUseIds) {
|
|
132
|
-
if (!Array.isArray(content)) {
|
|
133
|
-
return {
|
|
134
|
-
content,
|
|
135
|
-
hasContent: true,
|
|
136
|
-
hadToolResult: false,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const sanitized = [];
|
|
140
|
-
let hadToolResult = false;
|
|
141
|
-
for (const block of content) {
|
|
142
|
-
if (!isJsonObject(block) || block.type !== 'tool_result') {
|
|
143
|
-
sanitized.push(block);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
hadToolResult = true;
|
|
147
|
-
const toolUseId = block.tool_use_id;
|
|
148
|
-
if (typeof toolUseId !== 'string') {
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (allowedToolUseIds.has(toolUseId)) {
|
|
152
|
-
sanitized.push(block);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return {
|
|
156
|
-
content: sanitized,
|
|
157
|
-
hasContent: sanitized.length > 0,
|
|
158
|
-
hadToolResult,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
export function prepareAnthropicConversation(messages) {
|
|
162
|
-
const anthropicMessages = [];
|
|
163
|
-
const systemParts = [];
|
|
164
|
-
let previousAssistantToolUseIds;
|
|
165
|
-
for (const message of messages) {
|
|
166
|
-
if (message.role === 'assistant') {
|
|
167
|
-
anthropicMessages.push({
|
|
168
|
-
role: 'assistant',
|
|
169
|
-
content: message.content,
|
|
170
|
-
});
|
|
171
|
-
previousAssistantToolUseIds = extractToolUseIds(message.content);
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (message.role === 'user') {
|
|
175
|
-
const sanitized = sanitizeUserContent(message.content, previousAssistantToolUseIds ?? new Set());
|
|
176
|
-
previousAssistantToolUseIds = undefined;
|
|
177
|
-
if (sanitized.hadToolResult && !sanitized.hasContent) {
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
anthropicMessages.push({
|
|
181
|
-
role: 'user',
|
|
182
|
-
content: sanitized.content,
|
|
183
|
-
});
|
|
184
|
-
continue;
|
|
185
|
-
}
|
|
186
|
-
if (message.role === 'system') {
|
|
187
|
-
const text = toSystemText(message.content).trim();
|
|
188
|
-
if (text.length > 0) {
|
|
189
|
-
systemParts.push(text);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return {
|
|
194
|
-
messages: anthropicMessages,
|
|
195
|
-
systemAddendum: systemParts.join('\n\n'),
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=conversation-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-state.js","sourceRoot":"","sources":["../../src/services/conversation-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,kBAAkB,CAAC;AAiB9D,MAAM,UAAU,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAmB;IACrD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAyB;IAC5D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,WAAW,KAAK,EAAE;gBACtB,IAAI,EAAE;oBACJ,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB;gBACD,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,MAAM,EAAE;oBACN,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,gBAAgB,KAAK,EAAE;iBAChC;aACF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,WAAW,KAAK,EAAE;YACtB,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;YACD,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM;aACb;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,QAAmB;IAC1E,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB;IACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAgB,EAChB,iBAA8B;IAE9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO;YACP,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACzD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,aAAa,GAAG,IAAI,CAAC;QACrB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;QAChC,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,QAAsB;IACjE,MAAM,iBAAiB,GAA8B,EAAE,CAAC;IACxD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,2BAAoD,CAAC;IAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,iBAAiB,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,2BAA2B,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,2BAA2B,IAAI,IAAI,GAAG,EAAU,CAAC,CAAC;YACzG,2BAA2B,GAAG,SAAS,CAAC;YACxC,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBACrD,SAAS;YACX,CAAC;YAED,iBAAiB,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,SAAS,CAAC,OAAO;aAC3B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,iBAAiB;QAC3B,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { isObjectRecord } from '../utils.js';
|
|
2
|
-
const RESTART_FLAG_KEYS = ['restartRequested', 'runtimeRestart', '__goondanRestart'];
|
|
3
|
-
export function readRuntimeRestartSignal(value) {
|
|
4
|
-
if (!isObjectRecord(value)) {
|
|
5
|
-
return undefined;
|
|
6
|
-
}
|
|
7
|
-
for (const key of RESTART_FLAG_KEYS) {
|
|
8
|
-
if (value[key] === true) {
|
|
9
|
-
const reasonValue = value['restartReason'];
|
|
10
|
-
return {
|
|
11
|
-
requested: true,
|
|
12
|
-
reason: typeof reasonValue === 'string' && reasonValue.trim().length > 0 ? reasonValue.trim() : undefined,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=runtime-restart-signal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-restart-signal.js","sourceRoot":"","sources":["../../src/services/runtime-restart-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO7C,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,CAAU,CAAC;AAE9F,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;YAC3C,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;aAC1G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface ReplacementRunnerInput {
|
|
2
|
-
runnerModulePath: string;
|
|
3
|
-
runnerArgs: string[];
|
|
4
|
-
stateRoot: string;
|
|
5
|
-
instanceKey: string;
|
|
6
|
-
bundlePath: string;
|
|
7
|
-
watch: boolean;
|
|
8
|
-
env: NodeJS.ProcessEnv;
|
|
9
|
-
startupTimeoutMs?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare function spawnReplacementRunner(input: ReplacementRunnerInput): Promise<number>;
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { fork } from 'node:child_process';
|
|
3
|
-
import { closeSync, openSync } from 'node:fs';
|
|
4
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
5
|
-
import { isRunnerReadyMessage, isRunnerStartErrorMessage } from './runtime-runner-protocol.js';
|
|
6
|
-
const STARTUP_TIMEOUT_MS = 5_000;
|
|
7
|
-
const ORCHESTRATOR_PROCESS_NAME = 'orchestrator';
|
|
8
|
-
function resolveProcessLogPaths(stateRoot, instanceKey, processName) {
|
|
9
|
-
const logDir = path.join(stateRoot, 'runtime', 'logs', instanceKey);
|
|
10
|
-
return {
|
|
11
|
-
stdoutPath: path.join(logDir, `${processName}.stdout.log`),
|
|
12
|
-
stderrPath: path.join(logDir, `${processName}.stderr.log`),
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function closeFd(fd) {
|
|
16
|
-
try {
|
|
17
|
-
closeSync(fd);
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
// 이미 닫힌 fd는 무시
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function killIfRunning(pid) {
|
|
24
|
-
if (!pid || pid <= 0) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
process.kill(pid, 'SIGKILL');
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// 이미 종료된 경우 무시
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async function waitForRunnerReady(child, instanceKey, startupTimeoutMs, logPaths) {
|
|
35
|
-
return new Promise((resolve, reject) => {
|
|
36
|
-
let settled = false;
|
|
37
|
-
const cleanup = () => {
|
|
38
|
-
clearTimeout(timeout);
|
|
39
|
-
child.off('message', onMessage);
|
|
40
|
-
child.off('error', onError);
|
|
41
|
-
child.off('exit', onExit);
|
|
42
|
-
};
|
|
43
|
-
const fail = (message) => {
|
|
44
|
-
if (settled) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
settled = true;
|
|
48
|
-
cleanup();
|
|
49
|
-
reject(new Error(`${message} (logs: ${logPaths.stdoutPath}, ${logPaths.stderrPath})`));
|
|
50
|
-
};
|
|
51
|
-
const succeed = (pid) => {
|
|
52
|
-
if (settled) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
settled = true;
|
|
56
|
-
cleanup();
|
|
57
|
-
resolve(pid);
|
|
58
|
-
};
|
|
59
|
-
const timeout = setTimeout(() => {
|
|
60
|
-
killIfRunning(child.pid);
|
|
61
|
-
fail('replacement Orchestrator 시작 확인이 시간 내에 완료되지 않았습니다.');
|
|
62
|
-
}, startupTimeoutMs);
|
|
63
|
-
const onMessage = (message) => {
|
|
64
|
-
if (isRunnerReadyMessage(message)) {
|
|
65
|
-
if (message.instanceKey !== instanceKey) {
|
|
66
|
-
fail(`replacement Orchestrator instanceKey 불일치: expected=${instanceKey}, actual=${message.instanceKey}`);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
succeed(message.pid);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (isRunnerStartErrorMessage(message)) {
|
|
73
|
-
fail(`replacement Orchestrator 시작 실패: ${message.message}`);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const onError = (error) => {
|
|
77
|
-
fail(`replacement Orchestrator 프로세스 오류: ${error.message}`);
|
|
78
|
-
};
|
|
79
|
-
const onExit = (code, signal) => {
|
|
80
|
-
const cause = code !== null ? `exit code ${code}` : signal ? `signal ${signal}` : 'unknown reason';
|
|
81
|
-
fail(`replacement Orchestrator가 초기화 중 종료되었습니다 (${cause}).`);
|
|
82
|
-
};
|
|
83
|
-
child.on('message', onMessage);
|
|
84
|
-
child.on('error', onError);
|
|
85
|
-
child.on('exit', onExit);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async function writeRuntimeState(input) {
|
|
89
|
-
const runtimeDir = path.join(input.stateRoot, 'runtime');
|
|
90
|
-
await mkdir(runtimeDir, { recursive: true });
|
|
91
|
-
const state = {
|
|
92
|
-
instanceKey: input.instanceKey,
|
|
93
|
-
bundlePath: input.bundlePath,
|
|
94
|
-
startedAt: new Date().toISOString(),
|
|
95
|
-
watch: input.watch,
|
|
96
|
-
pid: input.pid,
|
|
97
|
-
logs: [
|
|
98
|
-
{
|
|
99
|
-
process: ORCHESTRATOR_PROCESS_NAME,
|
|
100
|
-
stdout: input.logPaths.stdoutPath,
|
|
101
|
-
stderr: input.logPaths.stderrPath,
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
};
|
|
105
|
-
const activePath = path.join(runtimeDir, 'active.json');
|
|
106
|
-
await writeFile(activePath, JSON.stringify(state, null, 2), 'utf8');
|
|
107
|
-
}
|
|
108
|
-
export async function spawnReplacementRunner(input) {
|
|
109
|
-
const logPaths = resolveProcessLogPaths(input.stateRoot, input.instanceKey, ORCHESTRATOR_PROCESS_NAME);
|
|
110
|
-
await mkdir(path.dirname(logPaths.stdoutPath), { recursive: true });
|
|
111
|
-
const stdoutFd = openSync(logPaths.stdoutPath, 'a');
|
|
112
|
-
const stderrFd = openSync(logPaths.stderrPath, 'a');
|
|
113
|
-
let child;
|
|
114
|
-
try {
|
|
115
|
-
child = fork(input.runnerModulePath, input.runnerArgs, {
|
|
116
|
-
cwd: path.dirname(input.bundlePath),
|
|
117
|
-
detached: true,
|
|
118
|
-
env: {
|
|
119
|
-
...input.env,
|
|
120
|
-
GOONDAN_STATE_ROOT: input.stateRoot,
|
|
121
|
-
},
|
|
122
|
-
stdio: ['ignore', stdoutFd, stderrFd, 'ipc'],
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
closeFd(stdoutFd);
|
|
127
|
-
closeFd(stderrFd);
|
|
128
|
-
}
|
|
129
|
-
if (!child.pid || child.pid <= 0) {
|
|
130
|
-
throw new Error('replacement Orchestrator 프로세스를 시작하지 못했습니다.');
|
|
131
|
-
}
|
|
132
|
-
const pid = await waitForRunnerReady(child, input.instanceKey, input.startupTimeoutMs ?? STARTUP_TIMEOUT_MS, logPaths)
|
|
133
|
-
.catch((error) => {
|
|
134
|
-
killIfRunning(child.pid);
|
|
135
|
-
throw error;
|
|
136
|
-
});
|
|
137
|
-
if (child.connected) {
|
|
138
|
-
child.disconnect();
|
|
139
|
-
}
|
|
140
|
-
child.unref();
|
|
141
|
-
await writeRuntimeState({
|
|
142
|
-
stateRoot: input.stateRoot,
|
|
143
|
-
instanceKey: input.instanceKey,
|
|
144
|
-
bundlePath: input.bundlePath,
|
|
145
|
-
watch: input.watch,
|
|
146
|
-
pid,
|
|
147
|
-
logPaths,
|
|
148
|
-
});
|
|
149
|
-
return pid;
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=runtime-restart.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-restart.js","sourceRoot":"","sources":["../../src/services/runtime-restart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { type JsonObject } from '@goondan/runtime';
|
|
2
|
-
export interface ParsedConnectorEvent {
|
|
3
|
-
name: string;
|
|
4
|
-
instanceKey: string;
|
|
5
|
-
messageText: string;
|
|
6
|
-
properties: Record<string, string>;
|
|
7
|
-
}
|
|
8
|
-
export interface ParsedAgentToolEvent {
|
|
9
|
-
id: string;
|
|
10
|
-
type: string;
|
|
11
|
-
instanceKey: string;
|
|
12
|
-
messageText: string;
|
|
13
|
-
sourceName: string;
|
|
14
|
-
metadata?: JsonObject;
|
|
15
|
-
correlationId?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface IngressRouteRule {
|
|
18
|
-
eventName?: string;
|
|
19
|
-
properties?: Record<string, string>;
|
|
20
|
-
agentName?: string;
|
|
21
|
-
instanceKey?: string;
|
|
22
|
-
instanceKeyProperty?: string;
|
|
23
|
-
instanceKeyPrefix?: string;
|
|
24
|
-
}
|
|
25
|
-
export interface RuntimeInboundContext {
|
|
26
|
-
sourceKind: 'connector' | 'agent';
|
|
27
|
-
sourceName: string;
|
|
28
|
-
eventName: string;
|
|
29
|
-
instanceKey: string;
|
|
30
|
-
messageText: string;
|
|
31
|
-
properties?: Record<string, string>;
|
|
32
|
-
metadata?: JsonObject;
|
|
33
|
-
}
|
|
34
|
-
export declare function parseConnectorEventPayload(event: unknown): ParsedConnectorEvent | undefined;
|
|
35
|
-
export declare function parseAgentToolEventPayload(event: unknown, fallbackInstanceKey: string, fallbackSourceName: string): ParsedAgentToolEvent | undefined;
|
|
36
|
-
export declare function formatRuntimeInboundUserText(input: RuntimeInboundContext): string;
|
|
37
|
-
export declare function resolveRuntimeWorkdir(baseWorkdir: string, cwd?: string): string;
|
|
38
|
-
export declare function selectTargetAgentName(rules: IngressRouteRule[], defaultAgentName: string, event: ParsedConnectorEvent): string;
|
|
39
|
-
export declare function selectMatchingIngressRule(rules: IngressRouteRule[], event: ParsedConnectorEvent): IngressRouteRule | undefined;
|
|
40
|
-
export declare function resolveInboundInstanceKey(rule: IngressRouteRule | undefined, event: ParsedConnectorEvent): string;
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { isJsonObject } from '@goondan/runtime';
|
|
3
|
-
function safeJsonStringify(value) {
|
|
4
|
-
try {
|
|
5
|
-
return JSON.stringify(value);
|
|
6
|
-
}
|
|
7
|
-
catch {
|
|
8
|
-
return String(value);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export function parseConnectorEventPayload(event) {
|
|
12
|
-
if (!isJsonObject(event)) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const name = typeof event.name === 'string' ? event.name : undefined;
|
|
16
|
-
const instanceKey = typeof event.instanceKey === 'string' ? event.instanceKey : undefined;
|
|
17
|
-
if (!name || !instanceKey) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
let messageText = '';
|
|
21
|
-
const message = event.message;
|
|
22
|
-
if (isJsonObject(message)) {
|
|
23
|
-
const messageType = message.type;
|
|
24
|
-
if (messageType === 'text' && typeof message.text === 'string') {
|
|
25
|
-
messageText = message.text;
|
|
26
|
-
}
|
|
27
|
-
else if (messageType === 'image' && typeof message.url === 'string') {
|
|
28
|
-
messageText = `[image] ${message.url}`;
|
|
29
|
-
}
|
|
30
|
-
else if (messageType === 'file' && typeof message.url === 'string') {
|
|
31
|
-
const fileName = typeof message.name === 'string' ? message.name : 'file';
|
|
32
|
-
messageText = `[file:${fileName}] ${message.url}`;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
const properties = {};
|
|
36
|
-
if (isJsonObject(event.properties)) {
|
|
37
|
-
for (const [key, value] of Object.entries(event.properties)) {
|
|
38
|
-
if (typeof value === 'string') {
|
|
39
|
-
properties[key] = value;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
name,
|
|
45
|
-
instanceKey,
|
|
46
|
-
messageText,
|
|
47
|
-
properties,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export function parseAgentToolEventPayload(event, fallbackInstanceKey, fallbackSourceName) {
|
|
51
|
-
if (!isJsonObject(event)) {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
const id = typeof event.id === 'string' && event.id.length > 0 ? event.id : `agent-event-${Date.now()}`;
|
|
55
|
-
const type = typeof event.type === 'string' && event.type.length > 0 ? event.type : 'agent.request';
|
|
56
|
-
const instanceKey = typeof event.instanceKey === 'string' && event.instanceKey.length > 0
|
|
57
|
-
? event.instanceKey
|
|
58
|
-
: fallbackInstanceKey;
|
|
59
|
-
const messageText = typeof event.input === 'string' ? event.input : '';
|
|
60
|
-
let sourceName = fallbackSourceName;
|
|
61
|
-
if (isJsonObject(event.source) && typeof event.source.name === 'string' && event.source.name.length > 0) {
|
|
62
|
-
sourceName = event.source.name;
|
|
63
|
-
}
|
|
64
|
-
const metadata = isJsonObject(event.metadata) ? event.metadata : undefined;
|
|
65
|
-
let correlationId;
|
|
66
|
-
if (isJsonObject(event.replyTo) && typeof event.replyTo.correlationId === 'string' && event.replyTo.correlationId.length > 0) {
|
|
67
|
-
correlationId = event.replyTo.correlationId;
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
id,
|
|
71
|
-
type,
|
|
72
|
-
instanceKey,
|
|
73
|
-
messageText,
|
|
74
|
-
sourceName,
|
|
75
|
-
metadata,
|
|
76
|
-
correlationId,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
export function formatRuntimeInboundUserText(input) {
|
|
80
|
-
const contextPayload = {
|
|
81
|
-
source: {
|
|
82
|
-
kind: input.sourceKind,
|
|
83
|
-
name: input.sourceName,
|
|
84
|
-
},
|
|
85
|
-
event: input.eventName,
|
|
86
|
-
instanceKey: input.instanceKey,
|
|
87
|
-
properties: input.properties ?? {},
|
|
88
|
-
metadata: input.metadata ?? {},
|
|
89
|
-
};
|
|
90
|
-
const contextHeader = safeJsonStringify(contextPayload);
|
|
91
|
-
if (input.messageText.length === 0) {
|
|
92
|
-
return ['[goondan_context]', contextHeader, '[/goondan_context]'].join('\n');
|
|
93
|
-
}
|
|
94
|
-
return ['[goondan_context]', contextHeader, '[/goondan_context]', input.messageText].join('\n');
|
|
95
|
-
}
|
|
96
|
-
export function resolveRuntimeWorkdir(baseWorkdir, cwd) {
|
|
97
|
-
if (!cwd || cwd.trim().length === 0) {
|
|
98
|
-
return baseWorkdir;
|
|
99
|
-
}
|
|
100
|
-
if (path.isAbsolute(cwd)) {
|
|
101
|
-
return cwd;
|
|
102
|
-
}
|
|
103
|
-
return path.join(baseWorkdir, cwd);
|
|
104
|
-
}
|
|
105
|
-
export function selectTargetAgentName(rules, defaultAgentName, event) {
|
|
106
|
-
const rule = selectMatchingIngressRule(rules, event);
|
|
107
|
-
if (rule?.agentName && rule.agentName.length > 0) {
|
|
108
|
-
return rule.agentName;
|
|
109
|
-
}
|
|
110
|
-
return defaultAgentName;
|
|
111
|
-
}
|
|
112
|
-
export function selectMatchingIngressRule(rules, event) {
|
|
113
|
-
for (const rule of rules) {
|
|
114
|
-
if (rule.eventName && rule.eventName !== event.name) {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (rule.properties) {
|
|
118
|
-
let matched = true;
|
|
119
|
-
for (const [key, expected] of Object.entries(rule.properties)) {
|
|
120
|
-
if (event.properties[key] !== expected) {
|
|
121
|
-
matched = false;
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (!matched) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return rule;
|
|
130
|
-
}
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
export function resolveInboundInstanceKey(rule, event) {
|
|
134
|
-
if (!rule) {
|
|
135
|
-
return event.instanceKey;
|
|
136
|
-
}
|
|
137
|
-
const staticInstanceKey = rule.instanceKey;
|
|
138
|
-
if (typeof staticInstanceKey === 'string' && staticInstanceKey.trim().length > 0) {
|
|
139
|
-
return staticInstanceKey.trim();
|
|
140
|
-
}
|
|
141
|
-
const propertyName = rule.instanceKeyProperty;
|
|
142
|
-
if (typeof propertyName === 'string' && propertyName.trim().length > 0) {
|
|
143
|
-
const propertyValue = event.properties[propertyName.trim()];
|
|
144
|
-
if (typeof propertyValue === 'string' && propertyValue.trim().length > 0) {
|
|
145
|
-
const prefixValue = rule.instanceKeyPrefix;
|
|
146
|
-
if (typeof prefixValue === 'string' && prefixValue.trim().length > 0) {
|
|
147
|
-
return `${prefixValue.trim()}${propertyValue.trim()}`;
|
|
148
|
-
}
|
|
149
|
-
return propertyValue.trim();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return event.instanceKey;
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=runtime-routing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-routing.js","sourceRoot":"","sources":["../../src/services/runtime-routing.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAsCjE,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QACjC,IAAI,WAAW,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/D,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAI,WAAW,KAAK,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACtE,WAAW,GAAG,WAAW,OAAO,CAAC,GAAG,EAAE,CAAC;QACzC,CAAC;aAAM,IAAI,WAAW,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1E,WAAW,GAAG,SAAS,QAAQ,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,WAAW;QACX,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAc,EACd,mBAA2B,EAC3B,kBAA0B;IAE1B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACxG,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;IACpG,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACvF,CAAC,CAAC,KAAK,CAAC,WAAW;QACnB,CAAC,CAAC,mBAAmB,CAAC;IACxB,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,IAAI,UAAU,GAAG,kBAAkB,CAAC;IACpC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxG,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,IAAI,aAAiC,CAAC;IACtC,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7H,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,EAAE;QACF,IAAI;QACJ,WAAW;QACX,WAAW;QACX,UAAU;QACV,QAAQ;QACR,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAA4B;IACvE,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,IAAI,EAAE,KAAK,CAAC,UAAU;SACvB;QACD,KAAK,EAAE,KAAK,CAAC,SAAS;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;KAC/B,CAAC;IAEF,MAAM,aAAa,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,WAAmB,EAAE,GAAY;IACrE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAyB,EACzB,gBAAwB,EACxB,KAA2B;IAE3B,MAAM,IAAI,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrD,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAyB,EACzB,KAA2B;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9D,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACvC,OAAO,GAAG,KAAK,CAAC;oBAChB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAkC,EAClC,KAA2B;IAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC;IAC3C,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjF,OAAO,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAC9C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC3C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrE,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACxD,CAAC;YACD,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|