wuying-agentbay-sdk 0.10.2 → 0.11.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.
Files changed (104) hide show
  1. package/dist/chunk-E7QC5S76.mjs +3143 -0
  2. package/dist/chunk-E7QC5S76.mjs.map +1 -0
  3. package/dist/chunk-ZUB35HKV.cjs +3134 -0
  4. package/dist/chunk-ZUB35HKV.cjs.map +1 -0
  5. package/dist/index.cjs +3588 -3921
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.mts +2088 -687
  8. package/dist/index.d.ts +2088 -687
  9. package/dist/index.mjs +3556 -3889
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/key-normalizer-AF7APGQZ.cjs +136 -0
  12. package/dist/key-normalizer-AF7APGQZ.cjs.map +1 -0
  13. package/dist/key-normalizer-QDBRLFHF.mjs +145 -0
  14. package/dist/key-normalizer-QDBRLFHF.mjs.map +1 -0
  15. package/dist/model-2G37RFQQ.cjs +188 -0
  16. package/dist/model-2G37RFQQ.cjs.map +1 -0
  17. package/dist/model-ZFTLKEMC.mjs +197 -0
  18. package/docs/api/README.md +26 -0
  19. package/docs/api/browser-use/browser.md +177 -0
  20. package/docs/api/browser-use/extension.md +284 -0
  21. package/docs/api/codespace/code.md +77 -0
  22. package/docs/api/common-features/advanced/agent.md +84 -0
  23. package/docs/api/common-features/advanced/oss.md +221 -0
  24. package/docs/api/common-features/basics/agentbay.md +181 -0
  25. package/docs/api/common-features/basics/command.md +83 -0
  26. package/docs/api/common-features/basics/context-manager.md +130 -0
  27. package/docs/api/common-features/basics/context-sync.md +51 -0
  28. package/docs/api/common-features/basics/context.md +348 -0
  29. package/docs/api/common-features/basics/filesystem.md +499 -0
  30. package/docs/api/common-features/basics/logging.md +77 -0
  31. package/docs/api/common-features/basics/session.md +412 -0
  32. package/docs/api/computer-use/computer.md +786 -0
  33. package/docs/api/mobile-use/mobile.md +395 -0
  34. package/docs/examples/README.md +332 -0
  35. package/docs/examples/basic-usage.ts +86 -0
  36. package/docs/examples/browser-use/browser/README.md +356 -0
  37. package/docs/examples/browser-use/browser/basic-usage.ts +136 -0
  38. package/docs/examples/browser-use/browser/browser-command-args.ts +117 -0
  39. package/docs/examples/browser-use/browser/browser-context-cookie-persistence.ts +348 -0
  40. package/docs/examples/browser-use/browser/browser-fingerprint-basic-usage.ts +121 -0
  41. package/docs/examples/browser-use/browser/browser-fingerprint-construct.ts +114 -0
  42. package/docs/examples/browser-use/browser/browser-fingerprint-local-sync.ts +98 -0
  43. package/docs/examples/browser-use/browser/browser-fingerprint-persistence.ts +242 -0
  44. package/docs/examples/browser-use/browser/browser-proxies.ts +149 -0
  45. package/docs/examples/browser-use/browser/browser-type-example.ts +266 -0
  46. package/docs/examples/browser-use/browser/browser-viewport.ts +129 -0
  47. package/docs/examples/browser-use/browser/call_for_user_jd.ts +184 -0
  48. package/docs/examples/browser-use/browser/captcha_tongcheng.ts +151 -0
  49. package/docs/examples/browser-use/browser/run-2048.ts +209 -0
  50. package/docs/examples/browser-use/browser/run-sudoku.ts +150 -0
  51. package/docs/examples/browser-use/browser/screenshot-example.ts +132 -0
  52. package/docs/examples/browser-use/extension-example/README.md +252 -0
  53. package/docs/examples/browser-use/extension-example/extension-example.ts +380 -0
  54. package/docs/examples/codespace/automation/automation-example.ts +322 -0
  55. package/docs/examples/common-features/advanced/agent-module-example/README.md +40 -0
  56. package/docs/examples/common-features/advanced/agent-module-example.ts +66 -0
  57. package/docs/examples/common-features/advanced/archive-upload-mode-example/README.md +212 -0
  58. package/docs/examples/common-features/advanced/archive-upload-mode-example/archive-upload-mode-example.ts +213 -0
  59. package/docs/examples/common-features/advanced/vpc-session-example/README.md +47 -0
  60. package/docs/examples/common-features/advanced/vpc-session-example.ts +106 -0
  61. package/docs/examples/common-features/basics/archive-upload-mode-example/README.md +236 -0
  62. package/docs/examples/common-features/basics/archive-upload-mode-example/main.ts +236 -0
  63. package/docs/examples/common-features/basics/command-example/README.md +47 -0
  64. package/docs/examples/common-features/basics/command-example/command-example.ts +153 -0
  65. package/docs/examples/common-features/basics/context-management/README.md +55 -0
  66. package/docs/examples/common-features/basics/context-management/context-management.ts +140 -0
  67. package/docs/examples/common-features/basics/data-persistence/README.md +129 -0
  68. package/docs/examples/common-features/basics/data-persistence/context-sync-demo.md +144 -0
  69. package/docs/examples/common-features/basics/data-persistence/context-sync-demo.ts +275 -0
  70. package/docs/examples/common-features/basics/data-persistence/data-persistence.ts +259 -0
  71. package/docs/examples/common-features/basics/data-persistence/recycle-policy-example.ts +294 -0
  72. package/docs/examples/common-features/basics/filesystem-example/README.md +57 -0
  73. package/docs/examples/common-features/basics/filesystem-example/filesystem-example.ts +164 -0
  74. package/docs/examples/common-features/basics/filesystem-example/filesystem-filetransfer-example.ts +153 -0
  75. package/docs/examples/common-features/basics/filesystem-example/watch-directory-example.ts +168 -0
  76. package/docs/examples/common-features/basics/get/README.md +136 -0
  77. package/docs/examples/common-features/basics/get/main.ts +79 -0
  78. package/docs/examples/common-features/basics/list_sessions/README.md +54 -0
  79. package/docs/examples/common-features/basics/list_sessions/main.ts +258 -0
  80. package/docs/examples/common-features/basics/mcp_tool_direct_call/README.md +142 -0
  81. package/docs/examples/common-features/basics/mcp_tool_direct_call/main.ts +135 -0
  82. package/docs/examples/common-features/basics/session-creation/README.md +28 -0
  83. package/docs/examples/common-features/basics/session-creation/session-creation.ts +295 -0
  84. package/docs/examples/mobile-use/mobile-get-adb-url/README.md +92 -0
  85. package/docs/examples/mobile-use/mobile-get-adb-url/index.ts +80 -0
  86. package/docs/examples/mobile-use/mobile-get-adb-url/package-lock.json +279 -0
  87. package/docs/examples/mobile-use/mobile-get-adb-url/package.json +18 -0
  88. package/package.json +18 -11
  89. package/dist/application-KZWXH46T.mjs +0 -17
  90. package/dist/application-LMA7KSRH.cjs +0 -8
  91. package/dist/application-LMA7KSRH.cjs.map +0 -1
  92. package/dist/chunk-BQNGKBQF.mjs +0 -386
  93. package/dist/chunk-BQNGKBQF.mjs.map +0 -1
  94. package/dist/chunk-IOVGAAJL.cjs +0 -558
  95. package/dist/chunk-IOVGAAJL.cjs.map +0 -1
  96. package/dist/chunk-UF2TC2R4.mjs +0 -567
  97. package/dist/chunk-UF2TC2R4.mjs.map +0 -1
  98. package/dist/chunk-X6MS7Z5L.cjs +0 -377
  99. package/dist/chunk-X6MS7Z5L.cjs.map +0 -1
  100. package/dist/window-DH37ZDD5.mjs +0 -17
  101. package/dist/window-DH37ZDD5.mjs.map +0 -1
  102. package/dist/window-U7N3H735.cjs +0 -8
  103. package/dist/window-U7N3H735.cjs.map +0 -1
  104. /package/dist/{application-KZWXH46T.mjs.map → model-ZFTLKEMC.mjs.map} +0 -0
