@creatoria/miniapp-mcp 0.1.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 +469 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +144 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +73 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +118 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +50 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +189 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/core/element-ref.d.ts +44 -0
- package/dist/core/element-ref.d.ts.map +1 -0
- package/dist/core/element-ref.js +213 -0
- package/dist/core/element-ref.js.map +1 -0
- package/dist/core/logger.d.ts +55 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +378 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/output.d.ts +21 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +56 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/report-generator.d.ts +24 -0
- package/dist/core/report-generator.d.ts.map +1 -0
- package/dist/core/report-generator.js +212 -0
- package/dist/core/report-generator.js.map +1 -0
- package/dist/core/session.d.ts +83 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +306 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/timeout.d.ts +49 -0
- package/dist/core/timeout.d.ts.map +1 -0
- package/dist/core/timeout.js +67 -0
- package/dist/core/timeout.js.map +1 -0
- package/dist/core/tool-logger.d.ts +83 -0
- package/dist/core/tool-logger.d.ts.map +1 -0
- package/dist/core/tool-logger.js +453 -0
- package/dist/core/tool-logger.js.map +1 -0
- package/dist/core/validation.d.ts +39 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +93 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +85 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/assert.d.ts +108 -0
- package/dist/tools/assert.d.ts.map +1 -0
- package/dist/tools/assert.js +291 -0
- package/dist/tools/assert.js.map +1 -0
- package/dist/tools/automator.d.ts +45 -0
- package/dist/tools/automator.d.ts.map +1 -0
- package/dist/tools/automator.js +186 -0
- package/dist/tools/automator.js.map +1 -0
- package/dist/tools/element.d.ts +253 -0
- package/dist/tools/element.d.ts.map +1 -0
- package/dist/tools/element.js +615 -0
- package/dist/tools/element.js.map +1 -0
- package/dist/tools/index.d.ts +97 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1565 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/miniprogram.d.ts +79 -0
- package/dist/tools/miniprogram.d.ts.map +1 -0
- package/dist/tools/miniprogram.js +245 -0
- package/dist/tools/miniprogram.js.map +1 -0
- package/dist/tools/network.d.ts +65 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +205 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/page.d.ts +108 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/page.js +307 -0
- package/dist/tools/page.js.map +1 -0
- package/dist/tools/record.d.ts +86 -0
- package/dist/tools/record.d.ts.map +1 -0
- package/dist/tools/record.js +316 -0
- package/dist/tools/record.js.map +1 -0
- package/dist/tools/snapshot.d.ts +82 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +258 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/types.d.ts +240 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/SIMPLE_USAGE.md +210 -0
- package/docs/api/README.md +244 -0
- package/docs/api/assert.md +1015 -0
- package/docs/api/automator.md +345 -0
- package/docs/api/element.md +1454 -0
- package/docs/api/miniprogram.md +558 -0
- package/docs/api/network.md +883 -0
- package/docs/api/page.md +909 -0
- package/docs/api/record.md +963 -0
- package/docs/api/snapshot.md +792 -0
- package/docs/architecture.E-Docs.md +1359 -0
- package/docs/architecture.F1.md +720 -0
- package/docs/architecture.F2.md +871 -0
- package/docs/architecture.F3.md +905 -0
- package/docs/architecture.md +90 -0
- package/docs/charter.A1.align.yaml +170 -0
- package/docs/charter.A2.align.yaml +199 -0
- package/docs/charter.A3.align.yaml +242 -0
- package/docs/charter.A4.align.yaml +227 -0
- package/docs/charter.B1.align.yaml +179 -0
- package/docs/charter.B2.align.yaml +200 -0
- package/docs/charter.B3.align.yaml +200 -0
- package/docs/charter.B4.align.yaml +188 -0
- package/docs/charter.C1.align.yaml +190 -0
- package/docs/charter.C2.align.yaml +202 -0
- package/docs/charter.C3.align.yaml +211 -0
- package/docs/charter.C4.align.yaml +263 -0
- package/docs/charter.C5.align.yaml +220 -0
- package/docs/charter.D1.align.yaml +190 -0
- package/docs/charter.D2.align.yaml +234 -0
- package/docs/charter.D3.align.yaml +206 -0
- package/docs/charter.E-Docs.align.yaml +294 -0
- package/docs/charter.F1.align.yaml +193 -0
- package/docs/charter.F2.align.yaml +248 -0
- package/docs/charter.F3.align.yaml +287 -0
- package/docs/charter.G.align.yaml +174 -0
- package/docs/charter.align.yaml +111 -0
- package/docs/examples/session-report-usage.md +449 -0
- package/docs/maintenance.md +682 -0
- package/docs/playwright-mcp/350/260/203/347/240/224.md +53 -0
- package/docs/setup-guide.md +775 -0
- package/docs/tasks.A1.atomize.md +296 -0
- package/docs/tasks.A2.atomize.md +408 -0
- package/docs/tasks.A3.atomize.md +564 -0
- package/docs/tasks.A4.atomize.md +496 -0
- package/docs/tasks.B1.atomize.md +352 -0
- package/docs/tasks.B2.atomize.md +561 -0
- package/docs/tasks.B3.atomize.md +508 -0
- package/docs/tasks.B4.atomize.md +504 -0
- package/docs/tasks.C1.atomize.md +540 -0
- package/docs/tasks.C2.atomize.md +665 -0
- package/docs/tasks.C3.atomize.md +745 -0
- package/docs/tasks.C4.atomize.md +908 -0
- package/docs/tasks.C5.atomize.md +755 -0
- package/docs/tasks.D1.atomize.md +547 -0
- package/docs/tasks.D2.atomize.md +619 -0
- package/docs/tasks.D3.atomize.md +790 -0
- package/docs/tasks.E-Docs.atomize.md +1204 -0
- package/docs/tasks.atomize.md +189 -0
- package/docs/troubleshooting.md +855 -0
- package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +155 -0
- package/docs//345/274/200/345/217/221/344/273/273/345/212/241/350/256/241/345/210/222.md +110 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226API/345/256/214/346/225/264/346/226/207/346/241/243.md +894 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226/345/256/214/346/225/264/346/223/215/344/275/234/346/211/213/345/206/214.md +1885 -0
- package/docs//346/216/245/345/217/243/346/226/271/346/241/210.md +565 -0
- package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +380 -0
- package/package.json +87 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recording and replay tool implementations
|
|
3
|
+
* Handles action sequence recording, saving, and replay
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState, ActionSequence } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Start recording actions
|
|
8
|
+
*/
|
|
9
|
+
export declare function startRecording(session: SessionState, args?: {
|
|
10
|
+
name?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
sequenceId?: string;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Stop recording and save sequence
|
|
19
|
+
*/
|
|
20
|
+
export declare function stopRecording(session: SessionState, args?: {
|
|
21
|
+
save?: boolean;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
message: string;
|
|
25
|
+
sequenceId?: string;
|
|
26
|
+
actionCount?: number;
|
|
27
|
+
filePath?: string;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Record an action (internal helper, called by tool wrapper)
|
|
31
|
+
*
|
|
32
|
+
* Thread-safe: Captures recording state atomically to prevent race conditions
|
|
33
|
+
*/
|
|
34
|
+
export declare function recordAction(session: SessionState, toolName: string, args: Record<string, any>, success: boolean, duration?: number, error?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* List all saved sequences
|
|
37
|
+
*/
|
|
38
|
+
export declare function listSequences(session: SessionState): Promise<{
|
|
39
|
+
success: boolean;
|
|
40
|
+
message: string;
|
|
41
|
+
sequences: Array<{
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
createdAt: string;
|
|
46
|
+
actionCount: number;
|
|
47
|
+
}>;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Get a specific sequence
|
|
51
|
+
*/
|
|
52
|
+
export declare function getSequence(session: SessionState, args: {
|
|
53
|
+
sequenceId: string;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
success: boolean;
|
|
56
|
+
message: string;
|
|
57
|
+
sequence: ActionSequence;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Delete a sequence
|
|
61
|
+
*/
|
|
62
|
+
export declare function deleteSequence(session: SessionState, args: {
|
|
63
|
+
sequenceId: string;
|
|
64
|
+
}): Promise<{
|
|
65
|
+
success: boolean;
|
|
66
|
+
message: string;
|
|
67
|
+
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Replay a recorded sequence
|
|
70
|
+
*/
|
|
71
|
+
export declare function replaySequence(session: SessionState, args: {
|
|
72
|
+
sequenceId: string;
|
|
73
|
+
continueOnError?: boolean;
|
|
74
|
+
}): Promise<{
|
|
75
|
+
success: boolean;
|
|
76
|
+
message: string;
|
|
77
|
+
totalActions: number;
|
|
78
|
+
successCount: number;
|
|
79
|
+
failureCount: number;
|
|
80
|
+
results: Array<{
|
|
81
|
+
toolName: string;
|
|
82
|
+
success: boolean;
|
|
83
|
+
error?: string;
|
|
84
|
+
}>;
|
|
85
|
+
}>;
|
|
86
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/tools/record.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAwB/E;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CAChB,GACL,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAC,CAsCD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,OAAO,CAAA;CACV,GACL,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC,CAkDD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CAgCN;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAClE,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;CACH,CAAC,CAuCD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;CACnB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,cAAc,CAAA;CACzB,CAAC,CA4BD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;CACnB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,CAwBD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACH,CAAC,CAwFD"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recording and replay tool implementations
|
|
3
|
+
* Handles action sequence recording, saving, and replay
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a unique sequence ID
|
|
9
|
+
*/
|
|
10
|
+
function generateSequenceId() {
|
|
11
|
+
return `seq_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get sequences directory path
|
|
15
|
+
*/
|
|
16
|
+
function getSequencesDir(session) {
|
|
17
|
+
return path.join(session.outputDir, 'sequences');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Ensure sequences directory exists
|
|
21
|
+
*/
|
|
22
|
+
async function ensureSequencesDir(session) {
|
|
23
|
+
const dir = getSequencesDir(session);
|
|
24
|
+
await fs.mkdir(dir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Start recording actions
|
|
28
|
+
*/
|
|
29
|
+
export async function startRecording(session, args = {}) {
|
|
30
|
+
const { name = `Recording ${new Date().toISOString()}`, description } = args;
|
|
31
|
+
const logger = session.logger;
|
|
32
|
+
try {
|
|
33
|
+
logger?.info('Starting recording', { name });
|
|
34
|
+
// Check if already recording
|
|
35
|
+
if (session.recording?.isRecording) {
|
|
36
|
+
throw new Error('Already recording. Stop current recording first.');
|
|
37
|
+
}
|
|
38
|
+
// Initialize recording state
|
|
39
|
+
const sequenceId = generateSequenceId();
|
|
40
|
+
session.recording = {
|
|
41
|
+
isRecording: true,
|
|
42
|
+
startedAt: new Date(),
|
|
43
|
+
currentSequence: {
|
|
44
|
+
id: sequenceId,
|
|
45
|
+
name,
|
|
46
|
+
description,
|
|
47
|
+
createdAt: new Date(),
|
|
48
|
+
actions: [],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
logger?.info('Recording started', { sequenceId, name });
|
|
52
|
+
return {
|
|
53
|
+
success: true,
|
|
54
|
+
message: `Recording started: ${name}`,
|
|
55
|
+
sequenceId,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
+
logger?.error('Failed to start recording', { error: errorMessage });
|
|
61
|
+
throw new Error(`Failed to start recording: ${errorMessage}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Stop recording and save sequence
|
|
66
|
+
*/
|
|
67
|
+
export async function stopRecording(session, args = {}) {
|
|
68
|
+
const { save = true } = args;
|
|
69
|
+
const logger = session.logger;
|
|
70
|
+
try {
|
|
71
|
+
logger?.info('Stopping recording');
|
|
72
|
+
// Check if recording
|
|
73
|
+
if (!session.recording?.isRecording || !session.recording.currentSequence) {
|
|
74
|
+
throw new Error('Not currently recording');
|
|
75
|
+
}
|
|
76
|
+
const sequence = session.recording.currentSequence;
|
|
77
|
+
const actionCount = sequence.actions.length;
|
|
78
|
+
// Stop recording
|
|
79
|
+
session.recording.isRecording = false;
|
|
80
|
+
let filePath;
|
|
81
|
+
// Save sequence if requested
|
|
82
|
+
if (save) {
|
|
83
|
+
await ensureSequencesDir(session);
|
|
84
|
+
const filename = `${sequence.id}.json`;
|
|
85
|
+
filePath = path.join(getSequencesDir(session), filename);
|
|
86
|
+
await fs.writeFile(filePath, JSON.stringify(sequence, null, 2), 'utf-8');
|
|
87
|
+
logger?.info('Sequence saved', {
|
|
88
|
+
sequenceId: sequence.id,
|
|
89
|
+
filePath,
|
|
90
|
+
actionCount,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// Clear recording state
|
|
94
|
+
session.recording = undefined;
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
message: `Recording stopped: ${sequence.name} (${actionCount} actions)`,
|
|
98
|
+
sequenceId: sequence.id,
|
|
99
|
+
actionCount,
|
|
100
|
+
filePath,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
105
|
+
logger?.error('Failed to stop recording', { error: errorMessage });
|
|
106
|
+
throw new Error(`Failed to stop recording: ${errorMessage}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Record an action (internal helper, called by tool wrapper)
|
|
111
|
+
*
|
|
112
|
+
* Thread-safe: Captures recording state atomically to prevent race conditions
|
|
113
|
+
*/
|
|
114
|
+
export function recordAction(session, toolName, args, success, duration, error) {
|
|
115
|
+
// Atomically capture recording state
|
|
116
|
+
const recording = session.recording;
|
|
117
|
+
if (!recording || !recording.isRecording) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const currentSequence = recording.currentSequence;
|
|
121
|
+
if (!currentSequence) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const action = {
|
|
126
|
+
timestamp: new Date(),
|
|
127
|
+
toolName,
|
|
128
|
+
args,
|
|
129
|
+
duration,
|
|
130
|
+
success,
|
|
131
|
+
error,
|
|
132
|
+
};
|
|
133
|
+
// Atomically push action
|
|
134
|
+
// If recording was stopped between the checks above and here,
|
|
135
|
+
// the action will still be recorded (which is acceptable - better than losing it)
|
|
136
|
+
currentSequence.actions.push(action);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// Handle potential race condition where currentSequence becomes invalid
|
|
140
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
141
|
+
console.error(`Failed to record action for ${toolName}:`, errorMessage);
|
|
142
|
+
// Silently fail - don't break the actual tool execution
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* List all saved sequences
|
|
147
|
+
*/
|
|
148
|
+
export async function listSequences(session) {
|
|
149
|
+
const logger = session.logger;
|
|
150
|
+
try {
|
|
151
|
+
logger?.info('Listing sequences');
|
|
152
|
+
await ensureSequencesDir(session);
|
|
153
|
+
const dir = getSequencesDir(session);
|
|
154
|
+
const files = await fs.readdir(dir);
|
|
155
|
+
const sequences = [];
|
|
156
|
+
for (const file of files) {
|
|
157
|
+
if (!file.endsWith('.json'))
|
|
158
|
+
continue;
|
|
159
|
+
const filePath = path.join(dir, file);
|
|
160
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
161
|
+
const sequence = JSON.parse(content);
|
|
162
|
+
sequences.push({
|
|
163
|
+
id: sequence.id,
|
|
164
|
+
name: sequence.name,
|
|
165
|
+
description: sequence.description,
|
|
166
|
+
createdAt: sequence.createdAt.toString(),
|
|
167
|
+
actionCount: sequence.actions.length,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
logger?.info('Sequences listed', { count: sequences.length });
|
|
171
|
+
return {
|
|
172
|
+
success: true,
|
|
173
|
+
message: `Found ${sequences.length} sequences`,
|
|
174
|
+
sequences,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
179
|
+
logger?.error('Failed to list sequences', { error: errorMessage });
|
|
180
|
+
throw new Error(`Failed to list sequences: ${errorMessage}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get a specific sequence
|
|
185
|
+
*/
|
|
186
|
+
export async function getSequence(session, args) {
|
|
187
|
+
const { sequenceId } = args;
|
|
188
|
+
const logger = session.logger;
|
|
189
|
+
try {
|
|
190
|
+
logger?.info('Getting sequence', { sequenceId });
|
|
191
|
+
await ensureSequencesDir(session);
|
|
192
|
+
const filePath = path.join(getSequencesDir(session), `${sequenceId}.json`);
|
|
193
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
194
|
+
const sequence = JSON.parse(content);
|
|
195
|
+
logger?.info('Sequence retrieved', {
|
|
196
|
+
sequenceId,
|
|
197
|
+
actionCount: sequence.actions.length,
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
success: true,
|
|
201
|
+
message: `Sequence retrieved: ${sequence.name}`,
|
|
202
|
+
sequence,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
207
|
+
logger?.error('Failed to get sequence', { error: errorMessage, sequenceId });
|
|
208
|
+
throw new Error(`Failed to get sequence: ${errorMessage}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Delete a sequence
|
|
213
|
+
*/
|
|
214
|
+
export async function deleteSequence(session, args) {
|
|
215
|
+
const { sequenceId } = args;
|
|
216
|
+
const logger = session.logger;
|
|
217
|
+
try {
|
|
218
|
+
logger?.info('Deleting sequence', { sequenceId });
|
|
219
|
+
const filePath = path.join(getSequencesDir(session), `${sequenceId}.json`);
|
|
220
|
+
await fs.unlink(filePath);
|
|
221
|
+
logger?.info('Sequence deleted', { sequenceId });
|
|
222
|
+
return {
|
|
223
|
+
success: true,
|
|
224
|
+
message: `Sequence deleted: ${sequenceId}`,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
229
|
+
logger?.error('Failed to delete sequence', {
|
|
230
|
+
error: errorMessage,
|
|
231
|
+
sequenceId,
|
|
232
|
+
});
|
|
233
|
+
throw new Error(`Failed to delete sequence: ${errorMessage}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Replay a recorded sequence
|
|
238
|
+
*/
|
|
239
|
+
export async function replaySequence(session, args) {
|
|
240
|
+
const { sequenceId, continueOnError = false } = args;
|
|
241
|
+
const logger = session.logger;
|
|
242
|
+
try {
|
|
243
|
+
logger?.info('Replaying sequence', { sequenceId, continueOnError });
|
|
244
|
+
// Get sequence
|
|
245
|
+
const { sequence } = await getSequence(session, { sequenceId });
|
|
246
|
+
// Import tools dynamically
|
|
247
|
+
const tools = await import('./index.js');
|
|
248
|
+
const results = [];
|
|
249
|
+
let successCount = 0;
|
|
250
|
+
let failureCount = 0;
|
|
251
|
+
// Replay each action
|
|
252
|
+
for (const action of sequence.actions) {
|
|
253
|
+
const startTime = Date.now();
|
|
254
|
+
try {
|
|
255
|
+
// Get tool function
|
|
256
|
+
const toolFn = tools[action.toolName];
|
|
257
|
+
if (!toolFn || typeof toolFn !== 'function') {
|
|
258
|
+
throw new Error(`Tool not found: ${action.toolName}`);
|
|
259
|
+
}
|
|
260
|
+
// Execute tool
|
|
261
|
+
await toolFn(session, action.args);
|
|
262
|
+
const duration = Date.now() - startTime;
|
|
263
|
+
logger?.info('Action replayed successfully', {
|
|
264
|
+
toolName: action.toolName,
|
|
265
|
+
duration,
|
|
266
|
+
});
|
|
267
|
+
results.push({
|
|
268
|
+
toolName: action.toolName,
|
|
269
|
+
success: true,
|
|
270
|
+
});
|
|
271
|
+
successCount++;
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
275
|
+
const duration = Date.now() - startTime;
|
|
276
|
+
logger?.error('Action replay failed', {
|
|
277
|
+
toolName: action.toolName,
|
|
278
|
+
error: errorMessage,
|
|
279
|
+
duration,
|
|
280
|
+
});
|
|
281
|
+
results.push({
|
|
282
|
+
toolName: action.toolName,
|
|
283
|
+
success: false,
|
|
284
|
+
error: errorMessage,
|
|
285
|
+
});
|
|
286
|
+
failureCount++;
|
|
287
|
+
if (!continueOnError) {
|
|
288
|
+
throw new Error(`Replay stopped at action ${action.toolName}: ${errorMessage}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
logger?.info('Sequence replay completed', {
|
|
293
|
+
sequenceId,
|
|
294
|
+
totalActions: sequence.actions.length,
|
|
295
|
+
successCount,
|
|
296
|
+
failureCount,
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
success: failureCount === 0,
|
|
300
|
+
message: `Replay completed: ${successCount} success, ${failureCount} failures`,
|
|
301
|
+
totalActions: sequence.actions.length,
|
|
302
|
+
successCount,
|
|
303
|
+
failureCount,
|
|
304
|
+
results,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
309
|
+
logger?.error('Failed to replay sequence', {
|
|
310
|
+
error: errorMessage,
|
|
311
|
+
sequenceId,
|
|
312
|
+
});
|
|
313
|
+
throw new Error(`Failed to replay sequence: ${errorMessage}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/tools/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot tools for MCP server
|
|
3
|
+
* Provides utilities for capturing page and application state snapshots
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Capture a complete page snapshot (data + screenshot)
|
|
8
|
+
* Includes page data, page info, and screenshot
|
|
9
|
+
*/
|
|
10
|
+
export declare function snapshotPage(session: SessionState, args: {
|
|
11
|
+
pagePath?: string;
|
|
12
|
+
filename?: string;
|
|
13
|
+
includeScreenshot?: boolean;
|
|
14
|
+
fullPage?: boolean;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
message: string;
|
|
18
|
+
snapshotPath: string;
|
|
19
|
+
screenshotPath?: string;
|
|
20
|
+
data: {
|
|
21
|
+
timestamp: string;
|
|
22
|
+
pagePath: string;
|
|
23
|
+
pageData: any;
|
|
24
|
+
pageQuery: Record<string, any>;
|
|
25
|
+
};
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Capture a complete application snapshot
|
|
29
|
+
* Includes system info, page stack, current page data, and screenshot
|
|
30
|
+
*/
|
|
31
|
+
export declare function snapshotFull(session: SessionState, args: {
|
|
32
|
+
filename?: string;
|
|
33
|
+
includeScreenshot?: boolean;
|
|
34
|
+
fullPage?: boolean;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
success: boolean;
|
|
37
|
+
message: string;
|
|
38
|
+
snapshotPath: string;
|
|
39
|
+
screenshotPath?: string;
|
|
40
|
+
data: {
|
|
41
|
+
timestamp: string;
|
|
42
|
+
systemInfo: any;
|
|
43
|
+
pageStack: Array<{
|
|
44
|
+
path: string;
|
|
45
|
+
query: Record<string, any>;
|
|
46
|
+
}>;
|
|
47
|
+
currentPage: {
|
|
48
|
+
path: string;
|
|
49
|
+
query: Record<string, any>;
|
|
50
|
+
data: any;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Capture an element snapshot (properties + screenshot)
|
|
56
|
+
* Includes element attributes, properties, size, and optional screenshot
|
|
57
|
+
*/
|
|
58
|
+
export declare function snapshotElement(session: SessionState, args: {
|
|
59
|
+
refId: string;
|
|
60
|
+
filename?: string;
|
|
61
|
+
includeScreenshot?: boolean;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
success: boolean;
|
|
64
|
+
message: string;
|
|
65
|
+
snapshotPath: string;
|
|
66
|
+
screenshotPath?: string;
|
|
67
|
+
data: {
|
|
68
|
+
timestamp: string;
|
|
69
|
+
refId: string;
|
|
70
|
+
text?: string;
|
|
71
|
+
attributes: Record<string, any>;
|
|
72
|
+
size: {
|
|
73
|
+
width: number;
|
|
74
|
+
height: number;
|
|
75
|
+
} | null;
|
|
76
|
+
offset: {
|
|
77
|
+
left: number;
|
|
78
|
+
top: number;
|
|
79
|
+
} | null;
|
|
80
|
+
};
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,GAAG,CAAA;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAC/B,CAAA;CACF,CAAC,CA2FD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,GAAG,CAAA;QACf,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;SAAE,CAAC,CAAA;QAC9D,WAAW,EAAE;YACX,IAAI,EAAE,MAAM,CAAA;YACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAC1B,IAAI,EAAE,GAAG,CAAA;SACV,CAAA;KACF,CAAA;CACF,CAAC,CAoGD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/B,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;QAC9C,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAC7C,CAAA;CACF,CAAC,CAuGD"}
|