zan-browser 1.3.28 → 1.3.30

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/ai.d.ts CHANGED
@@ -1,16 +1,23 @@
1
- import type { ObserveResult, AgentAction, SeedValue } from "./types";
1
+ import type { ObserveResult, AgentCompletion, SeedValue, PageLink } from "./types";
2
2
  export declare class AIClient {
3
3
  private client;
4
4
  private model;
5
5
  constructor(apiKey: string, model?: string);
6
- decideFromObservation(goal: string, observation: ObserveResult, history: string[], seedValues?: SeedValue[]): Promise<AgentAction>;
7
- decideFromScreenshot(goal: string, screenshotBase64: string, history: string[], seedValues?: SeedValue[]): Promise<AgentAction>;
8
- scrapePageContent(goal: string, pageContent: string, seedValues?: SeedValue[]): Promise<{
6
+ decideFromObservation(goal: string, observation: ObserveResult, trajectory: Array<{
7
+ role: "assistant" | "user";
8
+ content: string;
9
+ }>, step: number, maxSteps: number, seedValues?: SeedValue[]): Promise<AgentCompletion>;
10
+ decideFromScreenshot(goal: string, screenshotBase64: string, trajectory: Array<{
11
+ role: "assistant" | "user";
12
+ content: string;
13
+ }>, step: number, maxSteps: number, seedValues?: SeedValue[]): Promise<AgentCompletion>;
14
+ scrapePageContent(goal: string, pageContent: string, seedValues?: SeedValue[], availableLinks?: PageLink[]): Promise<{
9
15
  found: boolean;
10
16
  data: Record<string, unknown> | null;
11
17
  nextUrl: string | null;
12
18
  reasoning: string;
13
19
  }>;
20
+ private parseCompletion;
14
21
  private parseAction;
15
22
  }
16
23
  //# sourceMappingURL=ai.d.ts.map
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAMrE,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAM3C,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IAmDjB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IA+DjB,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAwC/G,OAAO,CAAC,WAAW;CA6BpB"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAe,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyDhG,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAM3C,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,eAAe,CAAC;IAgDrB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,eAAe,CAAC;IAkDrB,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,SAAS,EAAE,EACxB,cAAc,CAAC,EAAE,QAAQ,EAAE,GAC1B,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAiD/G,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,WAAW;CAqCpB"}
package/dist/ai.js CHANGED
@@ -6,8 +6,58 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AIClient = void 0;
7
7
  const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
8
8
  const DEFAULT_MODEL = "claude-sonnet-4-6";
