@hasna/browser 0.0.6 → 0.0.9
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/cli/index.js +857 -276
- package/dist/db/sessions.d.ts +15 -0
- package/dist/db/sessions.d.ts.map +1 -1
- package/dist/db/timeline.d.ts +11 -0
- package/dist/db/timeline.d.ts.map +1 -0
- package/dist/engines/playwright.d.ts +1 -1
- package/dist/engines/playwright.d.ts.map +1 -1
- package/dist/index.js +117 -12
- package/dist/lib/session.d.ts +7 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/mcp/index.js +946 -397
- package/dist/server/index.js +98 -14
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/db/sessions.d.ts
CHANGED
|
@@ -16,5 +16,20 @@ export declare function listSessions(filter?: {
|
|
|
16
16
|
}): Session[];
|
|
17
17
|
export declare function updateSessionStatus(id: string, status: SessionStatus): Session;
|
|
18
18
|
export declare function closeSession(id: string): Session;
|
|
19
|
+
export declare function lockSession(id: string, agentId: string): Session;
|
|
20
|
+
export declare function unlockSession(id: string, agentId?: string): Session;
|
|
21
|
+
export declare function isSessionLocked(id: string): {
|
|
22
|
+
locked: boolean;
|
|
23
|
+
locked_by?: string;
|
|
24
|
+
locked_at?: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function transferSession(id: string, toAgentId: string): Session;
|
|
27
|
+
export declare function getActiveSessionForAgent(agentId: string): Session | null;
|
|
28
|
+
export declare function getDefaultActiveSession(): Session | null;
|
|
29
|
+
export declare function countActiveSessions(): number;
|
|
19
30
|
export declare function deleteSession(id: string): void;
|
|
31
|
+
export declare function addSessionTag(id: string, tag: string): string[];
|
|
32
|
+
export declare function removeSessionTag(id: string, tag: string): string[];
|
|
33
|
+
export declare function getSessionTags(id: string): string[];
|
|
34
|
+
export declare function listSessionsByTag(tag: string): Session[];
|
|
20
35
|
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAiB9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG7D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAQ/F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAO9E;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAiB9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG7D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAQ/F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAO9E;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAUnE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAKvG;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAItE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAGxE;AAED,wBAAgB,uBAAuB,IAAI,OAAO,GAAG,IAAI,CAIxD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAI/D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIlE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAGnD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAKxD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface TimelineEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
session_id: string;
|
|
4
|
+
event_type: string;
|
|
5
|
+
details: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function logEvent(sessionId: string, eventType: string, details?: Record<string, unknown>): void;
|
|
9
|
+
export declare function getTimeline(sessionId: string, limit?: number): TimelineEvent[];
|
|
10
|
+
export declare function clearTimeline(sessionId: string): void;
|
|
11
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/db/timeline.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAM1G;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,aAAa,EAAE,CAK3E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAGrD"}
|
|
@@ -18,7 +18,7 @@ export declare class BrowserPool {
|
|
|
18
18
|
private readonly maxSize;
|
|
19
19
|
private readonly options?;
|
|
20
20
|
constructor(maxSize?: number, options?: PlaywrightLaunchOptions);
|
|
21
|
-
acquire(): Promise<Browser>;
|
|
21
|
+
acquire(headless?: boolean): Promise<Browser>;
|
|
22
22
|
release(browser: Browser): void;
|
|
23
23
|
destroyAll(): Promise<void>;
|
|
24
24
|
get size(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/engines/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAGpF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAa1F;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzD;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA0B;gBAEvC,OAAO,SAAI,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAKpD,OAAO,
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/engines/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAGpF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAa1F;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzD;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA0B;gBAEvC,OAAO,SAAI,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAKpD,OAAO,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BzD,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -211,6 +211,38 @@ function runMigrations(db) {
|
|
|
211
211
|
CREATE INDEX IF NOT EXISTS idx_gallery_favorite ON gallery_entries(is_favorite);
|
|
212
212
|
CREATE INDEX IF NOT EXISTS idx_gallery_created ON gallery_entries(created_at);
|
|
213
213
|
`
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
version: 3,
|
|
217
|
+
sql: `
|
|
218
|
+
-- Session lock/claim for multi-agent ownership
|
|
219
|
+
ALTER TABLE sessions ADD COLUMN locked_by TEXT;
|
|
220
|
+
ALTER TABLE sessions ADD COLUMN locked_at TEXT;
|
|
221
|
+
`
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
version: 4,
|
|
225
|
+
sql: `
|
|
226
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
227
|
+
id TEXT PRIMARY KEY,
|
|
228
|
+
session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
229
|
+
event_type TEXT NOT NULL,
|
|
230
|
+
details TEXT DEFAULT '{}',
|
|
231
|
+
timestamp TEXT DEFAULT (datetime('now'))
|
|
232
|
+
);
|
|
233
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session ON session_events(session_id, timestamp);
|
|
234
|
+
`
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
version: 5,
|
|
238
|
+
sql: `
|
|
239
|
+
CREATE TABLE IF NOT EXISTS session_tags (
|
|
240
|
+
session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
241
|
+
tag TEXT NOT NULL,
|
|
242
|
+
PRIMARY KEY (session_id, tag)
|
|
243
|
+
);
|
|
244
|
+
CREATE INDEX IF NOT EXISTS idx_session_tags_tag ON session_tags(tag);
|
|
245
|
+
`
|
|
214
246
|
}
|
|
215
247
|
];
|
|
216
248
|
for (const m of migrations) {
|
|
@@ -6927,8 +6959,24 @@ function updateSessionStatus(id, status) {
|
|
|
6927
6959
|
return getSession(id);
|
|
6928
6960
|
}
|
|
6929
6961
|
function closeSession(id) {
|
|
6962
|
+
const db = getDatabase();
|
|
6963
|
+
db.prepare("UPDATE sessions SET locked_by = NULL, locked_at = NULL WHERE id = ?").run(id);
|
|
6930
6964
|
return updateSessionStatus(id, "closed");
|
|
6931
6965
|
}
|
|
6966
|
+
function getActiveSessionForAgent(agentId) {
|
|
6967
|
+
const db = getDatabase();
|
|
6968
|
+
return db.query("SELECT * FROM sessions WHERE agent_id = ? AND status = 'active' ORDER BY created_at DESC LIMIT 1").get(agentId) ?? null;
|
|
6969
|
+
}
|
|
6970
|
+
function getDefaultActiveSession() {
|
|
6971
|
+
const db = getDatabase();
|
|
6972
|
+
const rows = db.query("SELECT * FROM sessions WHERE status = 'active' ORDER BY created_at DESC LIMIT 2").all();
|
|
6973
|
+
return rows.length === 1 ? rows[0] : null;
|
|
6974
|
+
}
|
|
6975
|
+
function countActiveSessions() {
|
|
6976
|
+
const db = getDatabase();
|
|
6977
|
+
const row = db.query("SELECT COUNT(*) as count FROM sessions WHERE status = 'active'").get();
|
|
6978
|
+
return row?.count ?? 0;
|
|
6979
|
+
}
|
|
6932
6980
|
function deleteSession(id) {
|
|
6933
6981
|
const db = getDatabase();
|
|
6934
6982
|
db.prepare("DELETE FROM sessions WHERE id = ?").run(id);
|
|
@@ -7144,14 +7192,14 @@ class BrowserPool {
|
|
|
7144
7192
|
this.maxSize = maxSize;
|
|
7145
7193
|
this.options = options;
|
|
7146
7194
|
}
|
|
7147
|
-
async acquire() {
|
|
7195
|
+
async acquire(headless = true) {
|
|
7148
7196
|
const available = this.pool.find((e) => !e.inUse);
|
|
7149
7197
|
if (available) {
|
|
7150
7198
|
available.inUse = true;
|
|
7151
7199
|
return available.browser;
|
|
7152
7200
|
}
|
|
7153
7201
|
if (this.pool.length < this.maxSize) {
|
|
7154
|
-
const browser = await launchPlaywright(this.options);
|
|
7202
|
+
const browser = await launchPlaywright({ ...this.options, headless });
|
|
7155
7203
|
this.pool.push({ browser, inUse: true, createdAt: Date.now() });
|
|
7156
7204
|
return browser;
|
|
7157
7205
|
}
|
|
@@ -8163,6 +8211,20 @@ function setupDialogHandler(page, sessionId) {
|
|
|
8163
8211
|
|
|
8164
8212
|
// src/lib/session.ts
|
|
8165
8213
|
var handles = new Map;
|
|
8214
|
+
var pool = new BrowserPool(5);
|
|
8215
|
+
var SESSION_TTL_MS = parseInt(process.env["SESSION_TTL_MINUTES"] ?? "10", 10) * 60000;
|
|
8216
|
+
var ttlInterval = setInterval(async () => {
|
|
8217
|
+
const now = Date.now();
|
|
8218
|
+
for (const [id, handle] of handles) {
|
|
8219
|
+
if (now - handle.lastActivity > SESSION_TTL_MS) {
|
|
8220
|
+
try {
|
|
8221
|
+
await closeSession2(id);
|
|
8222
|
+
} catch {}
|
|
8223
|
+
}
|
|
8224
|
+
}
|
|
8225
|
+
}, 60000);
|
|
8226
|
+
if (ttlInterval.unref)
|
|
8227
|
+
ttlInterval.unref();
|
|
8166
8228
|
function createBunProxy(view) {
|
|
8167
8229
|
return view;
|
|
8168
8230
|
}
|
|
@@ -8191,11 +8253,7 @@ async function createSession2(opts = {}) {
|
|
|
8191
8253
|
const context = await browser.newContext({ viewport: opts.viewport ?? { width: 1280, height: 720 } });
|
|
8192
8254
|
page = await context.newPage();
|
|
8193
8255
|
} else {
|
|
8194
|
-
browser = await
|
|
8195
|
-
headless: opts.headless ?? true,
|
|
8196
|
-
viewport: opts.viewport,
|
|
8197
|
-
userAgent: opts.userAgent
|
|
8198
|
-
});
|
|
8256
|
+
browser = await pool.acquire(opts.headless ?? true);
|
|
8199
8257
|
page = await getPage(browser, { viewport: opts.viewport, userAgent: opts.userAgent });
|
|
8200
8258
|
}
|
|
8201
8259
|
const sessionName = opts.name ?? (opts.startUrl ? (() => {
|
|
@@ -8249,7 +8307,7 @@ async function createSession2(opts = {}) {
|
|
|
8249
8307
|
} catch {}
|
|
8250
8308
|
}
|
|
8251
8309
|
}
|
|
8252
|
-
handles.set(session.id, { browser, bunView, page, engine: bunView ? "bun" : resolvedEngine, cleanups, tokenBudget: { total: 0, used: 0 } });
|
|
8310
|
+
handles.set(session.id, { browser, bunView, page, engine: bunView ? "bun" : resolvedEngine, cleanups, tokenBudget: { total: 0, used: 0 }, lastActivity: Date.now(), autoGallery: opts.autoGallery ?? false });
|
|
8253
8311
|
if (opts.startUrl) {
|
|
8254
8312
|
try {
|
|
8255
8313
|
if (bunView) {
|
|
@@ -8275,6 +8333,7 @@ function getSessionPage(sessionId) {
|
|
|
8275
8333
|
handles.delete(sessionId);
|
|
8276
8334
|
throw new SessionNotFoundError(sessionId);
|
|
8277
8335
|
}
|
|
8336
|
+
handle.lastActivity = Date.now();
|
|
8278
8337
|
return handle.page;
|
|
8279
8338
|
}
|
|
8280
8339
|
function getSessionBunView(sessionId) {
|
|
@@ -8322,10 +8381,8 @@ async function closeSession2(sessionId) {
|
|
|
8322
8381
|
try {
|
|
8323
8382
|
await handle.page.context().close();
|
|
8324
8383
|
} catch {}
|
|
8325
|
-
|
|
8326
|
-
|
|
8327
|
-
await closeBrowser(handle.browser);
|
|
8328
|
-
} catch {}
|
|
8384
|
+
if (handle.browser)
|
|
8385
|
+
pool.release(handle.browser);
|
|
8329
8386
|
}
|
|
8330
8387
|
handles.delete(sessionId);
|
|
8331
8388
|
}
|
|
@@ -8341,6 +8398,7 @@ async function closeAllSessions() {
|
|
|
8341
8398
|
for (const [id] of handles) {
|
|
8342
8399
|
await closeSession2(id).catch(() => {});
|
|
8343
8400
|
}
|
|
8401
|
+
await pool.destroyAll();
|
|
8344
8402
|
}
|
|
8345
8403
|
function getSessionByName2(name) {
|
|
8346
8404
|
return getSessionByName(name);
|
|
@@ -8352,6 +8410,48 @@ function getTokenBudget(sessionId) {
|
|
|
8352
8410
|
const handle = handles.get(sessionId);
|
|
8353
8411
|
return handle ? handle.tokenBudget : null;
|
|
8354
8412
|
}
|
|
8413
|
+
function getActiveSessionForAgent2(agentId) {
|
|
8414
|
+
const session = getActiveSessionForAgent(agentId);
|
|
8415
|
+
if (!session)
|
|
8416
|
+
return null;
|
|
8417
|
+
const handle = handles.get(session.id);
|
|
8418
|
+
if (!handle)
|
|
8419
|
+
return null;
|
|
8420
|
+
try {
|
|
8421
|
+
if (handle.bunView)
|
|
8422
|
+
handle.bunView.url();
|
|
8423
|
+
else
|
|
8424
|
+
handle.page.url();
|
|
8425
|
+
} catch {
|
|
8426
|
+
handles.delete(session.id);
|
|
8427
|
+
return null;
|
|
8428
|
+
}
|
|
8429
|
+
return { session, page: handle.page };
|
|
8430
|
+
}
|
|
8431
|
+
function getDefaultSession() {
|
|
8432
|
+
const session = getDefaultActiveSession();
|
|
8433
|
+
if (!session)
|
|
8434
|
+
return null;
|
|
8435
|
+
const handle = handles.get(session.id);
|
|
8436
|
+
if (!handle)
|
|
8437
|
+
return null;
|
|
8438
|
+
try {
|
|
8439
|
+
if (handle.bunView)
|
|
8440
|
+
handle.bunView.url();
|
|
8441
|
+
else
|
|
8442
|
+
handle.page.url();
|
|
8443
|
+
} catch {
|
|
8444
|
+
handles.delete(session.id);
|
|
8445
|
+
return null;
|
|
8446
|
+
}
|
|
8447
|
+
return { session, page: handle.page };
|
|
8448
|
+
}
|
|
8449
|
+
function isAutoGallery(sessionId) {
|
|
8450
|
+
return handles.get(sessionId)?.autoGallery ?? false;
|
|
8451
|
+
}
|
|
8452
|
+
function countActiveSessions2() {
|
|
8453
|
+
return countActiveSessions();
|
|
8454
|
+
}
|
|
8355
8455
|
// src/lib/snapshot.ts
|
|
8356
8456
|
var lastSnapshots = new Map;
|
|
8357
8457
|
var sessionRefMaps = new Map;
|
|
@@ -9491,6 +9591,7 @@ export {
|
|
|
9491
9591
|
isLightpandaAvailable,
|
|
9492
9592
|
isEngineAvailable,
|
|
9493
9593
|
isBunSession,
|
|
9594
|
+
isAutoGallery,
|
|
9494
9595
|
isAgentStale,
|
|
9495
9596
|
inferUseCase,
|
|
9496
9597
|
hoverRef,
|
|
@@ -9529,6 +9630,7 @@ export {
|
|
|
9529
9630
|
getLastHeartbeat,
|
|
9530
9631
|
getIndexedDB,
|
|
9531
9632
|
getHTML,
|
|
9633
|
+
getDefaultSession,
|
|
9532
9634
|
getDatabase,
|
|
9533
9635
|
getDataDir,
|
|
9534
9636
|
getCrawlResult,
|
|
@@ -9539,6 +9641,7 @@ export {
|
|
|
9539
9641
|
getAgentByName,
|
|
9540
9642
|
getAgent,
|
|
9541
9643
|
getActiveSessions,
|
|
9644
|
+
getActiveSessionForAgent2 as getActiveSessionForAgent,
|
|
9542
9645
|
getActiveAgents,
|
|
9543
9646
|
generatePDF,
|
|
9544
9647
|
findElements,
|
|
@@ -9574,6 +9677,7 @@ export {
|
|
|
9574
9677
|
createProject,
|
|
9575
9678
|
createCrawlResult,
|
|
9576
9679
|
crawl,
|
|
9680
|
+
countActiveSessions2 as countActiveSessions,
|
|
9577
9681
|
connectLightpanda,
|
|
9578
9682
|
closeSession2 as closeSession,
|
|
9579
9683
|
closePage,
|
|
@@ -9593,6 +9697,7 @@ export {
|
|
|
9593
9697
|
checkRef,
|
|
9594
9698
|
checkBox,
|
|
9595
9699
|
capturePageErrors,
|
|
9700
|
+
pool as browserPool,
|
|
9596
9701
|
attachPageListeners,
|
|
9597
9702
|
addInterceptRule,
|
|
9598
9703
|
UseCase,
|
package/dist/lib/session.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Browser, Page } from "playwright";
|
|
2
2
|
import type { Session, SessionOptions, SessionStatus } from "../types/index.js";
|
|
3
3
|
import { BrowserEngine } from "../types/index.js";
|
|
4
|
+
import { BrowserPool } from "../engines/playwright.js";
|
|
4
5
|
import { BunWebViewSession } from "../engines/bun-webview.js";
|
|
6
|
+
declare const pool: BrowserPool;
|
|
5
7
|
export interface CreateSessionResult {
|
|
6
8
|
session: Session;
|
|
7
9
|
page: Page;
|
|
@@ -22,10 +24,15 @@ export declare function listSessions(filter?: {
|
|
|
22
24
|
}): Session[];
|
|
23
25
|
export declare function getActiveSessions(): Session[];
|
|
24
26
|
export declare function closeAllSessions(): Promise<void>;
|
|
27
|
+
export { pool as browserPool };
|
|
25
28
|
export declare function getSessionByName(name: string): Session | null;
|
|
26
29
|
export declare function renameSession(id: string, name: string): Session;
|
|
27
30
|
export declare function getTokenBudget(sessionId: string): {
|
|
28
31
|
total: number;
|
|
29
32
|
used: number;
|
|
30
33
|
} | null;
|
|
34
|
+
export declare function getActiveSessionForAgent(agentId: string): CreateSessionResult | null;
|
|
35
|
+
export declare function getDefaultSession(): CreateSessionResult | null;
|
|
36
|
+
export declare function isAutoGallery(sessionId: string): boolean;
|
|
37
|
+
export declare function countActiveSessions(): number;
|
|
31
38
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAA0F,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE/I,OAAO,EAAE,iBAAiB,EAAyB,MAAM,2BAA2B,CAAC;AAuBrF,QAAA,MAAM,IAAI,aAAqB,CAAC;AA0BhC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmG3F;AAID,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAkBtD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAE7E;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK5D;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAIjE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAIlE;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAetE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAE/F;AAED,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,CAE7C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD;AAED,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC;AAE/B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,kBAE5C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAErD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAcpF;AAID,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAa9D;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|