crewly 1.5.10 → 1.5.12
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/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/config/skills/orchestrator/update-team-member/SKILL.md +36 -0
- package/config/skills/orchestrator/update-team-member/execute.sh +25 -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.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +66 -46
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- 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.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -0
- 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.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +3 -3
- 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-76782e9e.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
|
@@ -1,73 +1,211 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser Controller
|
|
3
3
|
*
|
|
4
|
-
* REST API handlers for
|
|
4
|
+
* REST API handlers for Crewly in Chrome. Each handler translates an
|
|
5
5
|
* HTTP request into a WebSocket command sent to the connected Chrome
|
|
6
6
|
* Extension, waits for the response, and returns it as JSON.
|
|
7
7
|
*
|
|
8
8
|
* @module controllers/browser/browser.controller
|
|
9
9
|
*/
|
|
10
10
|
import { BrowserBridgeService } from '../../services/browser/browser-bridge.service.js';
|
|
11
|
+
import { BrowserProxyService } from '../../services/browser/browser-proxy.service.js';
|
|
12
|
+
import { CloudClientService } from '../../services/cloud/cloud-client.service.js';
|
|
11
13
|
/**
|
|
12
14
|
* GET /api/browser/status
|
|
13
|
-
* Returns the current
|
|
15
|
+
* Returns the current Crewly in Chrome connection status,
|
|
16
|
+
* including proxy relay state and available browser instances.
|
|
14
17
|
*
|
|
15
18
|
* @param _req - Express request (unused)
|
|
16
19
|
* @param res - Express response
|
|
17
20
|
*/
|
|
18
21
|
export function getStatus(_req, res) {
|
|
19
22
|
const bridge = BrowserBridgeService.getInstance();
|
|
20
|
-
|
|
23
|
+
const proxy = BrowserProxyService.getInstance();
|
|
24
|
+
const bridgeStatus = bridge.getStatus();
|
|
25
|
+
res.json({
|
|
26
|
+
...bridgeStatus,
|
|
27
|
+
proxy: {
|
|
28
|
+
state: proxy.getState(),
|
|
29
|
+
available: proxy.isAvailable(),
|
|
30
|
+
instances: proxy.getInstances(),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
21
33
|
}
|
|
22
34
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* Extracts agent name from X-Agent-Session header if present.
|
|
35
|
+
* GET /api/browser/instances
|
|
36
|
+
* List all connected browser instances available for command routing.
|
|
26
37
|
*
|
|
27
|
-
* @param
|
|
28
|
-
* @param res - Express response
|
|
29
|
-
* @param tool - Chrome Extension tool name
|
|
30
|
-
* @param params - Tool parameters
|
|
31
|
-
* @param timeoutMs - Optional command timeout
|
|
38
|
+
* @param _req - Express request (unused)
|
|
39
|
+
* @param res - Express response
|
|
32
40
|
*/
|
|
33
|
-
|
|
41
|
+
export function getInstances(_req, res) {
|
|
34
42
|
const bridge = BrowserBridgeService.getInstance();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
const proxy = BrowserProxyService.getInstance();
|
|
44
|
+
// Combine direct WS clients and relay proxy instances
|
|
45
|
+
const directClients = bridge.getStatus().clientCount;
|
|
46
|
+
const proxyInstances = proxy.getInstances();
|
|
47
|
+
res.json({
|
|
48
|
+
success: true,
|
|
49
|
+
instances: proxyInstances,
|
|
50
|
+
directClientCount: directClients,
|
|
51
|
+
proxyConnected: proxy.isConnected(),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* POST /api/browser/proxy/connect
|
|
56
|
+
* Manually connect the BrowserProxyService to the Cloud Relay.
|
|
57
|
+
* Uses the current CloudClientService token. Call this when the proxy
|
|
58
|
+
* is disconnected but the cloud connection is active.
|
|
59
|
+
*
|
|
60
|
+
* @param _req - Express request (unused)
|
|
61
|
+
* @param res - Express response
|
|
62
|
+
*/
|
|
63
|
+
export async function connectProxy(_req, res) {
|
|
64
|
+
const proxy = BrowserProxyService.getInstance();
|
|
65
|
+
if (proxy.isConnected()) {
|
|
66
|
+
res.json({
|
|
67
|
+
success: true,
|
|
68
|
+
message: 'Proxy already connected',
|
|
69
|
+
state: proxy.getState(),
|
|
70
|
+
instances: proxy.getInstances(),
|
|
40
71
|
});
|
|
41
72
|
return;
|
|
42
73
|
}
|
|
43
|
-
|
|
44
|
-
|
|
74
|
+
try {
|
|
75
|
+
const cloudClient = CloudClientService.getInstance();
|
|
76
|
+
const token = cloudClient.getToken();
|
|
77
|
+
if (!token) {
|
|
78
|
+
res.status(400).json({
|
|
79
|
+
success: false,
|
|
80
|
+
error: 'No cloud token available. Connect to Cloud first via /api/cloud/connect.',
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
proxy.connect(token);
|
|
85
|
+
// Wait a moment for the WS connection + registration to complete
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
87
|
+
res.json({
|
|
88
|
+
success: true,
|
|
89
|
+
message: 'Proxy connecting to Cloud Relay',
|
|
90
|
+
state: proxy.getState(),
|
|
91
|
+
instances: proxy.getInstances(),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
res.status(500).json({
|
|
96
|
+
success: false,
|
|
97
|
+
error: err.message,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract the target browser instance from the request query or body.
|
|
103
|
+
*
|
|
104
|
+
* @param req - Express request
|
|
105
|
+
* @returns Instance name/ID string or undefined for auto-select
|
|
106
|
+
*/
|
|
107
|
+
function resolveInstanceParam(req) {
|
|
108
|
+
return req.query.instance
|
|
109
|
+
|| req.body?.instance
|
|
110
|
+
|| undefined;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract the agent name from request headers or body.
|
|
114
|
+
* Session names look like "crewly-product-max-118c0421" — extracts "max".
|
|
115
|
+
*
|
|
116
|
+
* @param req - Express request
|
|
117
|
+
* @returns Agent name string or undefined
|
|
118
|
+
*/
|
|
119
|
+
function extractAgentName(req) {
|
|
45
120
|
let agentName = req.body?.agentName
|
|
46
121
|
|| req.headers['x-agent-name']
|
|
47
122
|
|| undefined;
|
|
48
123
|
if (!agentName) {
|
|
49
124
|
const session = req.headers['x-agent-session'];
|
|
50
125
|
if (session) {
|
|
51
|
-
// Extract friendly name from session: "crewly-product-max-118c0421" → "max"
|
|
52
126
|
const parts = session.split('-');
|
|
53
127
|
if (parts.length >= 3) {
|
|
54
|
-
agentName = parts[parts.length - 2];
|
|
128
|
+
agentName = parts[parts.length - 2];
|
|
55
129
|
}
|
|
56
130
|
else {
|
|
57
131
|
agentName = session;
|
|
58
132
|
}
|
|
59
133
|
}
|
|
60
134
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
135
|
+
return agentName;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Helper: send a tool command to the Chrome Extension and return the result.
|
|
139
|
+
*
|
|
140
|
+
* Tries three paths in order:
|
|
141
|
+
* 1. Direct WebSocket (BrowserBridgeService) — fastest
|
|
142
|
+
* 2. Browser Proxy (BrowserProxyService via Cloud Relay relay_to) — supports multi-instance
|
|
143
|
+
* 3. Legacy relay adapter (BrowserRelayAdapter via CloudSync HTTP queue) — fallback
|
|
144
|
+
*
|
|
145
|
+
* Supports `?instance=` query param for targeting a specific browser instance.
|
|
146
|
+
*
|
|
147
|
+
* @param req - Express request (for extracting agent metadata and instance param)
|
|
148
|
+
* @param res - Express response object
|
|
149
|
+
* @param tool - Chrome Extension tool name
|
|
150
|
+
* @param params - Tool parameters
|
|
151
|
+
* @param timeoutMs - Optional command timeout
|
|
152
|
+
*/
|
|
153
|
+
async function sendToolCommand(req, res, tool, params, timeoutMs) {
|
|
154
|
+
const bridge = BrowserBridgeService.getInstance();
|
|
155
|
+
const proxy = BrowserProxyService.getInstance();
|
|
156
|
+
const instance = resolveInstanceParam(req);
|
|
157
|
+
const agentName = extractAgentName(req);
|
|
158
|
+
// Path 1: If a specific instance is requested AND proxy is available, use proxy
|
|
159
|
+
if (instance && proxy.isAvailable()) {
|
|
160
|
+
try {
|
|
161
|
+
const result = await proxy.sendCommand(tool, params, instance, timeoutMs, agentName);
|
|
162
|
+
res.json(result);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
res.status(504).json({
|
|
167
|
+
success: false,
|
|
168
|
+
error: err.message,
|
|
169
|
+
});
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
64
172
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
173
|
+
// Path 2: Direct WebSocket connection (fastest, no instance routing)
|
|
174
|
+
if (bridge.isConnected()) {
|
|
175
|
+
try {
|
|
176
|
+
const result = await bridge.sendCommand(tool, params, timeoutMs, agentName);
|
|
177
|
+
res.json(result);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
res.status(504).json({
|
|
182
|
+
success: false,
|
|
183
|
+
error: err.message,
|
|
184
|
+
});
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Path 3: Proxy relay (relay_to addressed messaging)
|
|
189
|
+
if (proxy.isAvailable()) {
|
|
190
|
+
try {
|
|
191
|
+
const result = await proxy.sendCommand(tool, params, instance, timeoutMs, agentName);
|
|
192
|
+
res.json(result);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
res.status(504).json({
|
|
197
|
+
success: false,
|
|
198
|
+
error: err.message,
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
70
202
|
}
|
|
203
|
+
// No path available
|
|
204
|
+
res.status(503).json({
|
|
205
|
+
success: false,
|
|
206
|
+
error: 'No Chrome browser connected. Please connect the Crewly Chrome Extension first.',
|
|
207
|
+
code: 'NO_BROWSER_CLIENT',
|
|
208
|
+
});
|
|
71
209
|
}
|
|
72
210
|
/**
|
|
73
211
|
* POST /api/browser/navigate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser Routes
|
|
3
3
|
*
|
|
4
|
-
* Router configuration for
|
|
4
|
+
* Router configuration for Crewly in Chrome REST API endpoints.
|
|
5
5
|
* These endpoints are called by the remote-browser skill to control
|
|
6
6
|
* the user's Chrome browser via the WebSocket bridge.
|
|
7
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA6BjC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CA+E5C"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser Routes
|
|
3
3
|
*
|
|
4
|
-
* Router configuration for
|
|
4
|
+
* Router configuration for Crewly in Chrome REST API endpoints.
|
|
5
5
|
* These endpoints are called by the remote-browser skill to control
|
|
6
6
|
* the user's Chrome browser via the WebSocket bridge.
|
|
7
7
|
*
|
|
8
8
|
* @module controllers/browser/browser.routes
|
|
9
9
|
*/
|
|
10
10
|
import { Router } from 'express';
|
|
11
|
-
import { getStatus, navigate, screenshot, readText, getTabs, execute, click, fill, type, scroll, scrollInElement, hover, pressKey, getElement, waitForSelector, getCookies, getLocalStorage, getConsole, fullPageScreenshot, getInteractiveElements, searchText, listOptions, setFileInput, } from './browser.controller.js';
|
|
11
|
+
import { getStatus, getInstances, connectProxy, navigate, screenshot, readText, getTabs, execute, click, fill, type, scroll, scrollInElement, hover, pressKey, getElement, waitForSelector, getCookies, getLocalStorage, getConsole, fullPageScreenshot, getInteractiveElements, searchText, listOptions, setFileInput, } from './browser.controller.js';
|
|
12
12
|
/**
|
|
13
13
|
* Create the browser bridge router with all browser control endpoints.
|
|
14
14
|
*
|
|
@@ -16,8 +16,12 @@ import { getStatus, navigate, screenshot, readText, getTabs, execute, click, fil
|
|
|
16
16
|
*/
|
|
17
17
|
export function createBrowserRouter() {
|
|
18
18
|
const router = Router();
|
|
19
|
-
// GET /api/browser/status — connection status
|
|
19
|
+
// GET /api/browser/status — connection status (includes proxy + instances)
|
|
20
20
|
router.get('/status', getStatus);
|
|
21
|
+
// GET /api/browser/instances — list connected browser instances
|
|
22
|
+
router.get('/instances', getInstances);
|
|
23
|
+
// POST /api/browser/proxy/connect — manually connect proxy to Cloud Relay
|
|
24
|
+
router.post('/proxy/connect', connectProxy);
|
|
21
25
|
// GET /api/browser/tabs — list open tabs
|
|
22
26
|
router.get('/tabs', getTabs);
|
|
23
27
|
// GET /api/browser/cookies — get cookies (optional ?domain=)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,eAAe,EACf,KAAK,EACL,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,UAAU,EACV,WAAW,EACX,YAAY,GACZ,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IAClC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,
|
|
1
|
+
{"version":3,"file":"browser.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/browser/browser.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Controller — V2 Data Architecture
|
|
3
|
+
*
|
|
4
|
+
* REST API handlers for the Unified Data Model.
|
|
5
|
+
* Delegates to DataObjectStore, SchemaRegistry, and SinkRegistry services.
|
|
6
|
+
*
|
|
7
|
+
* @see specs/crewly-data-architecture-v2.md
|
|
8
|
+
* @module controllers/data/data.controller
|
|
9
|
+
*/
|
|
10
|
+
import type { Request, Response } from 'express';
|
|
11
|
+
/**
|
|
12
|
+
* GET /api/v2/data/objects — List DataObjects with optional filters.
|
|
13
|
+
*/
|
|
14
|
+
export declare function listDataObjects(req: Request, res: Response): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* GET /api/v2/data/objects/:id — Fetch a single DataObject by ID.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getDataObject(req: Request, res: Response): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* POST /api/v2/data/objects — Create a new DataObject.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createDataObject(req: Request, res: Response): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* PATCH /api/v2/data/objects/:id — Update a DataObject.
|
|
25
|
+
*/
|
|
26
|
+
export declare function updateDataObject(req: Request, res: Response): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* DELETE /api/v2/data/objects/:id — Delete or archive a DataObject.
|
|
29
|
+
*/
|
|
30
|
+
export declare function deleteDataObject(req: Request, res: Response): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* GET /api/v2/data/schemas — List all available schemas.
|
|
33
|
+
*/
|
|
34
|
+
export declare function listSchemas(_req: Request, res: Response): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* GET /api/v2/data/sinks — List all registered sinks.
|
|
37
|
+
*/
|
|
38
|
+
export declare function listSinks(_req: Request, res: Response): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* POST /api/v2/data/sinks/:sinkId — Ingest data into a specific sink.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ingestToSink(req: Request, res: Response): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* GET /api/v2/data/sync/status — Check dual-machine sync health.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSyncStatus(_req: Request, res: Response): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=data.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/data/data.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYjD;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Controller — V2 Data Architecture
|
|
3
|
+
*
|
|
4
|
+
* REST API handlers for the Unified Data Model.
|
|
5
|
+
* Delegates to DataObjectStore, SchemaRegistry, and SinkRegistry services.
|
|
6
|
+
*
|
|
7
|
+
* @see specs/crewly-data-architecture-v2.md
|
|
8
|
+
* @module controllers/data/data.controller
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the active project path from the request or environment.
|
|
12
|
+
*
|
|
13
|
+
* @returns Absolute project path
|
|
14
|
+
*/
|
|
15
|
+
function resolveProjectPath() {
|
|
16
|
+
return process.env.CREWLY_PROJECT_PATH || process.cwd();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* GET /api/v2/data/objects — List DataObjects with optional filters.
|
|
20
|
+
*/
|
|
21
|
+
export async function listDataObjects(req, res) {
|
|
22
|
+
try {
|
|
23
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
24
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
25
|
+
const filters = {
|
|
26
|
+
type: req.query.type,
|
|
27
|
+
scope: req.query.scope,
|
|
28
|
+
status: req.query.status,
|
|
29
|
+
namespace: req.query.namespace,
|
|
30
|
+
owner_id: req.query.owner_id,
|
|
31
|
+
tags: req.query.tags ? req.query.tags.split(',') : undefined,
|
|
32
|
+
};
|
|
33
|
+
const objects = await store.list(filters);
|
|
34
|
+
res.json({ success: true, data: objects, count: objects.length });
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
res.status(500).json({ success: false, error: err.message });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* GET /api/v2/data/objects/:id — Fetch a single DataObject by ID.
|
|
42
|
+
*/
|
|
43
|
+
export async function getDataObject(req, res) {
|
|
44
|
+
try {
|
|
45
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
46
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
47
|
+
const obj = await store.getById(req.params.id);
|
|
48
|
+
if (!obj) {
|
|
49
|
+
res.status(404).json({ success: false, error: 'DataObject not found' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
res.json({ success: true, data: obj });
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
res.status(500).json({ success: false, error: err.message });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* POST /api/v2/data/objects — Create a new DataObject.
|
|
60
|
+
*/
|
|
61
|
+
export async function createDataObject(req, res) {
|
|
62
|
+
try {
|
|
63
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
64
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
65
|
+
const { type, scope, schema_id, owner_id, namespace, payload, tags, source_thread_id, confidence_score } = req.body;
|
|
66
|
+
if (!type || !scope || !owner_id || !namespace) {
|
|
67
|
+
res.status(400).json({ success: false, error: 'Missing required fields: type, scope, owner_id, namespace' });
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (schema_id) {
|
|
71
|
+
try {
|
|
72
|
+
const { SchemaRegistryService } = await import('../../services/data/schema-registry.service.js');
|
|
73
|
+
const result = SchemaRegistryService.getInstance().validate(schema_id, payload || {});
|
|
74
|
+
if (!result.valid) {
|
|
75
|
+
res.status(422).json({ success: false, error: 'Schema validation failed', validationErrors: result.errors });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* schema service not loaded */ }
|
|
80
|
+
}
|
|
81
|
+
const obj = await store.create({ type, scope, schema_id: schema_id || '', owner_id, namespace, payload: payload || {}, tags: tags || [], source_thread_id, confidence_score });
|
|
82
|
+
res.status(201).json({ success: true, data: obj });
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
res.status(500).json({ success: false, error: err.message });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* PATCH /api/v2/data/objects/:id — Update a DataObject.
|
|
90
|
+
*/
|
|
91
|
+
export async function updateDataObject(req, res) {
|
|
92
|
+
try {
|
|
93
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
94
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
95
|
+
const obj = await store.update(req.params.id, req.body);
|
|
96
|
+
if (!obj) {
|
|
97
|
+
res.status(404).json({ success: false, error: 'DataObject not found' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
res.json({ success: true, data: obj });
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
res.status(500).json({ success: false, error: err.message });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* DELETE /api/v2/data/objects/:id — Delete or archive a DataObject.
|
|
108
|
+
*/
|
|
109
|
+
export async function deleteDataObject(req, res) {
|
|
110
|
+
try {
|
|
111
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
112
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
113
|
+
if (req.query.hard === 'true') {
|
|
114
|
+
const deleted = await store.delete(req.params.id);
|
|
115
|
+
if (!deleted) {
|
|
116
|
+
res.status(404).json({ success: false, error: 'DataObject not found' });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
res.json({ success: true, message: 'DataObject permanently deleted' });
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const obj = await store.update(req.params.id, { status: 'archived' });
|
|
123
|
+
if (!obj) {
|
|
124
|
+
res.status(404).json({ success: false, error: 'DataObject not found' });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
res.json({ success: true, data: obj, message: 'DataObject archived' });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
res.status(500).json({ success: false, error: err.message });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* GET /api/v2/data/schemas — List all available schemas.
|
|
136
|
+
*/
|
|
137
|
+
export async function listSchemas(_req, res) {
|
|
138
|
+
try {
|
|
139
|
+
const { SchemaRegistryService } = await import('../../services/data/schema-registry.service.js');
|
|
140
|
+
res.json({ success: true, data: SchemaRegistryService.getInstance().listSchemas() });
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
res.status(500).json({ success: false, error: err.message });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* GET /api/v2/data/sinks — List all registered sinks.
|
|
148
|
+
*/
|
|
149
|
+
export async function listSinks(_req, res) {
|
|
150
|
+
try {
|
|
151
|
+
const { SinkRegistryService } = await import('../../services/data/sink-registry.service.js');
|
|
152
|
+
res.json({ success: true, data: SinkRegistryService.getInstance().listSinks() });
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
res.status(500).json({ success: false, error: err.message });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* POST /api/v2/data/sinks/:sinkId — Ingest data into a specific sink.
|
|
160
|
+
*/
|
|
161
|
+
export async function ingestToSink(req, res) {
|
|
162
|
+
try {
|
|
163
|
+
const { SinkRegistryService } = await import('../../services/data/sink-registry.service.js');
|
|
164
|
+
const { DataObjectStore } = await import('../../services/data/data-object-store.service.js');
|
|
165
|
+
const sinkRegistry = SinkRegistryService.getInstance();
|
|
166
|
+
const store = DataObjectStore.getInstance(resolveProjectPath());
|
|
167
|
+
const sink = sinkRegistry.getSink(req.params.sinkId);
|
|
168
|
+
if (!sink) {
|
|
169
|
+
res.status(404).json({ success: false, error: `Sink "${req.params.sinkId}" not found` });
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const { data, owner_id } = req.body;
|
|
173
|
+
if (!data || typeof data !== 'object') {
|
|
174
|
+
res.status(400).json({ success: false, error: 'Missing required field: data (object)' });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (sink.schema_id) {
|
|
178
|
+
try {
|
|
179
|
+
const { SchemaRegistryService: SR } = await import('../../services/data/schema-registry.service.js');
|
|
180
|
+
const result = SR.getInstance().validate(sink.schema_id, data);
|
|
181
|
+
if (!result.valid) {
|
|
182
|
+
res.status(422).json({ success: false, error: 'Schema validation failed', validationErrors: result.errors, sink: sink.id });
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch { /* schema service not loaded */ }
|
|
187
|
+
}
|
|
188
|
+
const obj = await store.create({ type: 'sink_entry', scope: 'project', schema_id: sink.schema_id || '', owner_id: owner_id || 'system', namespace: sink.id, payload: data, tags: [], source_thread_id: req.body.source_thread_id });
|
|
189
|
+
res.status(201).json({ success: true, data: obj, sink: sink.id, message: `Data ingested into sink "${sink.name}"` });
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
res.status(500).json({ success: false, error: err.message });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* GET /api/v2/data/sync/status — Check dual-machine sync health.
|
|
197
|
+
*/
|
|
198
|
+
export async function getSyncStatus(_req, res) {
|
|
199
|
+
res.json({ success: true, data: { syncEnabled: false, localObjects: 0, syncedObjects: 0, conflictObjects: 0, lastSyncAt: null, message: 'Sync not yet enabled (Phase 3)' } });
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=data.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/data/data.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data API Routes — V2 Data Architecture
|
|
3
|
+
*
|
|
4
|
+
* REST endpoints for the Unified Data Model (UDM).
|
|
5
|
+
* Provides CRUD for DataObjects, schema listing, sink ingestion,
|
|
6
|
+
* and sync status.
|
|
7
|
+
*
|
|
8
|
+
* @see specs/crewly-data-architecture-v2.md — Section 7
|
|
9
|
+
* @module controllers/data/data.routes
|
|
10
|
+
*/
|
|
11
|
+
import { Router } from 'express';
|
|
12
|
+
/**
|
|
13
|
+
* Create the Data API router for /api/v2/data routes.
|
|
14
|
+
*
|
|
15
|
+
* @returns Express router with all data endpoints
|
|
16
|
+
*/
|
|
17
|
+
export declare function createDataRouter(): Router;
|
|
18
|
+
//# sourceMappingURL=data.routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/data/data.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAajC;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAmCzC"}
|