@tangle-network/browser-agent-driver 0.8.7 → 0.10.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 +2 -2
- package/dist/cli-ui.d.ts.map +1 -1
- package/dist/cli-ui.js +12 -0
- package/dist/cli-ui.js.map +1 -1
- package/dist/cli.js +92 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/design-audit.js +2 -2
- package/dist/design-audit.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/knowledge.d.ts +25 -9
- package/dist/memory/knowledge.d.ts.map +1 -1
- package/dist/memory/knowledge.js +94 -28
- package/dist/memory/knowledge.js.map +1 -1
- package/dist/memory/run-registry.d.ts +85 -0
- package/dist/memory/run-registry.d.ts.map +1 -0
- package/dist/memory/run-registry.js +144 -0
- package/dist/memory/run-registry.js.map +1 -0
- package/dist/multi-actor.d.ts +3 -3
- package/dist/multi-actor.d.ts.map +1 -1
- package/dist/multi-actor.js +3 -3
- package/dist/multi-actor.js.map +1 -1
- package/dist/runner/index.d.ts +2 -2
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/index.js +1 -1
- package/dist/runner/index.js.map +1 -1
- package/dist/runner/runner.d.ts +9 -5
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +71 -22
- package/dist/runner/runner.js.map +1 -1
- package/dist/runner.d.ts +2 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/test-runner.d.ts +1 -0
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +26 -2
- package/dist/test-runner.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { getPageMetadata } from './drivers/cdp-page-state.js';
|
|
|
18
18
|
export type { PageMetadata } from './drivers/cdp-page-state.js';
|
|
19
19
|
export { Brain } from './brain/index.js';
|
|
20
20
|
export type { BrainDecision, QualityEvaluation } from './brain/index.js';
|
|
21
|
-
export {
|
|
22
|
-
export type {
|
|
21
|
+
export { BrowserAgent, runBrowserAgent } from './runner.js';
|
|
22
|
+
export type { BrowserAgentOptions } from './runner.js';
|
|
23
23
|
export { TestRunner } from './test-runner.js';
|
|
24
24
|
export type { TestRunnerOptions } from './test-runner.js';
|
|
25
25
|
export { generateReport, compareReports } from './test-report.js';
|
|
@@ -37,13 +37,15 @@ export { detectSupervisorSignal, formatSupervisorSignal } from './supervisor/pol
|
|
|
37
37
|
export { requestSupervisorDirective } from './supervisor/critic.js';
|
|
38
38
|
export { ProjectStore } from './memory/project-store.js';
|
|
39
39
|
export { AppKnowledge } from './memory/knowledge.js';
|
|
40
|
-
export type { Fact, KnowledgeData } from './memory/knowledge.js';
|
|
40
|
+
export type { Fact, Session, KnowledgeData } from './memory/knowledge.js';
|
|
41
41
|
export { SelectorCache } from './memory/selectors.js';
|
|
42
42
|
export type { SelectorEntry } from './memory/selectors.js';
|
|
43
43
|
export { TrajectoryStore } from './memory/store.js';
|
|
44
44
|
export type { TrajectoryStoreOptions } from './memory/store.js';
|
|
45
45
|
export { TrajectoryAnalyzer } from './memory/analyzer.js';
|
|
46
46
|
export type { RunAnalysis, ActionPattern, GoalPattern, TurnWaste } from './memory/analyzer.js';
|
|
47
|
+
export { RunRegistry } from './memory/run-registry.js';
|
|
48
|
+
export type { RunManifest, RunStatus, RunFilters } from './memory/run-registry.js';
|
|
47
49
|
export { defineConfig, defineTests, loadConfig, mergeConfig, toAgentConfig } from './config.js';
|
|
48
50
|
export type { DriverConfig } from './config.js';
|
|
49
51
|
export { buildBrowserLaunchPlan } from './browser-launch.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1H,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ export { getPageMetadata } from './drivers/cdp-page-state.js';
|
|
|
13
13
|
// Brain (LLM decision engine)
|
|
14
14
|
export { Brain } from './brain/index.js';
|
|
15
15
|
// Agent runner (core observe -> decide -> execute loop)
|
|
16
|
-
export {
|
|
16
|
+
export { BrowserAgent, runBrowserAgent } from './runner.js';
|
|
17
17
|
// Test runner (suite orchestration, verification, parallelism)
|
|
18
18
|
export { TestRunner } from './test-runner.js';
|
|
19
19
|
export { generateReport, compareReports } from './test-report.js';
|
|
@@ -38,6 +38,7 @@ export { AppKnowledge } from './memory/knowledge.js';
|
|
|
38
38
|
export { SelectorCache } from './memory/selectors.js';
|
|
39
39
|
export { TrajectoryStore } from './memory/store.js';
|
|
40
40
|
export { TrajectoryAnalyzer } from './memory/analyzer.js';
|
|
41
|
+
export { RunRegistry } from './memory/run-registry.js';
|
|
41
42
|
// Configuration
|
|
42
43
|
export { defineConfig, defineTests, loadConfig, mergeConfig, toAgentConfig } from './config.js';
|
|
43
44
|
export { buildBrowserLaunchPlan } from './browser-launch.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2DH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1H,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,8BAA8B;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,wDAAwD;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* App Knowledge — domain-scoped fact accumulation with confidence scoring
|
|
2
|
+
* App Knowledge — domain-scoped fact accumulation with confidence scoring,
|
|
3
|
+
* plus rolling session history for cross-run continuity.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* repeated confirmation and decay when contradicted.
|
|
5
|
+
* Facts: structured observations (timing, selector, pattern, quirk) that
|
|
6
|
+
* gain confidence with repeated confirmation and decay when contradicted.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - selector: reliable selectors for specific elements
|
|
11
|
-
* - pattern: multi-step interaction patterns (auth flows, navigation)
|
|
12
|
-
* - quirk: app-specific behaviors (shadow DOM, lazy loading, etc.)
|
|
8
|
+
* Sessions: ordered log of what the agent accomplished on this site.
|
|
9
|
+
* Enables continuation — "now add feature X" knows what was already built.
|
|
13
10
|
*/
|
|
14
11
|
export interface Fact {
|
|
15
12
|
type: 'timing' | 'selector' | 'pattern' | 'quirk';
|
|
@@ -19,9 +16,24 @@ export interface Fact {
|
|
|
19
16
|
sources: number;
|
|
20
17
|
lastSeen: string;
|
|
21
18
|
}
|
|
19
|
+
export interface Session {
|
|
20
|
+
/** Orchestrator-provided or auto-generated ID */
|
|
21
|
+
id: string;
|
|
22
|
+
/** The goal that was given */
|
|
23
|
+
goal: string;
|
|
24
|
+
/** Agent's own natural language result or failure reason */
|
|
25
|
+
outcome: string;
|
|
26
|
+
success: boolean;
|
|
27
|
+
/** Where the browser ended up */
|
|
28
|
+
finalUrl: string;
|
|
29
|
+
timestamp: string;
|
|
30
|
+
turnsUsed: number;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
}
|
|
22
33
|
export interface KnowledgeData {
|
|
23
34
|
domain: string;
|
|
24
35
|
facts: Fact[];
|
|
36
|
+
sessions: Session[];
|
|
25
37
|
updatedAt: string;
|
|
26
38
|
}
|
|
27
39
|
export declare class AppKnowledge {
|
|
@@ -46,6 +58,10 @@ export declare class AppKnowledge {
|
|
|
46
58
|
key: string;
|
|
47
59
|
value: string;
|
|
48
60
|
}>): void;
|
|
61
|
+
/** Get all sessions, newest first */
|
|
62
|
+
getSessions(): Session[];
|
|
63
|
+
/** Append a session to the rolling log. Keeps the last MAX_SESSIONS entries. */
|
|
64
|
+
recordSession(session: Session): void;
|
|
49
65
|
/** Format knowledge for injection into brain context */
|
|
50
66
|
formatForBrain(): string;
|
|
51
67
|
/** Persist to disk */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/memory/knowledge.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/memory/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAgB;gBAEhB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOxC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,SAAM,GAAG,IAAI,EAAE;IAIrC,mCAAmC;IACnC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,SAAM,GAAG,IAAI,EAAE;IAI/D,8CAA8C;IAC9C,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI1D;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA+BhE,+DAA+D;IAC/D,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAQnF,qCAAqC;IACrC,WAAW,IAAI,OAAO,EAAE;IAIxB,gFAAgF;IAChF,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAarC,wDAAwD;IACxD,cAAc,IAAI,MAAM;IAmDxB,sBAAsB;IACtB,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,IAAI;CAkCb"}
|
package/dist/memory/knowledge.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* App Knowledge — domain-scoped fact accumulation with confidence scoring
|
|
2
|
+
* App Knowledge — domain-scoped fact accumulation with confidence scoring,
|
|
3
|
+
* plus rolling session history for cross-run continuity.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* repeated confirmation and decay when contradicted.
|
|
5
|
+
* Facts: structured observations (timing, selector, pattern, quirk) that
|
|
6
|
+
* gain confidence with repeated confirmation and decay when contradicted.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - selector: reliable selectors for specific elements
|
|
11
|
-
* - pattern: multi-step interaction patterns (auth flows, navigation)
|
|
12
|
-
* - quirk: app-specific behaviors (shadow DOM, lazy loading, etc.)
|
|
8
|
+
* Sessions: ordered log of what the agent accomplished on this site.
|
|
9
|
+
* Enables continuation — "now add feature X" knows what was already built.
|
|
13
10
|
*/
|
|
14
11
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
12
|
+
const MAX_SESSIONS = 5;
|
|
15
13
|
export class AppKnowledge {
|
|
16
14
|
path;
|
|
17
15
|
data;
|
|
@@ -19,6 +17,7 @@ export class AppKnowledge {
|
|
|
19
17
|
this.path = path;
|
|
20
18
|
this.data = this.load(domain);
|
|
21
19
|
}
|
|
20
|
+
// ── Facts ──
|
|
22
21
|
/** Get all facts with confidence above threshold */
|
|
23
22
|
getFacts(minConfidence = 0.3) {
|
|
24
23
|
return this.data.facts.filter(f => f.confidence >= minConfidence);
|
|
@@ -41,13 +40,11 @@ export class AppKnowledge {
|
|
|
41
40
|
const now = new Date().toISOString();
|
|
42
41
|
if (existing) {
|
|
43
42
|
if (existing.value === value) {
|
|
44
|
-
// Confirm — boost confidence (asymptotic toward 1.0)
|
|
45
43
|
existing.confidence = Math.min(1.0, existing.confidence + (1 - existing.confidence) * 0.2);
|
|
46
44
|
existing.sources++;
|
|
47
45
|
existing.lastSeen = now;
|
|
48
46
|
}
|
|
49
47
|
else {
|
|
50
|
-
// Contradict — decay old, add new
|
|
51
48
|
existing.confidence *= 0.5;
|
|
52
49
|
this.data.facts.push({
|
|
53
50
|
type, key, value,
|
|
@@ -65,7 +62,6 @@ export class AppKnowledge {
|
|
|
65
62
|
lastSeen: now,
|
|
66
63
|
});
|
|
67
64
|
}
|
|
68
|
-
// Prune low-confidence facts
|
|
69
65
|
this.data.facts = this.data.facts.filter(f => f.confidence >= 0.1);
|
|
70
66
|
this.data.updatedAt = now;
|
|
71
67
|
}
|
|
@@ -75,25 +71,71 @@ export class AppKnowledge {
|
|
|
75
71
|
this.recordFact(f.type, f.key, f.value);
|
|
76
72
|
}
|
|
77
73
|
}
|
|
74
|
+
// ── Sessions ──
|
|
75
|
+
/** Get all sessions, newest first */
|
|
76
|
+
getSessions() {
|
|
77
|
+
return [...this.data.sessions].sort((a, b) => b.timestamp.localeCompare(a.timestamp));
|
|
78
|
+
}
|
|
79
|
+
/** Append a session to the rolling log. Keeps the last MAX_SESSIONS entries. */
|
|
80
|
+
recordSession(session) {
|
|
81
|
+
this.data.sessions.push(session);
|
|
82
|
+
// Keep only the most recent sessions
|
|
83
|
+
if (this.data.sessions.length > MAX_SESSIONS) {
|
|
84
|
+
this.data.sessions = this.data.sessions
|
|
85
|
+
.sort((a, b) => b.timestamp.localeCompare(a.timestamp))
|
|
86
|
+
.slice(0, MAX_SESSIONS);
|
|
87
|
+
}
|
|
88
|
+
this.data.updatedAt = new Date().toISOString();
|
|
89
|
+
}
|
|
90
|
+
// ── Brain injection ──
|
|
78
91
|
/** Format knowledge for injection into brain context */
|
|
79
92
|
formatForBrain() {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
const lines = [];
|
|
94
|
+
// Sessions first — most valuable for continuations
|
|
95
|
+
const sessions = this.getSessions();
|
|
96
|
+
if (sessions.length > 0) {
|
|
97
|
+
const count = sessions.length;
|
|
98
|
+
lines.push(`SESSION HISTORY (${count} previous run${count !== 1 ? 's' : ''} on this site):`);
|
|
99
|
+
for (let i = 0; i < sessions.length; i++) {
|
|
100
|
+
const s = sessions[i];
|
|
101
|
+
const icon = s.success ? '✓' : '✗';
|
|
102
|
+
const ts = s.timestamp.slice(0, 16).replace('T', ' ');
|
|
103
|
+
const stats = `${s.turnsUsed} turns, ${Math.round(s.durationMs / 1000)}s`;
|
|
104
|
+
if (i < 2) {
|
|
105
|
+
// Recent sessions: full detail
|
|
106
|
+
lines.push(`[${ts}] ${icon} "${s.goal}" → ${s.outcome} (${stats})`);
|
|
107
|
+
if (s.finalUrl)
|
|
108
|
+
lines.push(` Final URL: ${s.finalUrl}`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Older sessions: one line
|
|
112
|
+
lines.push(`[${ts}] ${icon} "${s.goal}" → ${s.outcome.slice(0, 80)}${s.outcome.length > 80 ? '…' : ''} (${stats})`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
88
115
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
lines.push(
|
|
116
|
+
// Facts
|
|
117
|
+
const facts = this.getFacts(0.5);
|
|
118
|
+
const nonSessionFacts = facts;
|
|
119
|
+
if (nonSessionFacts.length > 0) {
|
|
120
|
+
if (lines.length > 0)
|
|
121
|
+
lines.push('');
|
|
122
|
+
lines.push('APP KNOWLEDGE (learned from previous runs):');
|
|
123
|
+
const grouped = new Map();
|
|
124
|
+
for (const f of nonSessionFacts) {
|
|
125
|
+
const group = grouped.get(f.type) || [];
|
|
126
|
+
group.push(f);
|
|
127
|
+
grouped.set(f.type, group);
|
|
128
|
+
}
|
|
129
|
+
for (const [type, typeFacts] of grouped) {
|
|
130
|
+
lines.push(` ${type.toUpperCase()}:`);
|
|
131
|
+
for (const f of typeFacts.sort((a, b) => b.confidence - a.confidence)) {
|
|
132
|
+
const conf = (f.confidence * 100).toFixed(0);
|
|
133
|
+
lines.push(` - ${f.key}: ${f.value} (${conf}% confidence, ${f.sources} observations)`);
|
|
134
|
+
}
|
|
95
135
|
}
|
|
96
136
|
}
|
|
137
|
+
if (lines.length === 0)
|
|
138
|
+
return '';
|
|
97
139
|
return lines.join('\n');
|
|
98
140
|
}
|
|
99
141
|
/** Persist to disk */
|
|
@@ -103,13 +145,37 @@ export class AppKnowledge {
|
|
|
103
145
|
load(domain) {
|
|
104
146
|
if (existsSync(this.path)) {
|
|
105
147
|
try {
|
|
106
|
-
|
|
148
|
+
const raw = JSON.parse(readFileSync(this.path, 'utf-8'));
|
|
149
|
+
// Migrate: old format may not have sessions array, or may have
|
|
150
|
+
// session-type facts from the previous implementation
|
|
151
|
+
if (!raw.sessions)
|
|
152
|
+
raw.sessions = [];
|
|
153
|
+
// Migrate session-type facts from previous implementation to sessions array
|
|
154
|
+
if (raw.facts) {
|
|
155
|
+
const sessionFacts = raw.facts.filter(f => f.type === 'session');
|
|
156
|
+
if (sessionFacts.length > 0) {
|
|
157
|
+
for (const sf of sessionFacts) {
|
|
158
|
+
raw.sessions.push({
|
|
159
|
+
id: `migrated_${Date.now()}`,
|
|
160
|
+
goal: sf.key === 'latest' ? '(previous run)' : sf.key,
|
|
161
|
+
outcome: sf.value,
|
|
162
|
+
success: true,
|
|
163
|
+
finalUrl: '',
|
|
164
|
+
timestamp: sf.lastSeen,
|
|
165
|
+
turnsUsed: 0,
|
|
166
|
+
durationMs: 0,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
raw.facts = raw.facts.filter(f => f.type !== 'session');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return raw;
|
|
107
173
|
}
|
|
108
174
|
catch {
|
|
109
175
|
// Corrupted file — start fresh
|
|
110
176
|
}
|
|
111
177
|
}
|
|
112
|
-
return { domain, facts: [], updatedAt: new Date().toISOString() };
|
|
178
|
+
return { domain, facts: [], sessions: [], updatedAt: new Date().toISOString() };
|
|
113
179
|
}
|
|
114
180
|
}
|
|
115
181
|
//# sourceMappingURL=knowledge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/memory/knowledge.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/memory/knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Registry — orchestration-facing run manifest storage.
|
|
3
|
+
*
|
|
4
|
+
* Provides a structured API for external orchestrators (Foreman) to
|
|
5
|
+
* enumerate, inspect, resume, and fork browser agent runs.
|
|
6
|
+
*
|
|
7
|
+
* Separate from AppKnowledge: knowledge.json is the LLM-facing memory
|
|
8
|
+
* substrate, runs/*.json is the orchestration-facing substrate.
|
|
9
|
+
*/
|
|
10
|
+
export type RunStatus = 'running' | 'completed' | 'failed';
|
|
11
|
+
export interface RunManifest {
|
|
12
|
+
runId: string;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
parentRunId?: string;
|
|
15
|
+
status: RunStatus;
|
|
16
|
+
goal: string;
|
|
17
|
+
domain: string;
|
|
18
|
+
startUrl?: string;
|
|
19
|
+
finalUrl?: string;
|
|
20
|
+
currentUrl?: string;
|
|
21
|
+
startedAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
completedAt?: string;
|
|
24
|
+
success?: boolean;
|
|
25
|
+
summary?: string;
|
|
26
|
+
artifactPaths: string[];
|
|
27
|
+
turnCount: number;
|
|
28
|
+
result?: string;
|
|
29
|
+
reason?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface RunFilters {
|
|
32
|
+
domain?: string;
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
status?: RunStatus;
|
|
35
|
+
limit?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare class RunRegistry {
|
|
38
|
+
private dir;
|
|
39
|
+
constructor(memoryDir: string);
|
|
40
|
+
/** Create a new run manifest at start. Returns the runId. */
|
|
41
|
+
startRun(opts: {
|
|
42
|
+
runId: string;
|
|
43
|
+
sessionId?: string;
|
|
44
|
+
parentRunId?: string;
|
|
45
|
+
goal: string;
|
|
46
|
+
domain: string;
|
|
47
|
+
startUrl?: string;
|
|
48
|
+
}): string;
|
|
49
|
+
/** Update a run manifest (e.g., on completion or failure). */
|
|
50
|
+
updateRun(runId: string, updates: Partial<Omit<RunManifest, 'runId' | 'startedAt'>>): RunManifest | undefined;
|
|
51
|
+
/** Complete a run with final results. */
|
|
52
|
+
completeRun(runId: string, result: {
|
|
53
|
+
success: boolean;
|
|
54
|
+
finalUrl?: string;
|
|
55
|
+
summary?: string;
|
|
56
|
+
result?: string;
|
|
57
|
+
reason?: string;
|
|
58
|
+
turnCount: number;
|
|
59
|
+
artifactPaths?: string[];
|
|
60
|
+
}): RunManifest | undefined;
|
|
61
|
+
/** Get a single run by ID. */
|
|
62
|
+
getRun(runId: string): RunManifest | undefined;
|
|
63
|
+
/** List runs matching optional filters, newest first. */
|
|
64
|
+
listRuns(filters?: RunFilters): RunManifest[];
|
|
65
|
+
/** Build a resume scenario from a previous run. */
|
|
66
|
+
buildResumeScenario(runId: string, newGoal?: string): {
|
|
67
|
+
goal: string;
|
|
68
|
+
startUrl: string;
|
|
69
|
+
sessionId?: string;
|
|
70
|
+
parentRunId: string;
|
|
71
|
+
} | undefined;
|
|
72
|
+
/** Build a fork scenario — new sessionId, inherits startUrl from parent. */
|
|
73
|
+
buildForkScenario(runId: string, goal: string): {
|
|
74
|
+
goal: string;
|
|
75
|
+
startUrl: string;
|
|
76
|
+
sessionId: string;
|
|
77
|
+
parentRunId: string;
|
|
78
|
+
} | undefined;
|
|
79
|
+
/** Generate a unique run ID. */
|
|
80
|
+
static generateRunId(): string;
|
|
81
|
+
private manifestPath;
|
|
82
|
+
private write;
|
|
83
|
+
private ensureDir;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=run-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-registry.d.ts","sourceRoot":"","sources":["../../src/memory/run-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Registry — orchestration-facing run manifest storage.
|
|
3
|
+
*
|
|
4
|
+
* Provides a structured API for external orchestrators (Foreman) to
|
|
5
|
+
* enumerate, inspect, resume, and fork browser agent runs.
|
|
6
|
+
*
|
|
7
|
+
* Separate from AppKnowledge: knowledge.json is the LLM-facing memory
|
|
8
|
+
* substrate, runs/*.json is the orchestration-facing substrate.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
export class RunRegistry {
|
|
13
|
+
dir;
|
|
14
|
+
constructor(memoryDir) {
|
|
15
|
+
this.dir = join(memoryDir, 'agent-runs');
|
|
16
|
+
}
|
|
17
|
+
/** Create a new run manifest at start. Returns the runId. */
|
|
18
|
+
startRun(opts) {
|
|
19
|
+
this.ensureDir();
|
|
20
|
+
const manifest = {
|
|
21
|
+
runId: opts.runId,
|
|
22
|
+
sessionId: opts.sessionId,
|
|
23
|
+
parentRunId: opts.parentRunId,
|
|
24
|
+
status: 'running',
|
|
25
|
+
goal: opts.goal,
|
|
26
|
+
domain: opts.domain,
|
|
27
|
+
startUrl: opts.startUrl,
|
|
28
|
+
startedAt: new Date().toISOString(),
|
|
29
|
+
updatedAt: new Date().toISOString(),
|
|
30
|
+
artifactPaths: [],
|
|
31
|
+
turnCount: 0,
|
|
32
|
+
};
|
|
33
|
+
this.write(manifest);
|
|
34
|
+
return opts.runId;
|
|
35
|
+
}
|
|
36
|
+
/** Update a run manifest (e.g., on completion or failure). */
|
|
37
|
+
updateRun(runId, updates) {
|
|
38
|
+
const manifest = this.getRun(runId);
|
|
39
|
+
if (!manifest)
|
|
40
|
+
return undefined;
|
|
41
|
+
Object.assign(manifest, updates, { updatedAt: new Date().toISOString() });
|
|
42
|
+
this.write(manifest);
|
|
43
|
+
return manifest;
|
|
44
|
+
}
|
|
45
|
+
/** Complete a run with final results. */
|
|
46
|
+
completeRun(runId, result) {
|
|
47
|
+
return this.updateRun(runId, {
|
|
48
|
+
status: result.success ? 'completed' : 'failed',
|
|
49
|
+
success: result.success,
|
|
50
|
+
finalUrl: result.finalUrl,
|
|
51
|
+
summary: result.summary,
|
|
52
|
+
result: result.result,
|
|
53
|
+
reason: result.reason,
|
|
54
|
+
turnCount: result.turnCount,
|
|
55
|
+
artifactPaths: result.artifactPaths || [],
|
|
56
|
+
completedAt: new Date().toISOString(),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** Get a single run by ID. */
|
|
60
|
+
getRun(runId) {
|
|
61
|
+
const path = this.manifestPath(runId);
|
|
62
|
+
if (!existsSync(path))
|
|
63
|
+
return undefined;
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** List runs matching optional filters, newest first. */
|
|
72
|
+
listRuns(filters) {
|
|
73
|
+
if (!existsSync(this.dir))
|
|
74
|
+
return [];
|
|
75
|
+
const files = readdirSync(this.dir).filter(f => f.endsWith('.json'));
|
|
76
|
+
let manifests = [];
|
|
77
|
+
for (const file of files) {
|
|
78
|
+
try {
|
|
79
|
+
const m = JSON.parse(readFileSync(join(this.dir, file), 'utf-8'));
|
|
80
|
+
manifests.push(m);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// skip corrupted
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (filters?.domain) {
|
|
87
|
+
manifests = manifests.filter(m => m.domain === filters.domain);
|
|
88
|
+
}
|
|
89
|
+
if (filters?.sessionId) {
|
|
90
|
+
manifests = manifests.filter(m => m.sessionId === filters.sessionId);
|
|
91
|
+
}
|
|
92
|
+
if (filters?.status) {
|
|
93
|
+
manifests = manifests.filter(m => m.status === filters.status);
|
|
94
|
+
}
|
|
95
|
+
manifests.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
96
|
+
if (filters?.limit && filters.limit > 0) {
|
|
97
|
+
manifests = manifests.slice(0, filters.limit);
|
|
98
|
+
}
|
|
99
|
+
return manifests;
|
|
100
|
+
}
|
|
101
|
+
/** Build a resume scenario from a previous run. */
|
|
102
|
+
buildResumeScenario(runId, newGoal) {
|
|
103
|
+
const manifest = this.getRun(runId);
|
|
104
|
+
if (!manifest)
|
|
105
|
+
return undefined;
|
|
106
|
+
return {
|
|
107
|
+
goal: newGoal || manifest.goal,
|
|
108
|
+
startUrl: manifest.finalUrl || manifest.startUrl || '',
|
|
109
|
+
sessionId: manifest.sessionId,
|
|
110
|
+
parentRunId: manifest.runId,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Build a fork scenario — new sessionId, inherits startUrl from parent. */
|
|
114
|
+
buildForkScenario(runId, goal) {
|
|
115
|
+
const manifest = this.getRun(runId);
|
|
116
|
+
if (!manifest)
|
|
117
|
+
return undefined;
|
|
118
|
+
return {
|
|
119
|
+
goal,
|
|
120
|
+
startUrl: manifest.finalUrl || manifest.startUrl || '',
|
|
121
|
+
sessionId: `fork_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
122
|
+
parentRunId: manifest.runId,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/** Generate a unique run ID. */
|
|
126
|
+
static generateRunId() {
|
|
127
|
+
return `run_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
128
|
+
}
|
|
129
|
+
manifestPath(runId) {
|
|
130
|
+
// Sanitize runId for filesystem safety
|
|
131
|
+
const safe = runId.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
132
|
+
return join(this.dir, `${safe}.json`);
|
|
133
|
+
}
|
|
134
|
+
write(manifest) {
|
|
135
|
+
this.ensureDir();
|
|
136
|
+
writeFileSync(this.manifestPath(manifest.runId), JSON.stringify(manifest, null, 2));
|
|
137
|
+
}
|
|
138
|
+
ensureDir() {
|
|
139
|
+
if (!existsSync(this.dir)) {
|
|
140
|
+
mkdirSync(this.dir, { recursive: true });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=run-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-registry.js","sourceRoot":"","sources":["../../src/memory/run-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAgC3B,MAAM,OAAO,WAAW;IACd,GAAG,CAAQ;IAEnB,YAAY,SAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IAC1C,CAAC;IAED,6DAA6D;IAC7D,QAAQ,CAAC,IAOR;QACC,IAAI,CAAC,SAAS,EAAE,CAAA;QAChB,MAAM,QAAQ,GAAgB;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,CAAC;SACb,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,KAAa,EAAE,OAA0D;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACpB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,yCAAyC;IACzC,WAAW,CAAC,KAAa,EAAE,MAQ1B;QACC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAC3B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;YAC/C,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;YACzC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAA;IACJ,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,KAAa;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;QACvC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAgB,CAAA;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,QAAQ,CAAC,OAAoB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;QACpE,IAAI,SAAS,GAAkB,EAAE,CAAA;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAgB,CAAA;gBAChF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;QACtE,CAAC;QACD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QAChE,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QAEhE,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,mDAAmD;IACnD,mBAAmB,CAAC,KAAa,EAAE,OAAgB;QAMjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/B,OAAO;YACL,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI;YAC9B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE;YACtD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,WAAW,EAAE,QAAQ,CAAC,KAAK;SAC5B,CAAA;IACH,CAAC;IAED,4EAA4E;IAC5E,iBAAiB,CAAC,KAAa,EAAE,IAAY;QAM3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/B,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE;YACtD,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACzE,WAAW,EAAE,QAAQ,CAAC,KAAK;SAC5B,CAAA;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,aAAa;QAClB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACtE,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,uCAAuC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAA;IACvC,CAAC;IAEO,KAAK,CAAC,QAAqB;QACjC,IAAI,CAAC,SAAS,EAAE,CAAA;QAChB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACrF,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;CACF"}
|
package/dist/multi-actor.d.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
import type { Browser, BrowserContext, BrowserContextOptions, Page } from 'playwright';
|
|
30
30
|
import { PlaywrightDriver } from './drivers/playwright.js';
|
|
31
31
|
import type { PlaywrightDriverOptions } from './drivers/playwright.js';
|
|
32
|
-
import {
|
|
32
|
+
import { BrowserAgent } from './runner.js';
|
|
33
33
|
import type { Scenario, AgentConfig, AgentResult, Turn } from './types.js';
|
|
34
34
|
import type { ProjectStore } from './memory/project-store.js';
|
|
35
35
|
export interface ActorConfig {
|
|
@@ -61,7 +61,7 @@ export declare class Actor {
|
|
|
61
61
|
private _driver;
|
|
62
62
|
private _runner;
|
|
63
63
|
private _results;
|
|
64
|
-
constructor(name: string, _context: BrowserContext, _page: Page, _driver: PlaywrightDriver, _runner:
|
|
64
|
+
constructor(name: string, _context: BrowserContext, _page: Page, _driver: PlaywrightDriver, _runner: BrowserAgent);
|
|
65
65
|
/** Run a scenario with this actor's agent. Results accumulate across calls. */
|
|
66
66
|
run(scenario: Scenario): Promise<AgentResult>;
|
|
67
67
|
/** Raw Playwright page for direct operations / assertions */
|
|
@@ -82,7 +82,7 @@ export declare class MultiActorSession {
|
|
|
82
82
|
/**
|
|
83
83
|
* Create a session with isolated browser contexts per actor.
|
|
84
84
|
*
|
|
85
|
-
* 1. Creates BrowserContext + Page + PlaywrightDriver +
|
|
85
|
+
* 1. Creates BrowserContext + Page + PlaywrightDriver + BrowserAgent per actor
|
|
86
86
|
* 2. Calls setup() hooks if provided
|
|
87
87
|
* 3. Returns session ready for orchestration
|
|
88
88
|
*/
|