9
- // AI is only used when observe() is not enough to make a decision.
10
- // In practice: 0–2 calls per session.
9
+ const SYSTEM_PROMPT = `You are a precise browser automation agent that interacts with websites through structured commands.
10
+ Your role is to:
11
+ 1. Analyze the provided webpage elements and structure
12
+ 2. Plan actions to accomplish the given task
13
+ 3. Respond with valid JSON containing your action and state assessment
14
+
15
+ INPUT STRUCTURE:
16
+ Elements use this format:
17
+ id[:]<element_type attr1="val" attr2="val">text</element_type>
18
+ _[:] Non-interactive text context
19
+
20
+ IDs: B=button, L=link, I=input, S=select, O=option, F=image, M=misc
21
+
22
+ CRITICAL: Never use an ID that is not explicitly shown in the current elements.
23
+ CRITICAL: Never invent URLs. Only use hrefs from the elements list.
24
+
25
+ RESPONSE FORMAT:
26
+ You must ALWAYS respond with valid JSON in this exact format (no markdown, no backticks):
27
+ {
28
+ "state": {
29
+ "previous_goal_status": "success" | "failure" | "unknown",
30
+ "previous_goal_eval": "evaluation of whether the previous action achieved its goal",
31
+ "page_summary": "brief description of the current page",
32
+ "relevant_interactions": [{"id": "B1", "reason": "why this element matters"}],
33
+ "memory": "important information to remember across steps",
34
+ "next_goal": "what you plan to do next"
35
+ },
36
+ "action": { ... one of the actions below ... }
37
+ }
38
+
39
+ ACTIONS (choose exactly one):
40
+ - goto: {"type": "goto", "url": "https://...", "reason": "why"} — navigate to URL (ONLY from element hrefs)
41
+ - click: {"type": "click", "elementId": "B1", "reason": "why"}
42
+ - fill: {"type": "fill", "elementId": "I1", "value": "text", "reason": "why"}
43
+ - press_key: {"type": "press_key", "key": "Enter", "reason": "why"}
44
+ - scroll_down: {"type": "scroll", "direction": "down", "reason": "why"}
45
+ - scroll_up: {"type": "scroll", "direction": "up", "reason": "why"}
46
+ - scrape: {"type": "scrape", "reason": "why"} — data is visible on page, extract it
47
+ - done: {"type": "done", "reason": "why", "data": {}} — task complete, return extracted data
48
+ - impossible: {"type": "impossible", "reason": "why this cannot be done"}
49
+
50
+ NAVIGATION & ERROR HANDLING:
51
+ - If no suitable elements exist, use scroll or goto to find them
52
+ - If stuck, try alternative approaches
53
+ - Handle popups/cookies by accepting or closing them
54
+ - Use scroll to find elements you are looking for
55
+
56
+ TASK COMPLETION:
57
+ - Use done action as soon as the task is complete
58
+ - Include all relevant data in the done action
59
+ - If running out of steps, speed up and use done
60
+ - relevant_interactions should have at most 3 items`;
11
61
  class AIClient {
12
62
  client;
13
63
  model;
@@ -15,116 +65,104 @@ class AIClient {
15
65
  this.client = new sdk_1.default({ apiKey });
16
66
  this.model = model;
17
67
  }
18
- // Decide the next action given the observed DOM state (text first, no screenshot)
19
- async decideFromObservation(goal, observation, history, seedValues) {
20
- const historyText = history.length > 0
21
- ? `\nPREVIOUS STEPS:\n${history.slice(-5).join("\n")}`
22
- : "";
68
+ // Decide the next action given the observed DOM state Notte-style prompt
69
+ async decideFromObservation(goal, observation, trajectory, step, maxSteps, seedValues) {
23
70
  const seedContext = seedValues && seedValues.length > 0
24
71
  ? `\nINPUT VALUES TO USE:\n${seedValues.map(s => `- ${s.paramName} (${s.description}): use "${s.exampleValue}" when filling any relevant input field`).join("\n")}`
25
72
  : "";
26
- const prompt = `You are controlling a browser to achieve a goal.
27
- Decide the SINGLE next action to take based on the current page state.
73
+ const userMessage = `<WEBSITE_CONTENT_BEGIN>
74
+ * Current url: ${observation.currentUrl}
75
+ * Current page title: ${observation.pageTitle}
76
+ * Current step: ${step}/${maxSteps}
28
77
 
29
- GOAL: ${goal}
30
- ${historyText}${seedContext}
31
-
32
- CURRENT PAGE STATE:
78
+ [Interaction elements and context]
79
+ [Start of page]
33
80
  ${observation.text}
81
+ [End of page]
82
+ <WEBSITE_CONTENT_END>
34
83
 
35
- IMPORTANT RULES:
36
- - Always dismiss cookie banners first if hasCookieBanner=true
37
- - If a modal is open, interact with it first
38
- - If the page is loading, return a wait action
39
- - Take the minimum actions needed — stop as soon as the goal is achievable
40
- - If INPUT VALUES are provided above, use them when filling search boxes or input fields
41
- - If you cannot achieve the goal, return "impossible"
42
- - If the goal is achieved, return "done"
43
-
44
- Respond with a JSON object (no markdown):
45
- {
46
- "type": "click" | "fill" | "scroll" | "wait" | "navigate" | "screenshot" | "done" | "impossible",
47
- "elementId": "@B3" (required for click/fill),
48
- "value": "text to type" (required for fill),
49
- "direction": "up" | "down" (required for scroll),
50
- "amount": 300 (optional for scroll, pixels),
51
- "ms": 1000 (required for wait),
52
- "url": "https://..." (required for navigate — use when the current page clearly doesn't have the data and a more specific URL would),
53
- "reason": "why this action"
54
- }`;
84
+ Given the previous information, start by reflecting on your last action. Then, summarize the current page and list immediately relevant available interactions (max of 3).
85
+ Absolutely do not under any circumstance use any id that is not explicitly found in the page.
86
+ From there, select your next goal, and in turn, your next action.`;
87
+ // Build messages: task first, then trajectory history (last 8), then current observation
88
+ const messages = [
89
+ { role: "user", content: `TASK: ${goal}${seedContext}` },
90
+ { role: "assistant", content: `I'll help you accomplish this task. Let me analyze the page and take the appropriate actions.` },
91
+ ];
92
+ // Add trajectory history (last 8 steps)
93
+ const recentTrajectory = trajectory.slice(-16); // 8 pairs = 16 entries
94
+ for (const entry of recentTrajectory) {
95
+ messages.push({ role: entry.role, content: entry.content });
96
+ }
97
+ // Current observation
98
+ messages.push({ role: "user", content: userMessage });
55
99
  const response = await this.client.messages.create({
56
100
  model: this.model,
57
- max_tokens: 256,
58
- messages: [{ role: "user", content: prompt }],
101
+ max_tokens: 1024,
102
+ system: SYSTEM_PROMPT,
103
+ messages,
59
104
  });
60
105
  const text = response.content[0].type === "text" ? response.content[0].text : "";
61
- return this.parseAction(text);
106
+ return this.parseCompletion(text);
62
107
  }
63
- async decideFromScreenshot(goal, screenshotBase64, history, seedValues) {
64
- const historyText = history.length > 0
65
- ? `\nPREVIOUS STEPS:\n${history.slice(-3).join("\n")}`
66
- : "";
108
+ async decideFromScreenshot(goal, screenshotBase64, trajectory, step, maxSteps, seedValues) {
67
109
  const seedContext = seedValues && seedValues.length > 0
68
110
  ? `\nINPUT VALUES TO USE:\n${seedValues.map(s => `- ${s.paramName} (${s.description}): use "${s.exampleValue}" when filling any relevant input field`).join("\n")}`
69
111
  : "";
70
- const prompt = `You are controlling a browser to achieve a goal.
71
- The DOM observer couldn't identify enough elements — you're seeing a screenshot instead.
72
- Decide the SINGLE next action.
73
-
74
- GOAL: ${goal}
75
- ${historyText}${seedContext}
112
+ const userMessage = `The DOM observer couldn't identify enough elements — you're seeing a screenshot instead.
113
+ Current step: ${step}/${maxSteps}
76
114
 
77
- RULES: Take minimum actions needed. Return "done" when goal is achievable.
78
- If INPUT VALUES are provided above, use them when filling search boxes or input fields.
79
- Return "impossible" if it cannot be done.
80
-
81
- Respond with JSON (no markdown):
82
- {
83
- "type": "click" | "fill" | "scroll" | "wait" | "navigate" | "screenshot" | "done" | "impossible",
84
- "elementId": "describe the element visually if no ID available",
85
- "value": "text to type" (for fill),
86
- "direction": "up" | "down" (for scroll),
87
- "ms": 1000 (for wait),
88
- "url": "https://..." (for navigate),
89
- "reason": "why"
90
- }`;
91
- const response = await this.client.messages.create({
92
- model: this.model,
93
- max_tokens: 256,
94
- messages: [
115
+ Decide the SINGLE next action. Use the same JSON response format.`;
116
+ const messages = [
117
+ { role: "user", content: `TASK: ${goal}${seedContext}` },
118
+ { role: "assistant", content: `I'll help you accomplish this task. Let me analyze the page and take the appropriate actions.` },
119
+ ];
120
+ const recentTrajectory = trajectory.slice(-8);
121
+ for (const entry of recentTrajectory) {
122
+ messages.push({ role: entry.role, content: entry.content });
123
+ }
124
+ messages.push({
125
+ role: "user",
126
+ content: [
95
127
  {
96
- role: "user",
97
- content: [
98
- {
99
- type: "image",
100
- source: {
101
- type: "base64",
102
- media_type: "image/jpeg",
103
- data: screenshotBase64,
104
- },
105
- },
106
- { type: "text", text: prompt },
107
- ],
128
+ type: "image",
129
+ source: {
130
+ type: "base64",
131
+ media_type: "image/jpeg",
132
+ data: screenshotBase64,
133
+ },
108
134
  },
135
+ { type: "text", text: userMessage },
109
136
  ],
110
137
  });
138
+ const response = await this.client.messages.create({
139
+ model: this.model,
140
+ max_tokens: 1024,
141
+ system: SYSTEM_PROMPT,
142
+ messages,
143
+ });
111
144
  const text = response.content[0].type === "text" ? response.content[0].text : "";
112
- return this.parseAction(text);
145
+ return this.parseCompletion(text);
113
146
  }
114
147
  // ─── Intelligent content scrape — Notte-style page understanding ─────────────
115
- // Uses Sonnet (not Haiku) because this is data extraction, not navigation.
116
- // Returns structured data if found on the page, or the next URL to follow.
117
- async scrapePageContent(goal, pageContent, seedValues) {
148
+ async scrapePageContent(goal, pageContent, seedValues, availableLinks) {
118
149
  const seedContext = seedValues && seedValues.length > 0
119
150
  ? `\nCONCRETE EXAMPLE INPUTS:\n${seedValues.map((s) => `- ${s.paramName}: "${s.exampleValue}"`).join("\n")}`
120
151
  : "";
152
+ const linksSection = availableLinks && availableLinks.length > 0
153
+ ? `\nAVAILABLE LINKS ON THIS PAGE:\n${availableLinks.map((l, i) => `[${i}] ${l.text} → ${l.href}`).join("\n")}`
154
+ : "";
155
+ const linkInstruction = availableLinks && availableLinks.length > 0
156
+ ? "IMPORTANT: Only return a nextUrl that exists in the AVAILABLE LINKS list above — do NOT invent or guess URLs."
157
+ : "If no, look for links or navigation that would lead to the data and return the most relevant URL to visit next.";
121
158
  const prompt = `The user wants: ${goal}${seedContext}
122
159
 
123
160
  Here is the visible content of a web page:
124
161
  ${pageContent}
162
+ ${linksSection}
125
163
 
126
164
  Does this page contain the data the user is looking for? If yes, extract it as structured JSON.
127
- If no, look for links or navigation that would lead to the data and return the most relevant URL to visit next.
165
+ ${linkInstruction}
128
166
 
129
167
  Respond with JSON only (no markdown):
130
168
  {
@@ -134,7 +172,7 @@ Respond with JSON only (no markdown):
134
172
  "reasoning": "brief explanation"
135
173
  }`;
136
174
  const response = await this.client.messages.create({
137
- model: "claude-sonnet-4-6", // Sonnet for data extraction — more capable than Haiku
175
+ model: "claude-sonnet-4-6",
138
176
  max_tokens: 2000,
139
177
  messages: [{ role: "user", content: prompt }],
140
178
  });
@@ -148,33 +186,68 @@ Respond with JSON only (no markdown):
148
186
  }
149
187
  }
150
188
  // ─── Private ─────────────────────────────────────────────────────────────────
151
- parseAction(raw) {
189
+ parseCompletion(raw) {
152
190
  try {
153
191
  const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
154
192
  const parsed = JSON.parse(cleaned);
155
- switch (parsed.type) {
156
- case "click":
157
- return { type: "click", elementId: parsed.elementId ?? "", reason: parsed.reason ?? "" };
158
- case "fill":
159
- return { type: "fill", elementId: parsed.elementId ?? "", value: parsed.value ?? "", reason: parsed.reason ?? "" };
160
- case "scroll":
161
- return { type: "scroll", direction: parsed.direction ?? "down", amount: parsed.amount, reason: parsed.reason ?? "" };
162
- case "wait":
163
- return { type: "wait", ms: parsed.ms ?? 1000, reason: parsed.reason ?? "" };
164
- case "navigate":
165
- return { type: "navigate", url: parsed.url ?? "", reason: parsed.reason ?? "" };
166
- case "screenshot":
167
- return { type: "screenshot", reason: parsed.reason ?? "need visual confirmation" };
168
- case "done":
169
- return { type: "done", reason: parsed.reason ?? "" };
170
- case "impossible":
171
- return { type: "impossible", reason: parsed.reason ?? "could not achieve goal" };
172
- default:
173
- return { type: "impossible", reason: `unknown action type: ${parsed.type}` };
174
- }
193
+ const state = parsed.state ?? {
194
+ previous_goal_status: "unknown",
195
+ previous_goal_eval: "",
196
+ page_summary: "",
197
+ relevant_interactions: [],
198
+ memory: "",
199
+ next_goal: "",
200
+ };
201
+ const action = this.parseAction(parsed.action ?? parsed);
202
+ return { state, action };
175
203
  }
176
204
  catch {
177
- return { type: "impossible", reason: `failed to parse AI response: ${raw.slice(0, 100)}` };
205
+ return {
206
+ state: {
207
+ previous_goal_status: "unknown",
208
+ previous_goal_eval: "failed to parse response",
209
+ page_summary: "",
210
+ relevant_interactions: [],
211
+ memory: "",
212
+ next_goal: "",
213
+ },
214
+ action: { type: "impossible", reason: `failed to parse AI response: ${raw.slice(0, 100)}` },
215
+ };
216
+ }
217
+ }
218
+ parseAction(parsed) {
219
+ if (!parsed || typeof parsed !== "object") {
220
+ return { type: "impossible", reason: "invalid action object" };
221
+ }
222
+ const type = parsed.type;
223
+ const reason = parsed.reason ?? "";
224
+ switch (type) {
225
+ case "click":
226
+ return { type: "click", elementId: (parsed.elementId ?? parsed.id ?? ""), reason };
227
+ case "fill":
228
+ return { type: "fill", elementId: (parsed.elementId ?? parsed.id ?? ""), value: (parsed.value ?? ""), reason };
229
+ case "scroll":
230
+ case "scroll_down":
231
+ return { type: "scroll", direction: parsed.direction ?? "down", amount: parsed.amount, reason };
232
+ case "scroll_up":
233
+ return { type: "scroll", direction: "up", reason };
234
+ case "wait":
235
+ return { type: "wait", ms: parsed.ms ?? 1000, reason };
236
+ case "goto":
237
+ case "navigate":
238
+ return { type: "navigate", url: (parsed.url ?? ""), reason };
239
+ case "press_key":
240
+ return { type: "press_key", key: (parsed.key ?? ""), reason };
241
+ case "scrape":
242
+ return { type: "scrape", reason };
243
+ case "screenshot":
244
+ return { type: "screenshot", reason: reason || "need visual confirmation" };
245
+ case "done":
246
+ return { type: "done", reason, data: parsed.data };
247
+ case "impossible":
248
+ return { type: "impossible", reason: reason || "could not achieve goal" };
249
+ default:
250
+ return { type: "impossible", reason: `unknown action type: ${type}` };
178
251
  }
179
252
  }
180
253
  }
package/dist/ai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { RensanBrowser } from "./browser";
2
2
  export { Session } from "./session";
3
- export type { ObservedElement, ObserveResult, CapturedRequest, SeedValue, AgentAction, ActResult, FindDataResult, SessionConfig, AIConfig, BrowserConfig, Screenshot, ElementType, } from "./types";
3
+ export type { ObservedElement, ObserveResult, CapturedRequest, SeedValue, PageLink, AgentAction, AgentState, AgentCompletion, RelevantInteraction, ActResult, FindDataResult, SessionConfig, AIConfig, BrowserConfig, Screenshot, ElementType, } from "./types";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC"}
@@ -9,6 +9,6 @@ export declare class Observer {
9
9
  y: number;
10
10
  } | null>;
11
11
  private resolveType;
12
- private buildTextRepresentation;
12
+ private renderElementLine;
13
13
  }
14
14
  //# sourceMappingURL=observer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAmB,aAAa,EAAe,MAAM,SAAS,CAAC;AAc3E,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAMhB,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAwLjC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA2B5E,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;CAkChC"}
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAmB,aAAa,EAAe,MAAM,SAAS,CAAC;AAmD3E,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAIhB,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAySjC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA0B5E,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,iBAAiB;CAoB1B"}