@mobileai/react-native 0.1.0 → 0.3.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 +78 -7
- package/lib/module/components/AIAgent.js +40 -4
- package/lib/module/components/AIAgent.js.map +1 -1
- package/lib/module/components/AgentChatBar.js +177 -29
- package/lib/module/components/AgentChatBar.js.map +1 -1
- package/lib/module/core/AgentRuntime.js +268 -126
- package/lib/module/core/AgentRuntime.js.map +1 -1
- package/lib/module/core/FiberTreeWalker.js +74 -20
- package/lib/module/core/FiberTreeWalker.js.map +1 -1
- package/lib/module/core/systemPrompt.js +164 -0
- package/lib/module/core/systemPrompt.js.map +1 -0
- package/lib/module/providers/GeminiProvider.js +189 -73
- package/lib/module/providers/GeminiProvider.js.map +1 -1
- package/lib/typescript/src/components/AIAgent.d.ts +9 -1
- package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
- package/lib/typescript/src/components/AgentChatBar.d.ts +4 -3
- package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
- package/lib/typescript/src/core/AgentRuntime.d.ts +16 -0
- package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
- package/lib/typescript/src/core/FiberTreeWalker.d.ts +5 -0
- package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +1 -1
- package/lib/typescript/src/core/systemPrompt.d.ts +9 -0
- package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -0
- package/lib/typescript/src/core/types.d.ts +51 -13
- package/lib/typescript/src/core/types.d.ts.map +1 -1
- package/lib/typescript/src/providers/GeminiProvider.d.ts +33 -13
- package/lib/typescript/src/providers/GeminiProvider.d.ts.map +1 -1
- package/package.json +16 -14
- package/src/components/AIAgent.tsx +41 -1
- package/src/components/AgentChatBar.tsx +150 -28
- package/src/core/AgentRuntime.ts +287 -131
- package/src/core/FiberTreeWalker.ts +74 -19
- package/src/core/systemPrompt.ts +162 -0
- package/src/core/types.ts +58 -10
- package/src/providers/GeminiProvider.ts +174 -101
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* GeminiProvider —
|
|
5
|
-
*
|
|
4
|
+
* GeminiProvider — Gemini API integration with structured action pattern.
|
|
5
|
+
*
|
|
6
|
+
* Uses a single forced function call (`agent_step`) that bundles
|
|
7
|
+
* structured reasoning (evaluation, memory, plan) alongside the action.
|
|
8
|
+
* This replaces free-form text + separate tool calls for stability.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
import { logger } from "../utils/logger.js";
|
|
12
|
+
// ─── Constants ─────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
const AGENT_STEP_FN = 'agent_step';
|
|
15
|
+
|
|
16
|
+
// Reasoning fields that are always present in the agent_step schema
|
|
17
|
+
const REASONING_FIELDS = ['previous_goal_eval', 'memory', 'plan'];
|
|
9
18
|
|
|
10
19
|
// ─── Gemini API Types ──────────────────────────────────────────
|
|
11
20
|
|
|
@@ -19,22 +28,31 @@ export class GeminiProvider {
|
|
|
19
28
|
async generateContent(systemPrompt, userMessage, tools, history) {
|
|
20
29
|
logger.info('GeminiProvider', `Sending request. Model: ${this.model}, Tools: ${tools.length}`);
|
|
21
30
|
|
|
22
|
-
// Build
|
|
23
|
-
const
|
|
31
|
+
// Build single agent_step function declaration
|
|
32
|
+
const agentStepDeclaration = this.buildAgentStepDeclaration(tools);
|
|
24
33
|
|
|
25
|
-
// Build conversation history
|
|
34
|
+
// Build conversation history with proper function call/response pairs
|
|
26
35
|
const contents = this.buildContents(userMessage, history);
|
|
27
36
|
|
|
28
37
|
// Make API request
|
|
29
38
|
const url = `https://generativelanguage.googleapis.com/v1beta/models/${this.model}:generateContent?key=${this.apiKey}`;
|
|
30
39
|
const body = {
|
|
31
40
|
contents,
|
|
32
|
-
tools:
|
|
41
|
+
tools: [{
|
|
42
|
+
functionDeclarations: [agentStepDeclaration]
|
|
43
|
+
}],
|
|
33
44
|
systemInstruction: {
|
|
34
45
|
parts: [{
|
|
35
46
|
text: systemPrompt
|
|
36
47
|
}]
|
|
37
48
|
},
|
|
49
|
+
// Force the model to always call agent_step
|
|
50
|
+
tool_config: {
|
|
51
|
+
function_calling_config: {
|
|
52
|
+
mode: 'ANY',
|
|
53
|
+
allowed_function_names: [AGENT_STEP_FN]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
38
56
|
generationConfig: {
|
|
39
57
|
temperature: 0.2,
|
|
40
58
|
maxOutputTokens: 2048
|
|
@@ -57,41 +75,85 @@ export class GeminiProvider {
|
|
|
57
75
|
throw new Error(`Gemini API error ${response.status}: ${errorText}`);
|
|
58
76
|
}
|
|
59
77
|
const data = await response.json();
|
|
60
|
-
|
|
61
|
-
// Parse response
|
|
62
|
-
return this.parseResponse(data);
|
|
78
|
+
return this.parseAgentStepResponse(data, tools);
|
|
63
79
|
} catch (error) {
|
|
64
80
|
logger.error('GeminiProvider', 'Request failed:', error.message);
|
|
65
81
|
throw error;
|
|
66
82
|
}
|
|
67
83
|
}
|
|
68
84
|
|
|
69
|
-
// ─── Build
|
|
85
|
+
// ─── Build agent_step Declaration ──────────────────────────
|
|
70
86
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Builds a single `agent_step` function declaration that combines:
|
|
89
|
+
* - Structured reasoning fields (previous_goal_eval, memory, plan)
|
|
90
|
+
* - action_name (enum of all available tool names)
|
|
91
|
+
* - All tool parameter fields as flat top-level properties
|
|
92
|
+
*
|
|
93
|
+
* Flat schema avoids Gemini's "deeply nested schema" rejection in ANY mode.
|
|
94
|
+
*/
|
|
95
|
+
buildAgentStepDeclaration(tools) {
|
|
96
|
+
const toolNames = tools.map(t => t.name);
|
|
97
|
+
|
|
98
|
+
// Collect all unique parameter fields across all tools
|
|
99
|
+
const actionProperties = {};
|
|
100
|
+
for (const tool of tools) {
|
|
101
|
+
for (const [paramName, param] of Object.entries(tool.parameters)) {
|
|
102
|
+
// Skip if already added (shared field names like 'text', 'index')
|
|
103
|
+
if (actionProperties[paramName]) continue;
|
|
104
|
+
actionProperties[paramName] = {
|
|
78
105
|
type: this.mapParamType(param.type),
|
|
79
106
|
description: param.description,
|
|
80
107
|
...(param.enum ? {
|
|
81
108
|
enum: param.enum
|
|
82
109
|
} : {})
|
|
83
|
-
}
|
|
84
|
-
required: Object.entries(tool.parameters).filter(([, param]) => param.required !== false).map(([key]) => key)
|
|
110
|
+
};
|
|
85
111
|
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Build tool descriptions for the action_name enum
|
|
115
|
+
const toolDescriptions = tools.map(t => {
|
|
116
|
+
const params = Object.keys(t.parameters).join(', ');
|
|
117
|
+
return `- ${t.name}(${params}): ${t.description}`;
|
|
118
|
+
}).join('\n');
|
|
119
|
+
return {
|
|
120
|
+
name: AGENT_STEP_FN,
|
|
121
|
+
description: `Execute one agent step. Choose an action and provide reasoning.\n\nAvailable actions:\n${toolDescriptions}`,
|
|
122
|
+
parameters: {
|
|
123
|
+
type: 'OBJECT',
|
|
124
|
+
properties: {
|
|
125
|
+
// ── Reasoning fields ──
|
|
126
|
+
previous_goal_eval: {
|
|
127
|
+
type: 'STRING',
|
|
128
|
+
description: 'One-sentence assessment of your last action. State success, failure, or uncertain. Skip on first step.'
|
|
129
|
+
},
|
|
130
|
+
memory: {
|
|
131
|
+
type: 'STRING',
|
|
132
|
+
description: 'Key facts to remember for future steps: progress made, items found, counters, field values already collected.'
|
|
133
|
+
},
|
|
134
|
+
plan: {
|
|
135
|
+
type: 'STRING',
|
|
136
|
+
description: 'Your immediate next goal — what action you will take and why.'
|
|
137
|
+
},
|
|
138
|
+
// ── Action selection ──
|
|
139
|
+
action_name: {
|
|
140
|
+
type: 'STRING',
|
|
141
|
+
description: 'Which action to execute.',
|
|
142
|
+
enum: toolNames
|
|
143
|
+
},
|
|
144
|
+
// ── Action parameters (flat) ──
|
|
145
|
+
...actionProperties
|
|
146
|
+
},
|
|
147
|
+
required: ['plan', 'action_name']
|
|
148
|
+
}
|
|
149
|
+
};
|
|
90
150
|
}
|
|
91
151
|
mapParamType(type) {
|
|
92
152
|
switch (type) {
|
|
93
153
|
case 'number':
|
|
94
154
|
return 'NUMBER';
|
|
155
|
+
case 'integer':
|
|
156
|
+
return 'INTEGER';
|
|
95
157
|
case 'boolean':
|
|
96
158
|
return 'BOOLEAN';
|
|
97
159
|
case 'string':
|
|
@@ -102,76 +164,130 @@ export class GeminiProvider {
|
|
|
102
164
|
|
|
103
165
|
// ─── Build Contents ────────────────────────────────────────
|
|
104
166
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
// Current user message
|
|
120
|
-
contents.push({
|
|
167
|
+
/**
|
|
168
|
+
* Builds Gemini conversation contents.
|
|
169
|
+
*
|
|
170
|
+
* Each step is a STATELESS single-turn request (matching page-agent's approach):
|
|
171
|
+
* - System prompt has general instructions
|
|
172
|
+
* - User message contains full context: task, history, screen state
|
|
173
|
+
* - Model responds with agent_step function call
|
|
174
|
+
*
|
|
175
|
+
* History is embedded as text in assembleUserPrompt (via <agent_history>),
|
|
176
|
+
* NOT as functionCall/functionResponse pairs. This avoids Gemini's
|
|
177
|
+
* conversation format requirements and thought_signature complexity.
|
|
178
|
+
*/
|
|
179
|
+
buildContents(userMessage, _history) {
|
|
180
|
+
return [{
|
|
121
181
|
role: 'user',
|
|
122
182
|
parts: [{
|
|
123
183
|
text: userMessage
|
|
124
184
|
}]
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Ensure alternating roles (Gemini requirement)
|
|
128
|
-
return this.ensureAlternatingRoles(contents);
|
|
129
|
-
}
|
|
130
|
-
ensureAlternatingRoles(contents) {
|
|
131
|
-
if (contents.length <= 1) return contents;
|
|
132
|
-
const merged = [contents[0]];
|
|
133
|
-
for (let i = 1; i < contents.length; i++) {
|
|
134
|
-
const prev = merged[merged.length - 1];
|
|
135
|
-
const curr = contents[i];
|
|
136
|
-
if (prev.role === curr.role) {
|
|
137
|
-
// Merge same-role messages
|
|
138
|
-
prev.parts.push(...curr.parts);
|
|
139
|
-
} else {
|
|
140
|
-
merged.push(curr);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return merged;
|
|
185
|
+
}];
|
|
144
186
|
}
|
|
145
187
|
|
|
146
188
|
// ─── Parse Response ────────────────────────────────────────
|
|
147
189
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Parses the Gemini response expecting a single agent_step function call.
|
|
192
|
+
* Extracts structured reasoning + action, and determines which tool to execute.
|
|
193
|
+
*/
|
|
194
|
+
parseAgentStepResponse(data, tools) {
|
|
151
195
|
if (!data.candidates || data.candidates.length === 0) {
|
|
152
196
|
logger.warn('GeminiProvider', 'No candidates in response');
|
|
153
197
|
return {
|
|
154
|
-
toolCalls
|
|
198
|
+
toolCalls: [{
|
|
199
|
+
name: 'done',
|
|
200
|
+
args: {
|
|
201
|
+
text: 'No response generated.',
|
|
202
|
+
success: false
|
|
203
|
+
}
|
|
204
|
+
}],
|
|
205
|
+
reasoning: {
|
|
206
|
+
previousGoalEval: '',
|
|
207
|
+
memory: '',
|
|
208
|
+
plan: ''
|
|
209
|
+
},
|
|
155
210
|
text: 'No response generated.'
|
|
156
211
|
};
|
|
157
212
|
}
|
|
158
213
|
const candidate = data.candidates[0];
|
|
159
214
|
const parts = candidate.content?.parts || [];
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
215
|
+
|
|
216
|
+
// Find the function call part
|
|
217
|
+
const fnCallPart = parts.find(p => p.functionCall);
|
|
218
|
+
const textPart = parts.find(p => p.text);
|
|
219
|
+
if (!fnCallPart?.functionCall) {
|
|
220
|
+
logger.warn('GeminiProvider', 'No function call in response. Text:', textPart?.text);
|
|
221
|
+
return {
|
|
222
|
+
toolCalls: [{
|
|
223
|
+
name: 'done',
|
|
224
|
+
args: {
|
|
225
|
+
text: textPart?.text || 'No action taken.',
|
|
226
|
+
success: false
|
|
227
|
+
}
|
|
228
|
+
}],
|
|
229
|
+
reasoning: {
|
|
230
|
+
previousGoalEval: '',
|
|
231
|
+
memory: '',
|
|
232
|
+
plan: ''
|
|
233
|
+
},
|
|
234
|
+
text: textPart?.text
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const args = fnCallPart.functionCall.args || {};
|
|
238
|
+
|
|
239
|
+
// Extract reasoning fields
|
|
240
|
+
const reasoning = {
|
|
241
|
+
previousGoalEval: args.previous_goal_eval || '',
|
|
242
|
+
memory: args.memory || '',
|
|
243
|
+
plan: args.plan || ''
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Extract action
|
|
247
|
+
const actionName = args.action_name;
|
|
248
|
+
if (!actionName) {
|
|
249
|
+
logger.warn('GeminiProvider', 'No action_name in agent_step. Falling back to done.');
|
|
250
|
+
return {
|
|
251
|
+
toolCalls: [{
|
|
252
|
+
name: 'done',
|
|
253
|
+
args: {
|
|
254
|
+
text: 'Agent did not choose an action.',
|
|
255
|
+
success: false
|
|
256
|
+
}
|
|
257
|
+
}],
|
|
258
|
+
reasoning,
|
|
259
|
+
text: textPart?.text
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Build action args: everything except reasoning fields and action_name
|
|
264
|
+
const actionArgs = {};
|
|
265
|
+
const reservedKeys = new Set([...REASONING_FIELDS, 'action_name']);
|
|
266
|
+
|
|
267
|
+
// Find the matching tool to know which params belong to it
|
|
268
|
+
const matchedTool = tools.find(t => t.name === actionName);
|
|
269
|
+
if (matchedTool) {
|
|
270
|
+
for (const paramName of Object.keys(matchedTool.parameters)) {
|
|
271
|
+
if (args[paramName] !== undefined) {
|
|
272
|
+
actionArgs[paramName] = args[paramName];
|
|
273
|
+
}
|
|
166
274
|
}
|
|
167
|
-
|
|
168
|
-
|
|
275
|
+
} else {
|
|
276
|
+
// Custom/registered tool — grab all non-reserved fields
|
|
277
|
+
for (const [key, value] of Object.entries(args)) {
|
|
278
|
+
if (!reservedKeys.has(key)) {
|
|
279
|
+
actionArgs[key] = value;
|
|
280
|
+
}
|
|
169
281
|
}
|
|
170
282
|
}
|
|
171
|
-
logger.info('GeminiProvider', `Parsed:
|
|
283
|
+
logger.info('GeminiProvider', `Parsed: action=${actionName}, plan="${reasoning.plan}"`);
|
|
172
284
|
return {
|
|
173
|
-
toolCalls
|
|
174
|
-
|
|
285
|
+
toolCalls: [{
|
|
286
|
+
name: actionName,
|
|
287
|
+
args: actionArgs
|
|
288
|
+
}],
|
|
289
|
+
reasoning,
|
|
290
|
+
text: textPart?.text
|
|
175
291
|
};
|
|
176
292
|
}
|
|
177
293
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["logger","GeminiProvider","constructor","apiKey","model","generateContent","systemPrompt","userMessage","tools","history","info","length","
|
|
1
|
+
{"version":3,"names":["logger","AGENT_STEP_FN","REASONING_FIELDS","GeminiProvider","constructor","apiKey","model","generateContent","systemPrompt","userMessage","tools","history","info","length","agentStepDeclaration","buildAgentStepDeclaration","contents","buildContents","url","body","functionDeclarations","systemInstruction","parts","text","tool_config","function_calling_config","mode","allowed_function_names","generationConfig","temperature","maxOutputTokens","startTime","Date","now","response","fetch","method","headers","JSON","stringify","elapsed","ok","errorText","error","status","Error","data","json","parseAgentStepResponse","message","toolNames","map","t","name","actionProperties","tool","paramName","param","Object","entries","parameters","type","mapParamType","description","enum","toolDescriptions","params","keys","join","properties","previous_goal_eval","memory","plan","action_name","required","_history","role","candidates","warn","toolCalls","args","success","reasoning","previousGoalEval","candidate","content","fnCallPart","find","p","functionCall","textPart","actionName","actionArgs","reservedKeys","Set","matchedTool","undefined","key","value","has"],"sourceRoot":"../../../src","sources":["providers/GeminiProvider.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -51,7 +51,15 @@ interface AIAgentProps {
|
|
|
51
51
|
stepDelay?: number;
|
|
52
52
|
/** WebSocket URL to companion MCP server bridge (e.g., ws://localhost:3101) */
|
|
53
53
|
mcpServerUrl?: string;
|
|
54
|
+
/** Expo Router instance (from useRouter()) */
|
|
55
|
+
router?: {
|
|
56
|
+
push: (href: string) => void;
|
|
57
|
+
replace: (href: string) => void;
|
|
58
|
+
back: () => void;
|
|
59
|
+
};
|
|
60
|
+
/** Expo Router pathname (from usePathname()) */
|
|
61
|
+
pathname?: string;
|
|
54
62
|
}
|
|
55
|
-
export declare function AIAgent({ apiKey, model, navRef, language, maxSteps, showChatBar, children, onResult, interactiveBlacklist, interactiveWhitelist, onBeforeStep, onAfterStep, onBeforeTask, onAfterTask, transformScreenContent, customTools, instructions, stepDelay, mcpServerUrl, }: AIAgentProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
export declare function AIAgent({ apiKey, model, navRef, language, maxSteps, showChatBar, children, onResult, interactiveBlacklist, interactiveWhitelist, onBeforeStep, onAfterStep, onBeforeTask, onAfterTask, transformScreenContent, customTools, instructions, stepDelay, mcpServerUrl, router, pathname, }: AIAgentProps): import("react/jsx-runtime").JSX.Element;
|
|
56
64
|
export {};
|
|
57
65
|
//# sourceMappingURL=AIAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAgent.d.ts","sourceRoot":"","sources":["../../../../src/components/AIAgent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAe,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO7F,UAAU,YAAY;IACpB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,kBAAkB;IAClB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAI7C,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,8BAA8B;IAC9B,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1C,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,qEAAqE;IACrE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACvE,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,2CAA2C;IAC3C,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;KAC3E,CAAC;IACF,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAgent.d.ts","sourceRoot":"","sources":["../../../../src/components/AIAgent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAe,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO7F,UAAU,YAAY;IACpB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,kBAAkB;IAClB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAI7C,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,8BAA8B;IAC9B,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1C,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,qEAAqE;IACrE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACvE,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,2CAA2C;IAC3C,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;KAC3E,CAAC;IACF,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,IAAI,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,KAA0B,EAC1B,MAAM,EACN,QAAe,EACf,QAAa,EACb,WAAkB,EAClB,QAAQ,EACR,QAAQ,EAER,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,MAAM,EACN,QAAQ,GACT,EAAE,YAAY,2CA+Id"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AgentChatBar — Floating
|
|
3
|
-
*
|
|
2
|
+
* AgentChatBar — Floating, draggable, compressible chat widget.
|
|
3
|
+
* Does not block underlying UI natively.
|
|
4
4
|
*/
|
|
5
5
|
import type { ExecutionResult } from '../core/types';
|
|
6
6
|
interface AgentChatBarProps {
|
|
@@ -8,7 +8,8 @@ interface AgentChatBarProps {
|
|
|
8
8
|
isThinking: boolean;
|
|
9
9
|
lastResult: ExecutionResult | null;
|
|
10
10
|
language: 'en' | 'ar';
|
|
11
|
+
onDismiss?: () => void;
|
|
11
12
|
}
|
|
12
|
-
export declare function AgentChatBar({ onSend, isThinking, lastResult, language }: AgentChatBarProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function AgentChatBar({ onSend, isThinking, lastResult, language, onDismiss }: AgentChatBarProps): import("react/jsx-runtime").JSX.Element;
|
|
13
14
|
export {};
|
|
14
15
|
//# sourceMappingURL=AgentChatBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentChatBar.d.ts","sourceRoot":"","sources":["../../../../src/components/AgentChatBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"AgentChatBar.d.ts","sourceRoot":"","sources":["../../../../src/components/AgentChatBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,UAAU,iBAAiB;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAyGtG"}
|
|
@@ -23,11 +23,27 @@ export declare class AgentRuntime {
|
|
|
23
23
|
private registerBuiltInTools;
|
|
24
24
|
registerAction(action: ActionDefinition): void;
|
|
25
25
|
unregisterAction(name: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Recursively collect ALL screen names from the navigation state tree.
|
|
28
|
+
* This handles tabs, drawers, and nested stacks.
|
|
29
|
+
*/
|
|
26
30
|
private getRouteNames;
|
|
31
|
+
private collectRouteNames;
|
|
32
|
+
/**
|
|
33
|
+
* Recursively find the deepest active screen name.
|
|
34
|
+
* For tabs: follows active tab → active screen inside that tab.
|
|
35
|
+
*/
|
|
27
36
|
private getCurrentScreenName;
|
|
37
|
+
private getDeepestScreenName;
|
|
38
|
+
/** Maps a tool call to a user-friendly status label for the loading overlay. */
|
|
39
|
+
private getToolStatusLabel;
|
|
28
40
|
private buildToolsForProvider;
|
|
29
41
|
private getWalkConfig;
|
|
30
42
|
private getInstructions;
|
|
43
|
+
private observations;
|
|
44
|
+
private lastScreenName;
|
|
45
|
+
private handleObservations;
|
|
46
|
+
private assembleUserPrompt;
|
|
31
47
|
execute(userMessage: string): Promise<ExecutionResult>;
|
|
32
48
|
/** Update refs (called when component re-renders) */
|
|
33
49
|
updateRefs(rootRef: any, navRef: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentRuntime.d.ts","sourceRoot":"","sources":["../../../../src/core/AgentRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"AgentRuntime.d.ts","sourceRoot":"","sources":["../../../../src/core/AgentRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,eAAe,EAEf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAMjB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAuB;gBAGhD,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,GAAG;IAyBb,OAAO,CAAC,oBAAoB;IAkK5B,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAK9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMpC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,oBAAoB;IAW5B,gFAAgF;IAChF,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAc;IAEpC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,kBAAkB;IAuDpB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAuL5D,qDAAqD;IACrD,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAK3C,4CAA4C;IAC5C,YAAY,IAAI,OAAO;CAGxB"}
|
|
@@ -14,6 +14,11 @@ export interface WalkConfig {
|
|
|
14
14
|
/** If set, only these elements are interactive — mirrors page-agent interactiveWhitelist */
|
|
15
15
|
interactiveWhitelist?: React.RefObject<any>[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if a node has ANY event handler prop (on* function).
|
|
19
|
+
* Mirrors RNTL's getEventHandlerFromProps pattern.
|
|
20
|
+
*/
|
|
21
|
+
export declare function hasAnyEventHandler(props: any): boolean;
|
|
17
22
|
export interface WalkResult {
|
|
18
23
|
elementsText: string;
|
|
19
24
|
interactives: InteractiveElement[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiberTreeWalker.d.ts","sourceRoot":"","sources":["../../../../src/core/FiberTreeWalker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AAI/D,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"FiberTreeWalker.d.ts","sourceRoot":"","sources":["../../../../src/core/FiberTreeWalker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AAI/D,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CAC/C;AAsDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQtD;AAsND,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CA4F3E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System prompt for the AI agent — adapted from page-agent reference.
|
|
3
|
+
*
|
|
4
|
+
* Separated into its own file for maintainability.
|
|
5
|
+
* The prompt uses XML-style tags (matching page-agent's structure)
|
|
6
|
+
* to give the LLM clear, structured instructions.
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildSystemPrompt(language: string): string;
|
|
9
|
+
//# sourceMappingURL=systemPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemPrompt.d.ts","sourceRoot":"","sources":["../../../../src/core/systemPrompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyJ1D"}
|
|
@@ -15,7 +15,8 @@ export interface InteractiveElement {
|
|
|
15
15
|
props: {
|
|
16
16
|
onPress?: (...args: any[]) => void;
|
|
17
17
|
onChangeText?: (text: string) => void;
|
|
18
|
-
|
|
18
|
+
onValueChange?: (value: boolean) => void;
|
|
19
|
+
value?: string | boolean;
|
|
19
20
|
placeholder?: string;
|
|
20
21
|
checked?: boolean;
|
|
21
22
|
disabled?: boolean;
|
|
@@ -35,11 +36,7 @@ export interface DehydratedScreen {
|
|
|
35
36
|
}
|
|
36
37
|
export interface AgentStep {
|
|
37
38
|
stepIndex: number;
|
|
38
|
-
reflection:
|
|
39
|
-
evaluationPreviousGoal: string;
|
|
40
|
-
memory: string;
|
|
41
|
-
nextGoal: string;
|
|
42
|
-
};
|
|
39
|
+
reflection: AgentReasoning;
|
|
43
40
|
action: {
|
|
44
41
|
name: string;
|
|
45
42
|
input: Record<string, any>;
|
|
@@ -96,6 +93,32 @@ export interface AgentConfig {
|
|
|
96
93
|
};
|
|
97
94
|
/** Delay between steps in ms (page-agent default: 400ms). */
|
|
98
95
|
stepDelay?: number;
|
|
96
|
+
/**
|
|
97
|
+
* Called with a human-readable status string at each step.
|
|
98
|
+
* Use this to show dynamic loading text (e.g., "Tapping 'Add'...").
|
|
99
|
+
*/
|
|
100
|
+
onStatusUpdate?: (status: string) => void;
|
|
101
|
+
/**
|
|
102
|
+
* Callback for when agent needs user input (ask_user tool).
|
|
103
|
+
* Mirrors page-agent: the agent loop blocks until the user responds.
|
|
104
|
+
* If not set, ask_user tool will break the loop (legacy behavior).
|
|
105
|
+
* @example onAskUser: (q) => new Promise(resolve => showPrompt(q, resolve))
|
|
106
|
+
*/
|
|
107
|
+
onAskUser?: (question: string) => Promise<string>;
|
|
108
|
+
/**
|
|
109
|
+
* Expo Router instance (from useRouter()).
|
|
110
|
+
* When provided, the navigate tool uses router.push('/path') instead of navRef.navigate().
|
|
111
|
+
*/
|
|
112
|
+
router?: {
|
|
113
|
+
push: (href: string) => void;
|
|
114
|
+
replace: (href: string) => void;
|
|
115
|
+
back: () => void;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Current pathname from Expo Router (from usePathname()).
|
|
119
|
+
* Used to determine the current screen when using Expo Router.
|
|
120
|
+
*/
|
|
121
|
+
pathname?: string;
|
|
99
122
|
/**
|
|
100
123
|
* Optional URL of the companion Node.js MCP server bridge (e.g. ws://localhost:3101).
|
|
101
124
|
* If set, the SDK will connect to this server and listen for execution requests
|
|
@@ -126,13 +149,28 @@ export interface ActionDefinition {
|
|
|
126
149
|
parameters: Record<string, string>;
|
|
127
150
|
handler: (args: Record<string, any>) => any;
|
|
128
151
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
/** Structured reasoning returned per step via the agent_step tool. */
|
|
153
|
+
export interface AgentReasoning {
|
|
154
|
+
/** Assessment of whether the previous action succeeded or failed. */
|
|
155
|
+
previousGoalEval: string;
|
|
156
|
+
/** What to remember for future steps (progress, items found, etc). */
|
|
157
|
+
memory: string;
|
|
158
|
+
/** The immediate next goal and why. */
|
|
159
|
+
plan: string;
|
|
160
|
+
}
|
|
161
|
+
/** Result from the AI provider's generateContent call. */
|
|
162
|
+
export interface ProviderResult {
|
|
163
|
+
/** Extracted action tool call (action_name + params). */
|
|
164
|
+
toolCalls: Array<{
|
|
165
|
+
name: string;
|
|
166
|
+
args: Record<string, any>;
|
|
136
167
|
}>;
|
|
168
|
+
/** Structured reasoning from MacroTool (evaluation, memory, next_goal). */
|
|
169
|
+
reasoning: AgentReasoning;
|
|
170
|
+
/** Raw text response (if any). */
|
|
171
|
+
text?: string;
|
|
172
|
+
}
|
|
173
|
+
export interface AIProvider {
|
|
174
|
+
generateContent(systemPrompt: string, userMessage: string, tools: ToolDefinition[], history: AgentStep[]): Promise<ProviderResult>;
|
|
137
175
|
}
|
|
138
176
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,EAAE,GAAG,CAAC;IACf,yBAAyB;IACzB,KAAK,EAAE;QACL,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACtC,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,EAAE,GAAG,CAAC;IACf,yBAAyB;IACzB,KAAK,EAAE;QACL,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACtC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QACzC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAID,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAID,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAIlB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAE9C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAI9C,qCAAqC;IACrC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE3D,sDAAsD;IACtD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE7D,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1C,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAIhE;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAIvE;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;IAIpD,kDAAkD;IAClD,YAAY,CAAC,EAAE;QACb,8DAA8D;QAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;KAC3E,CAAC;IAEF,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAIlD;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,IAAI,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IAEF;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAIlB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;CAC7C;AAID,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9D,2EAA2E;IAC3E,SAAS,EAAE,cAAc,CAAC;IAC1B,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CACb,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,SAAS,EAAE,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B"}
|