@@ -0,0 +1,275 @@
1
+ import { AgentBay, ContextSync, CreateSessionParams, newSyncPolicyWithDefaults } from 'wuying-agentbay-sdk';
2
+
3
+ /**
4
+ * Context Sync Dual-Mode Example for TypeScript SDK
5
+ *
6
+ * This example demonstrates the dual-mode context.sync() functionality:
7
+ * 1. Async mode with callback - immediate return, result handled via callback
8
+ * 2. Sync mode with await - waits for completion before returning
9
+ */
10
+
11
+ async function contextSyncWithCallbackDemo(agentBay: AgentBay): Promise<void> {
12
+ console.log("🔄 Starting context sync with callback demo...");
13
+
14
+ // Step 1: Create context for persistent storage
15
+ console.log("\n📦 Creating context for persistent storage...");
16
+ const contextResult = await agentBay.context.get("sync-callback-demo", true);
17
+ if (!contextResult.success) {
18
+ throw new Error(`Context creation failed: ${contextResult.errorMessage}`);
19
+ }
20
+ const context = contextResult.context!;
21
+ console.log(`✅ Context created: ${context.id}`);
22
+
23
+ // Step 2: Create session with context sync
24
+ console.log("\n📦 Creating session with context sync...");
25
+ const syncPolicy = newSyncPolicyWithDefaults();
26
+ const contextSync = new ContextSync(
27
+ context.id,
28
+ "/tmp/sync_data",
29
+ syncPolicy
30
+ );
31
+
32
+ const params: CreateSessionParams = {
33
+ contextSync: [contextSync]
34
+ };
35
+ const sessionResult = await agentBay.create(params);
36
+ if (!sessionResult.success) {
37
+ throw new Error(`Failed to create session: ${sessionResult.errorMessage}`);
38
+ }
39
+ const session = sessionResult.session!;
40
+ console.log(`✅ Session created: ${session.getSessionId()}`);
41
+
42
+ // Step 3: Create test data
43
+ console.log("\n💾 Creating test data...");
44
+ await session.command.executeCommand("mkdir -p /tmp/sync_data/test_files");
45
+
46
+ const testFiles = [
47
+ {
48
+ path: "/tmp/sync_data/test_files/small.txt",
49
+ content: "Small test file content\n".repeat(10)
50
+ },
51
+ {
52
+ path: "/tmp/sync_data/test_files/medium.txt",
53
+ content: "Medium test file content\n".repeat(100)
54
+ },
55
+ {
56
+ path: "/tmp/sync_data/config.json",
57
+ content: JSON.stringify({
58
+ sync_demo: true,
59
+ created_at: new Date().toISOString(),
60
+ session_id: session.getSessionId()
61
+ }, null, 2)
62
+ }
63
+ ];
64
+
65
+ let createdFiles = 0;
66
+ for (const file of testFiles) {
67
+ const writeResult = await session.fileSystem.writeFile(file.path, file.content);
68
+ if (writeResult.success) {
69
+ console.log(`✅ Created file: ${file.path}`);
70
+ createdFiles++;
71
+ } else {
72
+ console.log(`❌ Failed to create file ${file.path}: ${writeResult.errorMessage}`);
73
+ }
74
+ }
75
+
76
+ console.log(`📊 Created ${createdFiles}/${testFiles.length} test files`);
77
+
78
+ try {
79
+ // Method 1: Async interface with callback
80
+ console.log("\n📞 Calling context.sync() with callback...");
81
+ const syncStartTime = Date.now();
82
+
83
+ // Use callback mode - function returns immediately
84
+ const syncResult = await session.context.sync(
85
+ undefined, // contextId
86
+ undefined, // path
87
+ undefined, // mode
88
+ (success: boolean) => {
89
+ console.log("Callback called ==============");
90
+ const callbackTime = Date.now();
91
+ const duration = callbackTime - syncStartTime;
92
+
93
+ if (success) {
94
+ console.log(`✅ Context sync completed successfully in ${duration}ms`);
95
+ } else {
96
+ console.log(`❌ Context sync completed with failures in ${duration}ms`);
97
+ }
98
+
99
+ // Delete session in callback
100
+ console.log("🗑️ Deleting session from callback...");
101
+ session.delete(false) // Don't sync again since we already did
102
+ .then(() => {
103
+ console.log("✅ Session deleted successfully from callback");
104
+ })
105
+ .catch((error: any) => {
106
+ console.error("❌ Failed to delete session from callback:", error);
107
+ });
108
+ }
109
+ );
110
+
111
+ console.log(`📤 Sync initiation result: success=${syncResult.success}, requestId=${syncResult.requestId}`);
112
+ console.log("⏳ Waiting for callback to complete...");
113
+
114
+ // Wait a bit for the callback to complete
115
+ await new Promise(resolve => setTimeout(resolve, 10000));
116
+
117
+ } catch (error) {
118
+ console.error("❌ Context sync with callback failed:", error);
119
+ // Clean up session
120
+ try {
121
+ await session.delete(false);
122
+ console.log("✅ Session cleaned up after error");
123
+ } catch (deleteError) {
124
+ console.error("❌ Failed to clean up session:", deleteError);
125
+ }
126
+ }
127
+ }
128
+
129
+ async function contextSyncDemo(agentBay: AgentBay): Promise<void> {
130
+ console.log("🔄 Starting context sync demo...");
131
+
132
+ // Step 1: Create context for persistent storage
133
+ console.log("\n📦 Creating context for persistent storage...");
134
+ const contextResult = await agentBay.context.get("sync-await-demo", true);
135
+ if (!contextResult.success) {
136
+ throw new Error(`Context creation failed: ${contextResult.errorMessage}`);
137
+ }
138
+ const context = contextResult.context!;
139
+ console.log(`✅ Context created: ${context.id}`);
140
+
141
+ // Step 2: Create session with context sync
142
+ console.log("\n📦 Creating session with context sync...");
143
+ const syncPolicy = newSyncPolicyWithDefaults();
144
+ const contextSync = new ContextSync(
145
+ context.id,
146
+ "/tmp/sync_data",
147
+ syncPolicy
148
+ );
149
+
150
+ const params: CreateSessionParams = {
151
+ contextSync: [contextSync]
152
+ };
153
+ const sessionResult = await agentBay.create(params);
154
+ if (!sessionResult.success) {
155
+ throw new Error(`Failed to create session: ${sessionResult.errorMessage}`);
156
+ }
157
+ const session = sessionResult.session!;
158
+ console.log(`✅ Session created: ${session.getSessionId()}`);
159
+
160
+ // Step 3: Create test data
161
+ console.log("\n💾 Creating test data...");
162
+ await session.command.executeCommand("mkdir -p /tmp/sync_data/test_files");
163
+
164
+ const testFiles = [
165
+ {
166
+ path: "/tmp/sync_data/test_files/small.txt",
167
+ content: "Small test file content\n".repeat(10)
168
+ },
169
+ {
170
+ path: "/tmp/sync_data/test_files/medium.txt",
171
+ content: "Medium test file content\n".repeat(100)
172
+ },
173
+ {
174
+ path: "/tmp/sync_data/config.json",
175
+ content: JSON.stringify({
176
+ sync_demo: true,
177
+ created_at: new Date().toISOString(),
178
+ session_id: session.getSessionId()
179
+ }, null, 2)
180
+ }
181
+ ];
182
+
183
+ let createdFiles = 0;
184
+ for (const file of testFiles) {
185
+ const writeResult = await session.fileSystem.writeFile(file.path, file.content);
186
+ if (writeResult.success) {
187
+ console.log(`✅ Created file: ${file.path}`);
188
+ createdFiles++;
189
+ } else {
190
+ console.log(`❌ Failed to create file ${file.path}: ${writeResult.errorMessage}`);
191
+ }
192
+ }
193
+
194
+ console.log(`📊 Created ${createdFiles}/${testFiles.length} test files`);
195
+
196
+ try {
197
+ // Method 2: Sync interface with await
198
+ console.log("\n⏳ Calling context.sync() with await...");
199
+ const syncStartTime = Date.now();
200
+
201
+ // Use await mode - function waits for completion
202
+ const syncResult = await session.context.sync();
203
+
204
+ const syncDuration = Date.now() - syncStartTime;
205
+
206
+ if (syncResult.success) {
207
+ console.log(`✅ Context sync completed successfully in ${syncDuration}ms`);
208
+ } else {
209
+ console.log(`❌ Context sync completed with failures in ${syncDuration}ms`);
210
+ }
211
+
212
+ console.log(`📤 Sync result: success=${syncResult.success}, requestId=${syncResult.requestId}`);
213
+
214
+ // Delete session
215
+ console.log("🗑️ Deleting session...");
216
+ await session.delete(false); // Don't sync again since we already did
217
+ console.log("✅ Session deleted successfully");
218
+
219
+ } catch (error) {
220
+ console.error("❌ Context sync failed:", error);
221
+ // Clean up session
222
+ try {
223
+ await session.delete(false);
224
+ console.log("✅ Session cleaned up after error");
225
+ } catch (deleteError) {
226
+ console.error("❌ Failed to clean up session:", deleteError);
227
+ }
228
+ }
229
+ }
230
+
231
+ async function main(): Promise<void> {
232
+ console.log("🔄 AgentBay Context Sync Dual-Mode Example (TypeScript)");
233
+
234
+ // Initialize AgentBay client
235
+ const agentBay = new AgentBay();
236
+
237
+ try {
238
+ // Method 1: Async interface with callback
239
+ console.log("\n" + "=".repeat(60));
240
+ console.log("🔄 Method 1: context_sync_with_callback (Async with callback)");
241
+ console.log("=".repeat(60));
242
+
243
+ // Start the first demo without waiting for it to complete
244
+ const callbackPromise = contextSyncWithCallbackDemo(agentBay);
245
+ console.log("contextSyncWithCallbackDemo started (not awaited)");
246
+ console.log("=".repeat(60));
247
+
248
+ // Sleep 3 seconds
249
+ console.log("\n⏳ Sleeping 3 seconds before next demo...");
250
+ await new Promise(resolve => setTimeout(resolve, 3000));
251
+
252
+ // Method 2: Sync interface with await
253
+ console.log("\n" + "=".repeat(60));
254
+ console.log("🔄 Method 2: context_sync (Sync with await)");
255
+ console.log("=".repeat(60));
256
+ await contextSyncDemo(agentBay); // With await
257
+
258
+ // Wait for the first demo to complete
259
+ console.log("\n⏳ Waiting for callback demo to complete...");
260
+ await callbackPromise;
261
+
262
+ } catch (error) {
263
+ console.error("❌ Example execution failed:", error);
264
+ }
265
+
266
+ console.log("✅ Context sync dual-mode example completed");
267
+ }
268
+
269
+ // Run the example
270
+ if (require.main === module) {
271
+ main().catch(console.error);
272
+ }
273
+
274
+ export { contextSyncDemo, contextSyncWithCallbackDemo, main };
275
+
@@ -0,0 +1,259 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * AgentBay SDK - Data Persistence Example
5
+ *
6
+ * This example demonstrates real data persistence functionality:
7
+ * - Context creation for persistent storage
8
+ * - File persistence across multiple sessions
9
+ * - Context synchronization and file sharing
10
+ */
11
+
12
+ import type { CreateSessionParams } from 'wuying-agentbay-sdk';
13
+ import { AgentBay, ContextSync, logError, newSyncPolicy } from 'wuying-agentbay-sdk';
14
+
15
+ async function main(): Promise<void> {
16
+ console.log('🗄️ AgentBay Data Persistence Example');
17
+
18
+ // Initialize AgentBay client
19
+ const apiKey = process.env.AGENTBAY_API_KEY || '';
20
+ if (!apiKey) {
21
+ console.log('❌ Please set AGENTBAY_API_KEY environment variable');
22
+ process.exit(1);
23
+ }
24
+
25
+ const agentBay = new AgentBay({ apiKey });
26
+
27
+ try {
28
+ // Run the complete data persistence demonstration
29
+ await dataPersistenceDemo(agentBay);
30
+
31
+ } catch (error) {
32
+ console.log(`❌ Example execution failed: ${error}`);
33
+ logError('Error:', error);
34
+ }
35
+
36
+ console.log('✅ Data persistence example completed');
37
+ }
38
+
39
+ async function dataPersistenceDemo(agentBay: AgentBay): Promise<void> {
40
+ console.log('\n🔄 === Data Persistence Demonstration ===');
41
+
42
+ // Step 1: Create a context for persistent storage
43
+ console.log('\n📦 Step 1: Creating context for persistent storage...');
44
+ const contextResult = await agentBay.context.get('persistence-demo', true);
45
+
46
+ if (!contextResult.success) {
47
+ console.log(`❌ Context creation failed: ${contextResult.errorMessage}`);
48
+ return;
49
+ }
50
+
51
+ const context = contextResult.context;
52
+ console.log(`✅ Context created successfully: ${context.id}`);
53
+ console.log(` Name: ${context.name}`);
54
+
55
+ // Step 2: Create first session with context sync
56
+ console.log('\n🔧 Step 2: Creating first session with context synchronization...');
57
+
58
+ // Create sync policy for context synchronization
59
+ const syncPolicy = newSyncPolicy();
60
+
61
+ // Create context sync configuration
62
+ const contextSync = new ContextSync(
63
+ context.id,
64
+ '/tmp/persistent_data', // Mount context to this path in session
65
+ syncPolicy
66
+ );
67
+
68
+ // Create session with context sync
69
+ const params1: CreateSessionParams = {
70
+ contextSync: [contextSync]
71
+ };
72
+ const session1Result = await agentBay.create(params1);
73
+
74
+ if (!session1Result.success) {
75
+ console.log(`❌ First session creation failed: ${session1Result.errorMessage}`);
76
+ return;
77
+ }
78
+
79
+ const session1 = session1Result.session;
80
+ console.log(`✅ First session created successfully: ${session1.sessionId}`);
81
+
82
+ let session1Id = '';
83
+ try {
84
+ session1Id = session1.sessionId;
85
+
86
+ // Step 3: Write persistent data in first session
87
+ console.log('\n💾 Step 3: Writing persistent data in first session...');
88
+
89
+ // Create directory structure
90
+ await session1.command.executeCommand('mkdir -p /tmp/persistent_data/config');
91
+ await session1.command.executeCommand('mkdir -p /tmp/persistent_data/logs');
92
+
93
+ // Write configuration file
94
+ const configData = {
95
+ app_name: 'AgentBay Demo',
96
+ version: '1.0.0',
97
+ created_at: new Date().toISOString(),
98
+ session_id: session1.sessionId,
99
+ features: ['data_persistence', 'context_sync', 'multi_session']
100
+ };
101
+ const configContent = JSON.stringify(configData, null, 2);
102
+
103
+ const configResult = await session1.fileSystem.writeFile('/tmp/persistent_data/config/app.json', configContent);
104
+ if (configResult.success) {
105
+ console.log('✅ Configuration file written successfully');
106
+ } else {
107
+ console.log(`❌ Failed to write config file: ${configResult.errorMessage}`);
108
+ }
109
+
110
+ // Write a log file
111
+ const logContent = `Application Log - Session 1
112
+ Created: ${new Date().toISOString()}
113
+ Session ID: ${session1.sessionId}
114
+ Operation: Data persistence demonstration
115
+ Status: Files created successfully
116
+ `;
117
+
118
+ const logResult = await session1.fileSystem.writeFile('/tmp/persistent_data/logs/session1.log', logContent);
119
+ if (logResult.success) {
120
+ console.log('✅ Log file written successfully');
121
+ } else {
122
+ console.log(`❌ Failed to write log file: ${logResult.errorMessage}`);
123
+ }
124
+
125
+ // Write a data file
126
+ const dataContent = 'This is persistent data that should be available across sessions.\nIt demonstrates the context synchronization functionality.';
127
+
128
+ const dataResult = await session1.fileSystem.writeFile('/tmp/persistent_data/shared_data.txt', dataContent);
129
+ if (dataResult.success) {
130
+ console.log('✅ Data file written successfully');
131
+ } else {
132
+ console.log(`❌ Failed to write data file: ${dataResult.errorMessage}`);
133
+ }
134
+
135
+ // List files to verify
136
+ console.log('\n📋 Files created in first session:');
137
+ const listResult = await session1.command.executeCommand('find /tmp/persistent_data -type f -ls');
138
+ if (listResult.success) {
139
+ console.log(listResult.output);
140
+ }
141
+
142
+
143
+ } finally {
144
+ // Clean up first session
145
+ console.log('\n🧹 Cleaning up first session...');
146
+ const deleteResult1 = await agentBay.delete(session1, true); // Sync before deletion
147
+ if (deleteResult1.success) {
148
+ console.log('✅ First session deleted successfully (with context sync)');
149
+ } else {
150
+ console.log(`❌ First session deletion failed: ${deleteResult1.errorMessage}`);
151
+ }
152
+ }
153
+
154
+ // Step 4: Create second session to verify persistence
155
+ console.log('\n🔧 Step 4: Creating second session to verify data persistence...');
156
+
157
+ // Create second session with same context sync
158
+ const params2: CreateSessionParams = {
159
+ contextSync: [contextSync]
160
+ };
161
+ const session2Result = await agentBay.create(params2);
162
+
163
+ if (!session2Result.success) {
164
+ console.log(`❌ Second session creation failed: ${session2Result.errorMessage}`);
165
+ return;
166
+ }
167
+
168
+ const session2 = session2Result.session;
169
+ console.log(`✅ Second session created successfully: ${session2.sessionId}`);
170
+
171
+ try {
172
+ // Step 5: Verify persistent data in second session
173
+ console.log('\n🔍 Step 5: Verifying persistent data in second session...');
174
+
175
+ // Note: agent_bay.create() already waits for context synchronization to complete
176
+ console.log('✅ Context synchronization completed (handled by agentBay.create())');
177
+
178
+ // Check if files exist
179
+ const filesToCheck = [
180
+ '/tmp/persistent_data/config/app.json',
181
+ '/tmp/persistent_data/logs/session1.log',
182
+ '/tmp/persistent_data/shared_data.txt'
183
+ ];
184
+
185
+ let persistentFilesFound = 0;
186
+
187
+ for (const filePath of filesToCheck) {
188
+ console.log(`\n🔍 Checking file: ${filePath}`);
189
+ const readResult = await session2.fileSystem.readFile(filePath);
190
+
191
+ if (readResult.success) {
192
+ console.log('✅ File found and readable!');
193
+ if (filePath.endsWith('.json')) {
194
+ try {
195
+ const data = JSON.parse(readResult.content);
196
+ console.log(` 📄 Config data: ${data.app_name} v${data.version}`);
197
+ console.log(` 🕒 Created by session: ${data.session_id}`);
198
+ } catch {
199
+ console.log(` 📄 Content: ${readResult.content.substring(0, 100)}...`);
200
+ }
201
+ } else {
202
+ console.log(` 📄 Content preview: ${readResult.content.substring(0, 100)}...`);
203
+ }
204
+ persistentFilesFound++;
205
+ } else {
206
+ console.log(`❌ File not found or not readable: ${readResult.errorMessage}`);
207
+ }
208
+ }
209
+
210
+ // Add new data in second session
211
+ console.log('\n💾 Adding new data in second session...');
212
+ const session2Log = `Application Log - Session 2
213
+ Created: ${new Date().toISOString()}
214
+ Session ID: ${session2.sessionId}
215
+ Operation: Data persistence verification
216
+ Persistent files found: ${persistentFilesFound}/${filesToCheck.length}
217
+ Status: Persistence verification completed
218
+ `;
219
+
220
+ const session2Result = await session2.fileSystem.writeFile('/tmp/persistent_data/logs/session2.log', session2Log);
221
+ if (session2Result.success) {
222
+ console.log('✅ Second session log written successfully');
223
+ }
224
+
225
+ // Summary
226
+ console.log('\n📊 === Persistence Verification Summary ===');
227
+ console.log(`✅ Context ID: ${context.id}`);
228
+ console.log(`✅ First session: ${session1Id} (deleted)`);
229
+ console.log(`✅ Second session: ${session2.sessionId} (active)`);
230
+ console.log(`✅ Persistent files found: ${persistentFilesFound}/${filesToCheck.length}`);
231
+
232
+ if (persistentFilesFound === filesToCheck.length) {
233
+ console.log('🎉 Data persistence verification SUCCESSFUL!');
234
+ console.log(' Files created in first session are accessible in second session');
235
+ } else {
236
+ console.log('⚠️ Data persistence verification PARTIAL');
237
+ console.log(' Some files may still be syncing or failed to persist');
238
+ }
239
+
240
+ } finally {
241
+ // Clean up second session
242
+ console.log('\n🧹 Cleaning up second session...');
243
+ const deleteResult2 = await agentBay.delete(session2, true);
244
+ if (deleteResult2.success) {
245
+ console.log('✅ Second session deleted successfully (with context sync)');
246
+ } else {
247
+ console.log(`❌ Second session deletion failed: ${deleteResult2.errorMessage}`);
248
+ }
249
+ }
250
+ }
251
+
252
+
253
+ // Execute the main function
254
+ if (require.main === module) {
255
+ main().catch(error => {
256
+ logError('Error in main execution:', error);
257
+ process.exit(1);
258
+ });
259
+ }