crewly 1.5.11 → 1.5.13
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/config/constants.ts +3 -3
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +73 -0
- package/config/roles/architect/prompt.md +9 -0
- package/config/roles/backend-developer/prompt.md +9 -0
- package/config/roles/content-strategist/prompt.md +10 -0
- package/config/roles/designer/prompt.md +9 -0
- package/config/roles/developer/prompt.md +9 -0
- package/config/roles/frontend-developer/prompt.md +9 -0
- package/config/roles/fullstack-dev/prompt.md +9 -0
- package/config/roles/generalist/prompt.md +9 -0
- package/config/roles/ops/prompt.md +9 -0
- package/config/roles/product-manager/prompt.md +9 -0
- package/config/roles/qa/prompt.md +9 -0
- package/config/roles/qa-engineer/prompt.md +9 -0
- package/config/roles/researcher/prompt.md +9 -0
- package/config/roles/sales/prompt.md +9 -0
- package/config/roles/support/prompt.md +9 -0
- package/config/roles/team-leader/prompt.md +11 -0
- package/config/roles/tpm/prompt.md +9 -0
- package/config/roles/ux-designer/prompt.md +9 -0
- package/config/skills/_common/lib.sh +31 -0
- package/config/skills/_common/lib.test.sh +164 -0
- package/config/skills/agent/core/block-task/execute.sh +3 -1
- package/config/skills/agent/core/pipe-to-sink/execute.sh +41 -0
- package/config/skills/agent/core/read-task/execute.sh +3 -1
- package/config/skills/agent/core/report-progress/execute.sh +3 -1
- package/config/skills/agent/screenshot-compare/SKILL.md +75 -0
- package/config/skills/agent/screenshot-compare/execute.sh +182 -0
- package/config/skills/agent/screenshot-compare/skill.json +10 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +85 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +306 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +10 -0
- package/config/skills/orchestrator/cancel-cron/SKILL.md +44 -0
- package/config/skills/orchestrator/create-cron/SKILL.md +58 -0
- package/config/skills/orchestrator/list-cron/SKILL.md +51 -0
- package/config/skills/orchestrator/update-cron/SKILL.md +52 -0
- package/dist/backend/backend/src/constants.d.ts +7 -4
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +6 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +21 -2
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +167 -29
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +7 -3
- package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/data/data.controller.d.ts +47 -0
- package/dist/backend/backend/src/controllers/data/data.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/data/data.controller.js +201 -0
- package/dist/backend/backend/src/controllers/data/data.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/data/data.routes.d.ts +18 -0
- package/dist/backend/backend/src/controllers/data/data.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/data/data.routes.js +44 -0
- package/dist/backend/backend/src/controllers/data/data.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts +3 -2
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js +5 -3
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/cron-task.controller.d.ts +4 -0
- package/dist/backend/backend/src/controllers/system/cron-task.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/cron-task.controller.js +20 -0
- package/dist/backend/backend/src/controllers/system/cron-task.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +18 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-export.controller.d.ts +32 -0
- package/dist/backend/backend/src/controllers/team/team-export.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team/team-export.controller.js +61 -0
- package/dist/backend/backend/src/controllers/team/team-export.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +7 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +37 -7
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +4 -1
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +6 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +17 -2
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +2 -2
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/task-planning.service.d.ts +134 -0
- package/dist/backend/backend/src/services/agent/task-planning.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/task-planning.service.js +291 -0
- package/dist/backend/backend/src/services/agent/task-planning.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +11 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +47 -18
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +14 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +47 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +13 -9
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +44 -12
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +176 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +441 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts +162 -0
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js +350 -0
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts +8 -0
- package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js +27 -0
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +2 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/core/team-export.service.d.ts +103 -0
- package/dist/backend/backend/src/services/core/team-export.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/team-export.service.js +182 -0
- package/dist/backend/backend/src/services/core/team-export.service.js.map +1 -0
- package/dist/backend/backend/src/services/data/data-object-store.service.d.ts +160 -0
- package/dist/backend/backend/src/services/data/data-object-store.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/data/data-object-store.service.js +434 -0
- package/dist/backend/backend/src/services/data/data-object-store.service.js.map +1 -0
- package/dist/backend/backend/src/services/data/data-object.types.d.ts +190 -0
- package/dist/backend/backend/src/services/data/data-object.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/data/data-object.types.js +143 -0
- package/dist/backend/backend/src/services/data/data-object.types.js.map +1 -0
- package/dist/backend/backend/src/services/data/schema-registry.service.d.ts +108 -0
- package/dist/backend/backend/src/services/data/schema-registry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/data/schema-registry.service.js +290 -0
- package/dist/backend/backend/src/services/data/schema-registry.service.js.map +1 -0
- package/dist/backend/backend/src/services/data/sink-registry.service.d.ts +87 -0
- package/dist/backend/backend/src/services/data/sink-registry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/data/sink-registry.service.js +188 -0
- package/dist/backend/backend/src/services/data/sink-registry.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-router.service.js +7 -0
- package/dist/backend/backend/src/services/messaging/message-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +55 -2
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +89 -5
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +105 -14
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +400 -123
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/cron-task.types.d.ts +1 -1
- package/dist/backend/backend/src/types/data-object.types.d.ts +117 -0
- package/dist/backend/backend/src/types/data-object.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/data-object.types.js +23 -0
- package/dist/backend/backend/src/types/data-object.types.js.map +1 -0
- package/dist/backend/backend/src/types/settings.types.js +1 -1
- package/dist/backend/config/constants.d.ts +3 -3
- package/dist/backend/config/constants.js +3 -3
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +7 -4
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +6 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +1 -1
- package/dist/cli/config/constants.d.ts +3 -3
- package/dist/cli/config/constants.js +3 -3
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/index-371b68d4.css +33 -0
- package/frontend/dist/assets/{index-9af2ea40.js → index-506f70da.js} +321 -321
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-b19b2478.css +0 -33
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Relay Adapter Service
|
|
3
|
+
*
|
|
4
|
+
* Bridges BrowserBridgeService with CloudSyncService to enable browser
|
|
5
|
+
* commands to flow through the Cloud relay queue when the Chrome Extension
|
|
6
|
+
* is not directly connected via WebSocket.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* Agent → BrowserBridgeService → BrowserRelayAdapter → CloudSyncService
|
|
10
|
+
* → Cloud relay queue → Extension polls → executes → sends response
|
|
11
|
+
* → Cloud relay queue → Droplet polls → BrowserRelayAdapter resolves
|
|
12
|
+
*
|
|
13
|
+
* The Extension never sees the droplet IP — all traffic goes through
|
|
14
|
+
* the Cloud relay URL (crewlyai.com).
|
|
15
|
+
*
|
|
16
|
+
* @module services/browser/browser-relay-adapter.service
|
|
17
|
+
*/
|
|
18
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
19
|
+
import { CloudSyncService } from '../cloud/cloud-sync.service.js';
|
|
20
|
+
import { BROWSER_BRIDGE_CONSTANTS } from '../../constants.js';
|
|
21
|
+
/** Roles that identify a Chrome Extension device in the Cloud device list. */
|
|
22
|
+
const BROWSER_DEVICE_ROLES = ['browser', 'chrome-extension'];
|
|
23
|
+
/**
|
|
24
|
+
* Adapter that routes browser commands through the Cloud relay queue
|
|
25
|
+
* when no direct WebSocket connection exists to the Chrome Extension.
|
|
26
|
+
*
|
|
27
|
+
* Usage:
|
|
28
|
+
* 1. Create adapter with target Extension device ID
|
|
29
|
+
* 2. Register with BrowserBridgeService as relay fallback
|
|
30
|
+
* 3. Handle incoming `browser_response` messages from CloudSyncService
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const adapter = BrowserRelayAdapter.getInstance();
|
|
35
|
+
* adapter.setExtensionDeviceId('ext-device-abc');
|
|
36
|
+
*
|
|
37
|
+
* // Send command via relay
|
|
38
|
+
* const response = await adapter.sendViaRelay('navigate', { url: 'https://example.com' });
|
|
39
|
+
*
|
|
40
|
+
* // Handle incoming responses (called by CloudSyncService message handler)
|
|
41
|
+
* adapter.handleRelayResponse({ id: 'cmd-1', success: true, result: {...} });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class BrowserRelayAdapter {
|
|
45
|
+
static instance = null;
|
|
46
|
+
logger;
|
|
47
|
+
pendingCommands = new Map();
|
|
48
|
+
commandCounter = 0;
|
|
49
|
+
/** Device ID of the connected Chrome Extension (from Cloud device list) */
|
|
50
|
+
extensionDeviceId = null;
|
|
51
|
+
/** Whether auto-discovery is currently active */
|
|
52
|
+
discoveryActive = false;
|
|
53
|
+
/** Bound handler references for cleanup */
|
|
54
|
+
boundDeviceOnlineHandler = null;
|
|
55
|
+
boundDeviceOfflineHandler = null;
|
|
56
|
+
boundDevicesUpdatedHandler = null;
|
|
57
|
+
constructor() {
|
|
58
|
+
this.logger = LoggerService.getInstance().createComponentLogger('BrowserRelayAdapter');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the singleton instance.
|
|
62
|
+
*
|
|
63
|
+
* @returns BrowserRelayAdapter instance
|
|
64
|
+
*/
|
|
65
|
+
static getInstance() {
|
|
66
|
+
if (!BrowserRelayAdapter.instance) {
|
|
67
|
+
BrowserRelayAdapter.instance = new BrowserRelayAdapter();
|
|
68
|
+
}
|
|
69
|
+
return BrowserRelayAdapter.instance;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Reset singleton instance (for testing).
|
|
73
|
+
*/
|
|
74
|
+
static resetInstance() {
|
|
75
|
+
if (BrowserRelayAdapter.instance) {
|
|
76
|
+
BrowserRelayAdapter.instance.cleanup();
|
|
77
|
+
}
|
|
78
|
+
BrowserRelayAdapter.instance = null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Set the target Chrome Extension device ID for relay routing.
|
|
82
|
+
* This device ID comes from CloudSyncService device discovery.
|
|
83
|
+
*
|
|
84
|
+
* @param deviceId - Cloud device ID of the Extension
|
|
85
|
+
*/
|
|
86
|
+
setExtensionDeviceId(deviceId) {
|
|
87
|
+
this.extensionDeviceId = deviceId;
|
|
88
|
+
this.logger.info('Extension device ID set for relay', { deviceId });
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get the current Extension device ID.
|
|
92
|
+
*
|
|
93
|
+
* @returns Device ID or null if not set
|
|
94
|
+
*/
|
|
95
|
+
getExtensionDeviceId() {
|
|
96
|
+
return this.extensionDeviceId;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether the relay adapter is ready to send commands.
|
|
100
|
+
* Requires an Extension device ID and an active CloudSyncService.
|
|
101
|
+
*
|
|
102
|
+
* @returns True if relay is available
|
|
103
|
+
*/
|
|
104
|
+
isAvailable() {
|
|
105
|
+
if (!this.extensionDeviceId)
|
|
106
|
+
return false;
|
|
107
|
+
try {
|
|
108
|
+
const sync = CloudSyncService.getInstance();
|
|
109
|
+
return sync.getState() === 'syncing';
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Send a browser command to the Chrome Extension via the Cloud relay queue.
|
|
117
|
+
*
|
|
118
|
+
* @param tool - Tool name to execute (e.g., 'navigate', 'screenshot')
|
|
119
|
+
* @param params - Tool parameters
|
|
120
|
+
* @param timeoutMs - Command timeout in milliseconds
|
|
121
|
+
* @param agentName - Optional agent name for display in Extension
|
|
122
|
+
* @returns Response from the Chrome Extension
|
|
123
|
+
* @throws Error if relay is not available or command times out
|
|
124
|
+
*/
|
|
125
|
+
async sendViaRelay(tool, params, timeoutMs = BROWSER_BRIDGE_CONSTANTS.COMMAND_TIMEOUT_MS, agentName) {
|
|
126
|
+
if (!this.extensionDeviceId) {
|
|
127
|
+
throw new Error('No Extension device ID set — cannot send via relay');
|
|
128
|
+
}
|
|
129
|
+
const sync = CloudSyncService.getInstance();
|
|
130
|
+
if (sync.getState() !== 'syncing') {
|
|
131
|
+
throw new Error('CloudSyncService not active — cannot send via relay');
|
|
132
|
+
}
|
|
133
|
+
const id = `relay-cmd-${++this.commandCounter}-${Date.now()}`;
|
|
134
|
+
const command = { id, tool, params };
|
|
135
|
+
if (agentName) {
|
|
136
|
+
command.agentName = agentName;
|
|
137
|
+
}
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const timer = setTimeout(() => {
|
|
140
|
+
this.pendingCommands.delete(id);
|
|
141
|
+
reject(new Error(`Relay command '${tool}' timed out after ${timeoutMs}ms`));
|
|
142
|
+
}, timeoutMs);
|
|
143
|
+
this.pendingCommands.set(id, { resolve, reject, timer });
|
|
144
|
+
// Send via Cloud relay queue
|
|
145
|
+
sync.sendMessage(this.extensionDeviceId, 'browser_command', command)
|
|
146
|
+
.catch((err) => {
|
|
147
|
+
clearTimeout(timer);
|
|
148
|
+
this.pendingCommands.delete(id);
|
|
149
|
+
reject(new Error(`Failed to send relay command: ${err instanceof Error ? err.message : String(err)}`));
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Handle an incoming browser_response message from the Cloud relay queue.
|
|
155
|
+
* Called by CloudSyncService message handler when a browser_response arrives.
|
|
156
|
+
*
|
|
157
|
+
* @param response - The browser command response from the Extension
|
|
158
|
+
*/
|
|
159
|
+
handleRelayResponse(response) {
|
|
160
|
+
if (!response.id) {
|
|
161
|
+
this.logger.warn('Received relay response without command ID', { response });
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const pending = this.pendingCommands.get(response.id);
|
|
165
|
+
if (!pending) {
|
|
166
|
+
this.logger.debug('Received relay response for unknown command', { id: response.id });
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
clearTimeout(pending.timer);
|
|
170
|
+
this.pendingCommands.delete(response.id);
|
|
171
|
+
pending.resolve(response);
|
|
172
|
+
this.logger.debug('Relay command resolved', {
|
|
173
|
+
id: response.id,
|
|
174
|
+
success: response.success,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get the number of pending relay commands.
|
|
179
|
+
*
|
|
180
|
+
* @returns Number of commands awaiting response
|
|
181
|
+
*/
|
|
182
|
+
getPendingCount() {
|
|
183
|
+
return this.pendingCommands.size;
|
|
184
|
+
}
|
|
185
|
+
// -------------------------------------------------------------------------
|
|
186
|
+
// Auto-Discovery: Listen for browser extension devices on CloudSync
|
|
187
|
+
// -------------------------------------------------------------------------
|
|
188
|
+
/**
|
|
189
|
+
* Start listening for CloudSync device events to auto-discover Chrome
|
|
190
|
+
* Extension devices. When a device with role 'browser' or 'chrome-extension'
|
|
191
|
+
* comes online, automatically sets it as the relay target.
|
|
192
|
+
*
|
|
193
|
+
* Also scans the current device list on startup for already-online extensions.
|
|
194
|
+
*/
|
|
195
|
+
startAutoDiscovery() {
|
|
196
|
+
if (this.discoveryActive)
|
|
197
|
+
return;
|
|
198
|
+
try {
|
|
199
|
+
const sync = CloudSyncService.getInstance();
|
|
200
|
+
if (!sync.isStarted()) {
|
|
201
|
+
this.logger.debug('CloudSync not started — deferring auto-discovery');
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Bind event handlers
|
|
205
|
+
this.boundDeviceOnlineHandler = (device) => {
|
|
206
|
+
this.onDeviceOnline(device);
|
|
207
|
+
};
|
|
208
|
+
this.boundDeviceOfflineHandler = (device) => {
|
|
209
|
+
this.onDeviceOffline(device);
|
|
210
|
+
};
|
|
211
|
+
this.boundDevicesUpdatedHandler = (devices) => {
|
|
212
|
+
this.onDevicesUpdated(devices);
|
|
213
|
+
};
|
|
214
|
+
sync.on('device_online', this.boundDeviceOnlineHandler);
|
|
215
|
+
sync.on('device_offline', this.boundDeviceOfflineHandler);
|
|
216
|
+
sync.on('devices_updated', this.boundDevicesUpdatedHandler);
|
|
217
|
+
this.discoveryActive = true;
|
|
218
|
+
// Scan existing device list for already-online browser extensions
|
|
219
|
+
const existingDevices = sync.getDevices();
|
|
220
|
+
this.scanForBrowserDevice(existingDevices);
|
|
221
|
+
this.logger.info('Browser extension auto-discovery started');
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
this.logger.warn('Failed to start auto-discovery', {
|
|
225
|
+
error: err instanceof Error ? err.message : String(err),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Stop listening for device events.
|
|
231
|
+
*/
|
|
232
|
+
stopAutoDiscovery() {
|
|
233
|
+
if (!this.discoveryActive)
|
|
234
|
+
return;
|
|
235
|
+
try {
|
|
236
|
+
const sync = CloudSyncService.getInstance();
|
|
237
|
+
if (this.boundDeviceOnlineHandler) {
|
|
238
|
+
sync.removeListener('device_online', this.boundDeviceOnlineHandler);
|
|
239
|
+
}
|
|
240
|
+
if (this.boundDeviceOfflineHandler) {
|
|
241
|
+
sync.removeListener('device_offline', this.boundDeviceOfflineHandler);
|
|
242
|
+
}
|
|
243
|
+
if (this.boundDevicesUpdatedHandler) {
|
|
244
|
+
sync.removeListener('devices_updated', this.boundDevicesUpdatedHandler);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// CloudSync may already be destroyed
|
|
249
|
+
}
|
|
250
|
+
this.boundDeviceOnlineHandler = null;
|
|
251
|
+
this.boundDeviceOfflineHandler = null;
|
|
252
|
+
this.boundDevicesUpdatedHandler = null;
|
|
253
|
+
this.discoveryActive = false;
|
|
254
|
+
this.logger.info('Browser extension auto-discovery stopped');
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Whether auto-discovery is active.
|
|
258
|
+
*
|
|
259
|
+
* @returns True if listening for device events
|
|
260
|
+
*/
|
|
261
|
+
isDiscoveryActive() {
|
|
262
|
+
return this.discoveryActive;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Check if a SyncDevice represents a Chrome Extension (browser role).
|
|
266
|
+
*
|
|
267
|
+
* @param device - Device to check
|
|
268
|
+
* @returns True if the device has a browser/chrome-extension role
|
|
269
|
+
*/
|
|
270
|
+
isBrowserDevice(device) {
|
|
271
|
+
if (!device.role)
|
|
272
|
+
return false;
|
|
273
|
+
const role = device.role.toLowerCase();
|
|
274
|
+
return BROWSER_DEVICE_ROLES.some((r) => role === r);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Handle a device coming online — if it's a browser extension, set it as relay target.
|
|
278
|
+
*
|
|
279
|
+
* @param device - The device that came online
|
|
280
|
+
*/
|
|
281
|
+
onDeviceOnline(device) {
|
|
282
|
+
if (this.isBrowserDevice(device)) {
|
|
283
|
+
this.extensionDeviceId = device.deviceId;
|
|
284
|
+
this.logger.info('Browser extension auto-discovered (device_online)', {
|
|
285
|
+
deviceId: device.deviceId,
|
|
286
|
+
deviceName: device.deviceName,
|
|
287
|
+
role: device.role,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Handle a device going offline — if it's our current extension, clear the target.
|
|
293
|
+
*
|
|
294
|
+
* @param device - The device that went offline
|
|
295
|
+
*/
|
|
296
|
+
onDeviceOffline(device) {
|
|
297
|
+
if (device.deviceId === this.extensionDeviceId) {
|
|
298
|
+
this.logger.info('Browser extension went offline, clearing relay target', {
|
|
299
|
+
deviceId: device.deviceId,
|
|
300
|
+
deviceName: device.deviceName,
|
|
301
|
+
});
|
|
302
|
+
this.extensionDeviceId = null;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Handle devices_updated — scan for browser extensions in the full list.
|
|
307
|
+
*
|
|
308
|
+
* @param devices - Current device list
|
|
309
|
+
*/
|
|
310
|
+
onDevicesUpdated(devices) {
|
|
311
|
+
this.scanForBrowserDevice(devices);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Scan a device list for browser extensions and set the first online one as relay target.
|
|
315
|
+
*
|
|
316
|
+
* @param devices - Device list to scan
|
|
317
|
+
*/
|
|
318
|
+
scanForBrowserDevice(devices) {
|
|
319
|
+
const browserDevice = devices.find((d) => d.status === 'online' && this.isBrowserDevice(d));
|
|
320
|
+
if (browserDevice && browserDevice.deviceId !== this.extensionDeviceId) {
|
|
321
|
+
this.extensionDeviceId = browserDevice.deviceId;
|
|
322
|
+
this.logger.info('Browser extension found in device list', {
|
|
323
|
+
deviceId: browserDevice.deviceId,
|
|
324
|
+
deviceName: browserDevice.deviceName,
|
|
325
|
+
role: browserDevice.role,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
else if (!browserDevice && this.extensionDeviceId) {
|
|
329
|
+
// No browser device found — check if our current target is still valid
|
|
330
|
+
const stillExists = devices.some((d) => d.deviceId === this.extensionDeviceId && d.status === 'online');
|
|
331
|
+
if (!stillExists) {
|
|
332
|
+
this.logger.info('Browser extension no longer in device list, clearing relay target');
|
|
333
|
+
this.extensionDeviceId = null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Clean up pending commands and timers.
|
|
339
|
+
*/
|
|
340
|
+
cleanup() {
|
|
341
|
+
this.stopAutoDiscovery();
|
|
342
|
+
for (const [, pending] of this.pendingCommands) {
|
|
343
|
+
clearTimeout(pending.timer);
|
|
344
|
+
pending.reject(new Error('Browser relay adapter shutting down'));
|
|
345
|
+
}
|
|
346
|
+
this.pendingCommands.clear();
|
|
347
|
+
this.extensionDeviceId = null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=browser-relay-adapter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-relay-adapter.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/browser/browser-relay-adapter.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,14 @@ export interface CloudInitResult {
|
|
|
30
30
|
* Non-blocking: failures are logged but do not affect Cloud connectivity.
|
|
31
31
|
*/
|
|
32
32
|
export declare function startMessageRouter(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Start the BrowserRelayAdapter auto-discovery to listen for Chrome Extension
|
|
35
|
+
* devices coming online via CloudSync. When a device with role 'browser' is
|
|
36
|
+
* detected, the adapter automatically sets its device ID as the relay target.
|
|
37
|
+
*
|
|
38
|
+
* Non-blocking: failures are logged but do not affect other services.
|
|
39
|
+
*/
|
|
40
|
+
export declare function startBrowserRelayAutoDiscovery(): void;
|
|
33
41
|
/**
|
|
34
42
|
* Attempt to restore Cloud connection from persisted config.
|
|
35
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CA8DzC;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"cloud-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CA8DzC;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,eAAe,CAAC,CAiH5E"}
|
|
@@ -84,6 +84,31 @@ export function startMessageRouter() {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Start the BrowserRelayAdapter auto-discovery to listen for Chrome Extension
|
|
89
|
+
* devices coming online via CloudSync. When a device with role 'browser' is
|
|
90
|
+
* detected, the adapter automatically sets its device ID as the relay target.
|
|
91
|
+
*
|
|
92
|
+
* Non-blocking: failures are logged but do not affect other services.
|
|
93
|
+
*/
|
|
94
|
+
export function startBrowserRelayAutoDiscovery() {
|
|
95
|
+
try {
|
|
96
|
+
import('../browser/browser-relay-adapter.service.js').then(({ BrowserRelayAdapter }) => {
|
|
97
|
+
const adapter = BrowserRelayAdapter.getInstance();
|
|
98
|
+
adapter.startAutoDiscovery();
|
|
99
|
+
logger.info('BrowserRelayAdapter auto-discovery started for extension device detection');
|
|
100
|
+
}).catch((err) => {
|
|
101
|
+
logger.warn('Failed to start BrowserRelayAdapter auto-discovery (non-fatal)', {
|
|
102
|
+
error: err instanceof Error ? err.message : String(err),
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
logger.warn('Failed to start BrowserRelayAdapter auto-discovery (non-fatal)', {
|
|
108
|
+
error: err instanceof Error ? err.message : String(err),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
87
112
|
/**
|
|
88
113
|
* Attempt to restore Cloud connection from persisted config.
|
|
89
114
|
*
|
|
@@ -168,6 +193,8 @@ export async function initializeCloudIfConfigured() {
|
|
|
168
193
|
});
|
|
169
194
|
// Start MessageRouterService to enable cross-device agent communication
|
|
170
195
|
startMessageRouter();
|
|
196
|
+
// Start browser extension auto-discovery via CloudSync device events
|
|
197
|
+
startBrowserRelayAutoDiscovery();
|
|
171
198
|
}
|
|
172
199
|
catch (syncError) {
|
|
173
200
|
logger.warn('CloudSyncService start failed during initialization (non-fatal)', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-initializer.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-initializer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cloud-initializer.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AAGrE,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AAcrF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB;IACjC,IAAI,CAAC;QACJ,8CAA8C;QAC9C,MAAM,CAAC,wCAAwC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE;YACxF,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC;YAElD,mEAAmE;YACnE,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;gBAC7D,IAAI,CAAC;oBACJ,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBACtE,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;oBAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,WAAW,aAAa,EAAE,CAAC;oBAC9E,CAAC;oBAED,0CAA0C;oBAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;oBACzE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;oBAC9D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACpB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;oBACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;oBAEpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,OAAO;wBACN,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACvD,CAAC;gBACH,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,iEAAiE;YACjE,kEAAkE;YAClE,sEAAsE;YACtE,IAAI,CAAC;gBACJ,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBAC1E,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;gBACxC,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,EAAE;wBACzC,KAAK,CAAC,OAAO,CAAC,KAA4B,CAAC,CAAC;oBAC7C,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACzE,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE;gBAC/D,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACvD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE;YAC/D,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACvD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B;IAC7C,IAAI,CAAC;QACJ,MAAM,CAAC,6CAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE;YACtF,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;YAClD,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,CAAC,IAAI,CAAC,gEAAgE,EAAE;gBAC7E,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACvD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,gEAAgE,EAAE;YAC7E,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACvD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAChD,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;IAEhD,oDAAoD;IACpD,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE;YAC/D,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;SACtC,CAAC,CAAC;QAEH,iEAAiE;QACjE,EAAE;QACF,0EAA0E;QAC1E,4EAA4E;QAC5E,wEAAwE;QACxE,2EAA2E;QAC3E,qEAAqE;QACrE,sEAAsE;QACtE,0EAA0E;QAC1E,iDAAiD;QACjD,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC;YACJ,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yDAAyD,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,8EAA8E;gBAC9E,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;oBAEpE,gEAAgE;oBAChE,oDAAoD;oBACpD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAE5C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;oBACjD,IAAI,SAAS,EAAE,CAAC;wBACf,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC;wBAChD,iBAAiB,GAAG,IAAI,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,CAAC;yBAAM,CAAC;wBACP,MAAM,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;oBAChG,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;gBAChG,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,CAAC;QAED,gFAAgF;QAChF,iFAAiF;QACjF,MAAM,CAAC,YAAY,CAClB,MAAM,CAAC,QAAQ,EACf,WAAW,EACV,MAAM,CAAC,IAAkB,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,EACxD,MAAM,CAAC,YAAY,CACnB,CAAC;QAEF,4DAA4D;QAC5D,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,CAAC,mBAAmB,EAAE,CAAC;YACjF,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;gBACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;gBAC7D,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC3B,CAAC,CAAC;YAEH,wEAAwE;YACxE,kBAAkB,EAAE,CAAC;YAErB,qEAAqE;YACrE,8BAA8B,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,iEAAiE,EAAE;gBAC9E,KAAK,EAAE,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;aACzE,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,cAAc,EAAE,iBAAiB;SACjC,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;YAC7D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO;YACN,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7D,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -99,7 +99,7 @@ export interface HeartbeatPayload {
|
|
|
99
99
|
timestamp: string;
|
|
100
100
|
}
|
|
101
101
|
/** All supported message types for inter-device communication. */
|
|
102
|
-
export type MessageType = 'command' | 'sync_teams' | 'sync_settings' | 'notification' | 'relay' | 'ping' | 'task_update' | 'agent_message' | 'cross-machine';
|
|
102
|
+
export type MessageType = 'command' | 'sync_teams' | 'sync_settings' | 'notification' | 'relay' | 'ping' | 'task_update' | 'agent_message' | 'cross-machine' | 'browser_command' | 'browser_response';
|
|
103
103
|
/** Valid message type values for runtime validation. */
|
|
104
104
|
export declare const MESSAGE_TYPES: readonly MessageType[];
|
|
105
105
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-sync.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-sync.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,yDAAyD;AACzD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;AAE9E,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,0DAA2D,CAAC;AAM1F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,MAAM,EAAE,QAAQ,CAAC;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,kEAAkE;AAClE,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,YAAY,GACZ,eAAe,GACf,cAAc,GACd,OAAO,GACP,MAAM,GACN,aAAa,GACb,eAAe,GACf,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-sync.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-sync.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-sync.types.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-sync.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-sync.types.js","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/cloud-sync.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAU,CAAC;AA2H1F,wDAAwD;AACxD,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,SAAS;IACT,YAAY;IACZ,eAAe;IACf,cAAc;IACd,OAAO;IACP,MAAM;IACN,aAAa;IACb,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAuFX;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QACrC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CACvC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAoB,CAAC,CAAC;AACnF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAChC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;QACrD,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CACxC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;QACtC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS;QAClC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAC/B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAChC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAChC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Export/Import Service
|
|
3
|
+
*
|
|
4
|
+
* Bundles a team's config, prompts, norms, and cron tasks into a single
|
|
5
|
+
* exportable JSON document. Supports importing from that format to create
|
|
6
|
+
* a complete team with all associated data.
|
|
7
|
+
*
|
|
8
|
+
* Part of the team-scoped cron feature (Phase 3).
|
|
9
|
+
*
|
|
10
|
+
* @module services/core/team-export.service
|
|
11
|
+
*/
|
|
12
|
+
import type { Team } from '../../types/index.js';
|
|
13
|
+
import type { CronTask } from '../../types/cron-task.types.js';
|
|
14
|
+
import type { StorageService } from './storage.service.js';
|
|
15
|
+
/**
|
|
16
|
+
* Complete team export bundle containing all team data.
|
|
17
|
+
*
|
|
18
|
+
* This is the portable format for team backup, migration, and sharing.
|
|
19
|
+
*/
|
|
20
|
+
export interface TeamExport {
|
|
21
|
+
/** Format version for forward compatibility */
|
|
22
|
+
version: '1.0';
|
|
23
|
+
/** ISO timestamp when the export was created */
|
|
24
|
+
exportedAt: string;
|
|
25
|
+
/** Team configuration (config.json content) */
|
|
26
|
+
team: Team;
|
|
27
|
+
/** Member prompts: memberId → prompt content */
|
|
28
|
+
prompts: Record<string, string>;
|
|
29
|
+
/** Team norms/SOPs: filename → markdown content */
|
|
30
|
+
norms: Record<string, string>;
|
|
31
|
+
/** Team-scoped cron tasks */
|
|
32
|
+
cronTasks: CronTask[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of a team import operation.
|
|
36
|
+
*/
|
|
37
|
+
export interface TeamImportResult {
|
|
38
|
+
/** The created team (may have new ID if conflict) */
|
|
39
|
+
team: Team;
|
|
40
|
+
/** Number of prompts written */
|
|
41
|
+
promptsImported: number;
|
|
42
|
+
/** Number of norms written */
|
|
43
|
+
normsImported: number;
|
|
44
|
+
/** Number of cron tasks created (with new IDs) */
|
|
45
|
+
cronTasksImported: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Service for exporting and importing complete team bundles.
|
|
49
|
+
*
|
|
50
|
+
* Export collects: config.json + prompts/*.md + norms/*.md + cron-tasks.json
|
|
51
|
+
* Import creates: team directory + prompts + norms + cron tasks with new IDs
|
|
52
|
+
*/
|
|
53
|
+
export declare class TeamExportService {
|
|
54
|
+
private storageService;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new TeamExportService.
|
|
57
|
+
*
|
|
58
|
+
* @param storageService - StorageService for team data access
|
|
59
|
+
*/
|
|
60
|
+
constructor(storageService: StorageService);
|
|
61
|
+
/**
|
|
62
|
+
* Export a team and all its associated data as a single JSON bundle.
|
|
63
|
+
*
|
|
64
|
+
* Collects:
|
|
65
|
+
* - Team config (config.json)
|
|
66
|
+
* - Member prompts (prompts/*.md)
|
|
67
|
+
* - Norms/SOPs (norms/*.md)
|
|
68
|
+
* - Cron tasks (cron-tasks.json)
|
|
69
|
+
*
|
|
70
|
+
* @param teamId - ID of the team to export
|
|
71
|
+
* @returns Complete team export bundle
|
|
72
|
+
* @throws Error if team not found
|
|
73
|
+
*/
|
|
74
|
+
exportTeam(teamId: string): Promise<TeamExport>;
|
|
75
|
+
/**
|
|
76
|
+
* Import a team from a complete export bundle.
|
|
77
|
+
*
|
|
78
|
+
* Creates:
|
|
79
|
+
* - Team via storageService.saveTeam()
|
|
80
|
+
* - Prompts written to teams/{teamId}/prompts/
|
|
81
|
+
* - Norms written to teams/{teamId}/norms/
|
|
82
|
+
* - Cron tasks with NEW IDs to teams/{teamId}/cron-tasks.json
|
|
83
|
+
*
|
|
84
|
+
* @param data - The team export bundle to import
|
|
85
|
+
* @returns Import result with counts
|
|
86
|
+
* @throws Error if import data is invalid
|
|
87
|
+
*/
|
|
88
|
+
importTeam(data: TeamExport): Promise<TeamImportResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Read cron tasks from a team directory.
|
|
91
|
+
*
|
|
92
|
+
* @param teamDir - Path to the team directory
|
|
93
|
+
* @returns Array of cron tasks, empty if file doesn't exist
|
|
94
|
+
*/
|
|
95
|
+
private readCronTasks;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate a unique cron task ID.
|
|
99
|
+
*
|
|
100
|
+
* @returns ID in format "cron-xxxxxxxx"
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateCronId(): string;
|
|
103
|
+
//# sourceMappingURL=team-export.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-export.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/team-export.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC;IACf,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,IAAI,EAAE,IAAI,CAAC;IACX,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,6BAA6B;IAC7B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,IAAI,EAAE,IAAI,CAAC;IACX,gCAAgC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAMD;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAiB;IAEvC;;;;OAIG;gBACS,cAAc,EAAE,cAAc;IAI1C;;;;;;;;;;;;OAYG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqDrD;;;;;;;;;;;;OAYG;IACG,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqD7D;;;;;OAKG;YACW,aAAa;CAU5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|