@awcp/sdk 0.0.1 → 0.0.2
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/dist/delegator/bin/daemon.d.ts +0 -45
- package/dist/delegator/bin/daemon.d.ts.map +1 -1
- package/dist/delegator/bin/daemon.js +1 -85
- package/dist/delegator/bin/daemon.js.map +1 -1
- package/dist/delegator/config.d.ts +9 -71
- package/dist/delegator/config.d.ts.map +1 -1
- package/dist/delegator/config.js +1 -12
- package/dist/delegator/config.js.map +1 -1
- package/dist/delegator/executor-client.d.ts +6 -13
- package/dist/delegator/executor-client.d.ts.map +1 -1
- package/dist/delegator/executor-client.js +52 -14
- package/dist/delegator/executor-client.js.map +1 -1
- package/dist/delegator/export-manager.d.ts +27 -0
- package/dist/delegator/export-manager.d.ts.map +1 -0
- package/dist/delegator/export-manager.js +85 -0
- package/dist/delegator/export-manager.js.map +1 -0
- package/dist/delegator/index.d.ts +2 -2
- package/dist/delegator/index.d.ts.map +1 -1
- package/dist/delegator/index.js +3 -3
- package/dist/delegator/index.js.map +1 -1
- package/dist/delegator/service.d.ts +5 -69
- package/dist/delegator/service.d.ts.map +1 -1
- package/dist/delegator/service.js +96 -104
- package/dist/delegator/service.js.map +1 -1
- package/dist/executor/config.d.ts +11 -81
- package/dist/executor/config.d.ts.map +1 -1
- package/dist/executor/config.js +2 -9
- package/dist/executor/config.js.map +1 -1
- package/dist/executor/index.d.ts +2 -3
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +2 -3
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/service.d.ts +8 -50
- package/dist/executor/service.d.ts.map +1 -1
- package/dist/executor/service.js +100 -136
- package/dist/executor/service.js.map +1 -1
- package/dist/executor/workspace-manager.d.ts +30 -0
- package/dist/executor/workspace-manager.d.ts.map +1 -0
- package/dist/executor/workspace-manager.js +75 -0
- package/dist/executor/workspace-manager.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server/express/awcp-delegator-handler.d.ts +0 -41
- package/dist/server/express/awcp-delegator-handler.d.ts.map +1 -1
- package/dist/server/express/awcp-delegator-handler.js +0 -49
- package/dist/server/express/awcp-delegator-handler.js.map +1 -1
- package/dist/server/express/awcp-executor-handler.d.ts +0 -27
- package/dist/server/express/awcp-executor-handler.d.ts.map +1 -1
- package/dist/server/express/awcp-executor-handler.js +23 -38
- package/dist/server/express/awcp-executor-handler.js.map +1 -1
- package/package.json +6 -3
- package/dist/executor/delegator-client.d.ts +0 -18
- package/dist/executor/delegator-client.d.ts.map +0 -1
- package/dist/executor/delegator-client.js +0 -37
- package/dist/executor/delegator-client.js.map +0 -1
- package/dist/executor/policy.d.ts +0 -55
- package/dist/executor/policy.d.ts.map +0 -1
- package/dist/executor/policy.js +0 -100
- package/dist/executor/policy.js.map +0 -1
|
@@ -3,13 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Runs the Delegator as an independent daemon process that can be accessed
|
|
5
5
|
* by multiple clients (MCP, CLI, HTTP API, etc.)
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* npx delegator-daemon --port 3100 --config delegator.json
|
|
9
|
-
*
|
|
10
|
-
* Or programmatically:
|
|
11
|
-
* import { startDelegatorDaemon } from '@awcp/sdk/delegator/bin/daemon';
|
|
12
|
-
* await startDelegatorDaemon({ port: 3100, config: myConfig });
|
|
13
6
|
*/
|
|
14
7
|
import { DelegatorService } from '../service.js';
|
|
15
8
|
import type { DelegatorConfig } from '../config.js';
|
|
@@ -17,58 +10,20 @@ import type { DelegatorConfig } from '../config.js';
|
|
|
17
10
|
* Daemon configuration
|
|
18
11
|
*/
|
|
19
12
|
export interface DaemonConfig {
|
|
20
|
-
/** Port to listen on (default: 3100) */
|
|
21
13
|
port?: number;
|
|
22
|
-
/** Host to bind to (default: 'localhost') */
|
|
23
14
|
host?: string;
|
|
24
|
-
/** Delegator configuration */
|
|
25
15
|
delegator: DelegatorConfig;
|
|
26
16
|
}
|
|
27
17
|
/**
|
|
28
18
|
* Running daemon instance
|
|
29
19
|
*/
|
|
30
20
|
export interface DaemonInstance {
|
|
31
|
-
/** Stop the daemon */
|
|
32
21
|
stop: () => Promise<void>;
|
|
33
|
-
/** Get the service instance */
|
|
34
22
|
service: DelegatorService;
|
|
35
|
-
/** Get the base URL */
|
|
36
23
|
url: string;
|
|
37
24
|
}
|
|
38
25
|
/**
|
|
39
26
|
* Start the Delegator Daemon
|
|
40
|
-
*
|
|
41
|
-
* This starts an HTTP server that provides:
|
|
42
|
-
* - POST /delegate - Create a new delegation
|
|
43
|
-
* - GET /delegations - List all delegations
|
|
44
|
-
* - GET /delegation/:id - Get delegation status
|
|
45
|
-
* - DELETE /delegation/:id - Cancel a delegation
|
|
46
|
-
* - POST /callback - Receive messages from Executor
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const daemon = await startDelegatorDaemon({
|
|
51
|
-
* port: 3100,
|
|
52
|
-
* delegator: {
|
|
53
|
-
* export: { baseDir: '/tmp/awcp/exports' },
|
|
54
|
-
* ssh: { host: 'localhost', user: 'awcp' },
|
|
55
|
-
* },
|
|
56
|
-
* });
|
|
57
|
-
*
|
|
58
|
-
* // Create delegation via HTTP
|
|
59
|
-
* const response = await fetch('http://localhost:3100/delegate', {
|
|
60
|
-
* method: 'POST',
|
|
61
|
-
* headers: { 'Content-Type': 'application/json' },
|
|
62
|
-
* body: JSON.stringify({
|
|
63
|
-
* executorUrl: 'http://executor:4001/awcp',
|
|
64
|
-
* localDir: '/path/to/project',
|
|
65
|
-
* task: { description: 'Fix bug', prompt: '...' },
|
|
66
|
-
* }),
|
|
67
|
-
* });
|
|
68
|
-
*
|
|
69
|
-
* // Stop daemon
|
|
70
|
-
* await daemon.stop();
|
|
71
|
-
* ```
|
|
72
27
|
*/
|
|
73
28
|
export declare function startDelegatorDaemon(config: DaemonConfig): Promise<DaemonInstance>;
|
|
74
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/delegator/bin/daemon.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/delegator/bin/daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,gBAAgB,EAAgC,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoHxF;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC1C"}
|
|
@@ -3,13 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Runs the Delegator as an independent daemon process that can be accessed
|
|
5
5
|
* by multiple clients (MCP, CLI, HTTP API, etc.)
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* npx delegator-daemon --port 3100 --config delegator.json
|
|
9
|
-
*
|
|
10
|
-
* Or programmatically:
|
|
11
|
-
* import { startDelegatorDaemon } from '@awcp/sdk/delegator/bin/daemon';
|
|
12
|
-
* await startDelegatorDaemon({ port: 3100, config: myConfig });
|
|
13
6
|
*/
|
|
14
7
|
import { createServer } from 'node:http';
|
|
15
8
|
import express, { json } from 'express';
|
|
@@ -17,38 +10,6 @@ import { DelegatorService } from '../service.js';
|
|
|
17
10
|
import { AwcpError } from '@awcp/core';
|
|
18
11
|
/**
|
|
19
12
|
* Start the Delegator Daemon
|
|
20
|
-
*
|
|
21
|
-
* This starts an HTTP server that provides:
|
|
22
|
-
* - POST /delegate - Create a new delegation
|
|
23
|
-
* - GET /delegations - List all delegations
|
|
24
|
-
* - GET /delegation/:id - Get delegation status
|
|
25
|
-
* - DELETE /delegation/:id - Cancel a delegation
|
|
26
|
-
* - POST /callback - Receive messages from Executor
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const daemon = await startDelegatorDaemon({
|
|
31
|
-
* port: 3100,
|
|
32
|
-
* delegator: {
|
|
33
|
-
* export: { baseDir: '/tmp/awcp/exports' },
|
|
34
|
-
* ssh: { host: 'localhost', user: 'awcp' },
|
|
35
|
-
* },
|
|
36
|
-
* });
|
|
37
|
-
*
|
|
38
|
-
* // Create delegation via HTTP
|
|
39
|
-
* const response = await fetch('http://localhost:3100/delegate', {
|
|
40
|
-
* method: 'POST',
|
|
41
|
-
* headers: { 'Content-Type': 'application/json' },
|
|
42
|
-
* body: JSON.stringify({
|
|
43
|
-
* executorUrl: 'http://executor:4001/awcp',
|
|
44
|
-
* localDir: '/path/to/project',
|
|
45
|
-
* task: { description: 'Fix bug', prompt: '...' },
|
|
46
|
-
* }),
|
|
47
|
-
* });
|
|
48
|
-
*
|
|
49
|
-
* // Stop daemon
|
|
50
|
-
* await daemon.stop();
|
|
51
|
-
* ```
|
|
52
13
|
*/
|
|
53
14
|
export async function startDelegatorDaemon(config) {
|
|
54
15
|
const port = config.port ?? 3100;
|
|
@@ -56,29 +17,12 @@ export async function startDelegatorDaemon(config) {
|
|
|
56
17
|
const baseUrl = `http://${host}:${port}`;
|
|
57
18
|
const app = express();
|
|
58
19
|
app.use(json());
|
|
59
|
-
// Create service with callback URL pointing to this daemon
|
|
60
20
|
const serviceOptions = {
|
|
61
21
|
config: config.delegator,
|
|
62
|
-
callbackUrl: `${baseUrl}/callback`,
|
|
63
22
|
};
|
|
64
23
|
const service = new DelegatorService(serviceOptions);
|
|
65
|
-
// ============================================
|
|
66
|
-
// API Routes
|
|
67
|
-
// ============================================
|
|
68
24
|
/**
|
|
69
25
|
* POST /delegate - Create a new delegation
|
|
70
|
-
*
|
|
71
|
-
* Body:
|
|
72
|
-
* {
|
|
73
|
-
* executorUrl: string,
|
|
74
|
-
* localDir: string,
|
|
75
|
-
* task: { description: string, prompt: string },
|
|
76
|
-
* ttlSeconds?: number,
|
|
77
|
-
* accessMode?: 'ro' | 'rw'
|
|
78
|
-
* }
|
|
79
|
-
*
|
|
80
|
-
* Response:
|
|
81
|
-
* { delegationId: string }
|
|
82
26
|
*/
|
|
83
27
|
app.post('/delegate', async (req, res) => {
|
|
84
28
|
try {
|
|
@@ -145,30 +89,12 @@ export async function startDelegatorDaemon(config) {
|
|
|
145
89
|
});
|
|
146
90
|
}
|
|
147
91
|
});
|
|
148
|
-
/**
|
|
149
|
-
* POST /callback - Receive messages from Executor
|
|
150
|
-
*
|
|
151
|
-
* This endpoint receives ACCEPT, DONE, and ERROR messages from Executors.
|
|
152
|
-
*/
|
|
153
|
-
app.post('/callback', async (req, res) => {
|
|
154
|
-
try {
|
|
155
|
-
await service.handleMessage(req.body);
|
|
156
|
-
res.json({ ok: true });
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
console.error('[Delegator Daemon] Error handling callback:', error);
|
|
160
|
-
res.status(500).json({
|
|
161
|
-
error: error instanceof Error ? error.message : 'Internal error',
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
92
|
/**
|
|
166
93
|
* GET /health - Health check
|
|
167
94
|
*/
|
|
168
95
|
app.get('/health', (_req, res) => {
|
|
169
96
|
res.json({ status: 'ok' });
|
|
170
97
|
});
|
|
171
|
-
// Start server
|
|
172
98
|
const server = createServer(app);
|
|
173
99
|
await new Promise((resolve, reject) => {
|
|
174
100
|
server.listen(port, host, () => {
|
|
@@ -197,7 +123,6 @@ export async function startDelegatorDaemon(config) {
|
|
|
197
123
|
* CLI entry point
|
|
198
124
|
*/
|
|
199
125
|
export async function main() {
|
|
200
|
-
// Parse command line arguments
|
|
201
126
|
const args = process.argv.slice(2);
|
|
202
127
|
let port = 3100;
|
|
203
128
|
let configPath;
|
|
@@ -212,25 +137,16 @@ export async function main() {
|
|
|
212
137
|
}
|
|
213
138
|
}
|
|
214
139
|
if (!configPath) {
|
|
215
|
-
console.error('Usage: delegator-daemon --port 3100 --config <config.
|
|
216
|
-
console.error('');
|
|
217
|
-
console.error('Config file should contain:');
|
|
218
|
-
console.error(JSON.stringify({
|
|
219
|
-
export: { baseDir: '/tmp/awcp/exports' },
|
|
220
|
-
ssh: { host: 'localhost', user: 'awcp' },
|
|
221
|
-
}, null, 2));
|
|
140
|
+
console.error('Usage: delegator-daemon --port 3100 --config <config.ts>');
|
|
222
141
|
process.exit(1);
|
|
223
142
|
}
|
|
224
|
-
// Load config
|
|
225
143
|
const fs = await import('node:fs/promises');
|
|
226
144
|
const configContent = await fs.readFile(configPath, 'utf-8');
|
|
227
145
|
const delegatorConfig = JSON.parse(configContent);
|
|
228
|
-
// Start daemon
|
|
229
146
|
const daemon = await startDelegatorDaemon({
|
|
230
147
|
port,
|
|
231
148
|
delegator: delegatorConfig,
|
|
232
149
|
});
|
|
233
|
-
// Handle shutdown
|
|
234
150
|
process.on('SIGINT', async () => {
|
|
235
151
|
console.log('\n[Delegator Daemon] Shutting down...');
|
|
236
152
|
await daemon.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/delegator/bin/daemon.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/delegator/bin/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AWCP Delegator Configuration
|
|
3
|
-
*
|
|
4
|
-
* Configuration for enabling AWCP Delegator functionality.
|
|
5
3
|
*/
|
|
6
|
-
import type { Delegation, AccessMode } from '@awcp/core';
|
|
4
|
+
import type { Delegation, AccessMode, DelegatorTransportAdapter } from '@awcp/core';
|
|
7
5
|
/**
|
|
8
6
|
* Export view configuration
|
|
9
7
|
*/
|
|
10
8
|
export interface ExportConfig {
|
|
11
|
-
/** Base directory for export views
|
|
9
|
+
/** Base directory for export views */
|
|
12
10
|
baseDir: string;
|
|
13
11
|
/** Strategy for creating export view (default: 'symlink') */
|
|
14
12
|
strategy?: 'symlink' | 'bind' | 'worktree';
|
|
15
13
|
}
|
|
16
|
-
/**
|
|
17
|
-
* SSH configuration for credential generation
|
|
18
|
-
*/
|
|
19
|
-
export interface SshConfig {
|
|
20
|
-
/** SSH server host that Executor will connect to */
|
|
21
|
-
host: string;
|
|
22
|
-
/** SSH server port (default: 22) */
|
|
23
|
-
port?: number;
|
|
24
|
-
/** SSH user for Executor connections */
|
|
25
|
-
user: string;
|
|
26
|
-
/** Directory to store temporary keys (default: '/tmp/awcp/keys') */
|
|
27
|
-
keyDir?: string;
|
|
28
|
-
}
|
|
29
14
|
/**
|
|
30
15
|
* Admission control configuration
|
|
31
16
|
*/
|
|
@@ -50,68 +35,30 @@ export interface DelegationDefaults {
|
|
|
50
35
|
* Lifecycle hooks for Delegator events
|
|
51
36
|
*/
|
|
52
37
|
export interface DelegatorHooks {
|
|
53
|
-
/** Called when delegation is created and INVITE sent */
|
|
54
38
|
onDelegationCreated?: (delegation: Delegation) => void;
|
|
55
|
-
/** Called when Executor accepts and task starts */
|
|
56
39
|
onDelegationStarted?: (delegation: Delegation) => void;
|
|
57
|
-
/** Called when task completes successfully */
|
|
58
40
|
onDelegationCompleted?: (delegation: Delegation) => void;
|
|
59
|
-
/** Called on error or rejection */
|
|
60
41
|
onError?: (delegationId: string, error: Error) => void;
|
|
61
42
|
}
|
|
62
43
|
/**
|
|
63
44
|
* AWCP Delegator Configuration
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const delegatorConfig: DelegatorConfig = {
|
|
68
|
-
* export: {
|
|
69
|
-
* baseDir: '/tmp/awcp/exports',
|
|
70
|
-
* },
|
|
71
|
-
* ssh: {
|
|
72
|
-
* host: 'my-host.example.com',
|
|
73
|
-
* port: 22,
|
|
74
|
-
* user: 'awcp',
|
|
75
|
-
* },
|
|
76
|
-
* };
|
|
77
|
-
* ```
|
|
78
45
|
*/
|
|
79
46
|
export interface DelegatorConfig {
|
|
80
|
-
/**
|
|
81
|
-
* Export view configuration (required)
|
|
82
|
-
*
|
|
83
|
-
* Specifies how workspaces are exported for Executor access.
|
|
84
|
-
*/
|
|
47
|
+
/** Export view configuration */
|
|
85
48
|
export: ExportConfig;
|
|
86
|
-
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
* Specifies SSH server details for SSHFS connections.
|
|
90
|
-
*/
|
|
91
|
-
ssh: SshConfig;
|
|
92
|
-
/**
|
|
93
|
-
* Admission control (optional)
|
|
94
|
-
*
|
|
95
|
-
* Limits for workspace size to prevent network issues.
|
|
96
|
-
*/
|
|
49
|
+
/** Transport adapter for data plane */
|
|
50
|
+
transport: DelegatorTransportAdapter;
|
|
51
|
+
/** Admission control */
|
|
97
52
|
admission?: AdmissionConfig;
|
|
98
|
-
/**
|
|
99
|
-
* Default values for delegations (optional)
|
|
100
|
-
*/
|
|
53
|
+
/** Default values for delegations */
|
|
101
54
|
defaults?: DelegationDefaults;
|
|
102
|
-
/**
|
|
103
|
-
* Lifecycle hooks (optional)
|
|
104
|
-
*/
|
|
55
|
+
/** Lifecycle hooks */
|
|
105
56
|
hooks?: DelegatorHooks;
|
|
106
57
|
}
|
|
107
58
|
/**
|
|
108
59
|
* Default configuration values
|
|
109
60
|
*/
|
|
110
61
|
export declare const DEFAULT_DELEGATOR_CONFIG: {
|
|
111
|
-
readonly ssh: {
|
|
112
|
-
readonly port: 22;
|
|
113
|
-
readonly keyDir: "/tmp/awcp/keys";
|
|
114
|
-
};
|
|
115
62
|
readonly export: {
|
|
116
63
|
readonly strategy: "symlink";
|
|
117
64
|
};
|
|
@@ -125,15 +72,6 @@ export declare const DEFAULT_DELEGATOR_CONFIG: {
|
|
|
125
72
|
readonly accessMode: AccessMode;
|
|
126
73
|
};
|
|
127
74
|
};
|
|
128
|
-
/**
|
|
129
|
-
* Resolved SSH config with all fields
|
|
130
|
-
*/
|
|
131
|
-
export interface ResolvedSshConfig {
|
|
132
|
-
host: string;
|
|
133
|
-
port: number;
|
|
134
|
-
user: string;
|
|
135
|
-
keyDir: string;
|
|
136
|
-
}
|
|
137
75
|
/**
|
|
138
76
|
* Resolved admission config with all fields
|
|
139
77
|
*/
|
|
@@ -156,7 +94,7 @@ export interface ResolvedDelegatorConfig {
|
|
|
156
94
|
export: ExportConfig & {
|
|
157
95
|
strategy: 'symlink' | 'bind' | 'worktree';
|
|
158
96
|
};
|
|
159
|
-
|
|
97
|
+
transport: DelegatorTransportAdapter;
|
|
160
98
|
admission: ResolvedAdmissionConfig;
|
|
161
99
|
defaults: ResolvedDelegationDefaults;
|
|
162
100
|
hooks: DelegatorHooks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/delegator/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/delegator/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACvD,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACvD,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,yBAAyB,CAAC;IACrC,wBAAwB;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,sBAAsB;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;6BAWb,UAAU;;CAExB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,GAAG;QAAE,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;IACrE,SAAS,EAAE,yBAAyB,CAAC;IACrC,SAAS,EAAE,uBAAuB,CAAC;IACnC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,uBAAuB,CAkBvF"}
|
package/dist/delegator/config.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AWCP Delegator Configuration
|
|
3
|
-
*
|
|
4
|
-
* Configuration for enabling AWCP Delegator functionality.
|
|
5
3
|
*/
|
|
6
4
|
/**
|
|
7
5
|
* Default configuration values
|
|
8
6
|
*/
|
|
9
7
|
export const DEFAULT_DELEGATOR_CONFIG = {
|
|
10
|
-
ssh: {
|
|
11
|
-
port: 22,
|
|
12
|
-
keyDir: '/tmp/awcp/keys',
|
|
13
|
-
},
|
|
14
8
|
export: {
|
|
15
9
|
strategy: 'symlink',
|
|
16
10
|
},
|
|
@@ -33,12 +27,7 @@ export function resolveDelegatorConfig(config) {
|
|
|
33
27
|
baseDir: config.export.baseDir,
|
|
34
28
|
strategy: config.export.strategy ?? DEFAULT_DELEGATOR_CONFIG.export.strategy,
|
|
35
29
|
},
|
|
36
|
-
|
|
37
|
-
host: config.ssh.host,
|
|
38
|
-
port: config.ssh.port ?? DEFAULT_DELEGATOR_CONFIG.ssh.port,
|
|
39
|
-
user: config.ssh.user,
|
|
40
|
-
keyDir: config.ssh.keyDir ?? DEFAULT_DELEGATOR_CONFIG.ssh.keyDir,
|
|
41
|
-
},
|
|
30
|
+
transport: config.transport,
|
|
42
31
|
admission: {
|
|
43
32
|
maxTotalBytes: config.admission?.maxTotalBytes ?? DEFAULT_DELEGATOR_CONFIG.admission.maxTotalBytes,
|
|
44
33
|
maxFileCount: config.admission?.maxFileCount ?? DEFAULT_DELEGATOR_CONFIG.admission.maxFileCount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/delegator/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/delegator/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8DH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,MAAM,EAAE;QACN,QAAQ,EAAE,SAAkB;KAC7B;IACD,SAAS,EAAE;QACT,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;QAC1C,YAAY,EAAE,KAAK;QACnB,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;KAC9C;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAkB;KAC/B;CACO,CAAC;AA8BX;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;YAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,wBAAwB,CAAC,MAAM,CAAC,QAAQ;SAC7E;QACD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE;YACT,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,IAAI,wBAAwB,CAAC,SAAS,CAAC,aAAa;YAClG,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,IAAI,wBAAwB,CAAC,SAAS,CAAC,YAAY;YAC/F,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,IAAI,wBAAwB,CAAC,SAAS,CAAC,kBAAkB;SAClH;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,wBAAwB,CAAC,QAAQ,CAAC,UAAU;YACvF,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,wBAAwB,CAAC,QAAQ,CAAC,UAAU;SACxF;QACD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP Client for sending AWCP messages to Executor
|
|
3
3
|
*/
|
|
4
|
-
import type { AwcpMessage, AcceptMessage, ErrorMessage } from '@awcp/core';
|
|
5
|
-
/**
|
|
6
|
-
* Response from Executor for INVITE message
|
|
7
|
-
*/
|
|
4
|
+
import type { AwcpMessage, AcceptMessage, ErrorMessage, TaskEvent } from '@awcp/core';
|
|
8
5
|
export type InviteResponse = AcceptMessage | ErrorMessage;
|
|
9
|
-
/**
|
|
10
|
-
* Client for sending AWCP messages to Executor daemon
|
|
11
|
-
*/
|
|
12
6
|
export declare class ExecutorClient {
|
|
13
7
|
private timeout;
|
|
14
|
-
|
|
15
|
-
constructor(options: {
|
|
8
|
+
constructor(options?: {
|
|
16
9
|
timeout?: number;
|
|
17
|
-
callbackUrl: string;
|
|
18
10
|
});
|
|
19
11
|
/**
|
|
20
12
|
* Send INVITE to Executor and get ACCEPT/ERROR response
|
|
@@ -25,12 +17,13 @@ export declare class ExecutorClient {
|
|
|
25
17
|
*/
|
|
26
18
|
sendStart(executorUrl: string, message: AwcpMessage): Promise<void>;
|
|
27
19
|
/**
|
|
28
|
-
*
|
|
20
|
+
* Subscribe to task events via SSE
|
|
29
21
|
*/
|
|
30
|
-
|
|
22
|
+
subscribeTask(executorUrl: string, delegationId: string): AsyncIterable<TaskEvent>;
|
|
31
23
|
/**
|
|
32
|
-
*
|
|
24
|
+
* Request Executor to cancel a delegation
|
|
33
25
|
*/
|
|
26
|
+
sendCancel(executorUrl: string, delegationId: string): Promise<void>;
|
|
34
27
|
private send;
|
|
35
28
|
}
|
|
36
29
|
//# sourceMappingURL=executor-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-client.d.ts","sourceRoot":"","sources":["../../src/delegator/executor-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"executor-client.d.ts","sourceRoot":"","sources":["../../src/delegator/executor-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtF,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE1D,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAI1C;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAMpF;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE;;OAEG;IACI,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;IAoDzF;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAqB5D,IAAI;CAwBnB"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP Client for sending AWCP messages to Executor
|
|
3
3
|
*/
|
|
4
|
-
/**
|
|
5
|
-
* Client for sending AWCP messages to Executor daemon
|
|
6
|
-
*/
|
|
7
4
|
export class ExecutorClient {
|
|
8
5
|
timeout;
|
|
9
|
-
callbackUrl;
|
|
10
6
|
constructor(options) {
|
|
11
|
-
this.timeout = options
|
|
12
|
-
this.callbackUrl = options.callbackUrl;
|
|
7
|
+
this.timeout = options?.timeout ?? 30000;
|
|
13
8
|
}
|
|
14
9
|
/**
|
|
15
10
|
* Send INVITE to Executor and get ACCEPT/ERROR response
|
|
@@ -26,7 +21,56 @@ export class ExecutorClient {
|
|
|
26
21
|
await this.send(executorUrl, message);
|
|
27
22
|
}
|
|
28
23
|
/**
|
|
29
|
-
*
|
|
24
|
+
* Subscribe to task events via SSE
|
|
25
|
+
*/
|
|
26
|
+
async *subscribeTask(executorUrl, delegationId) {
|
|
27
|
+
const baseUrl = executorUrl.replace(/\/$/, '').replace(/\/awcp$/, '');
|
|
28
|
+
const url = `${baseUrl}/awcp/tasks/${delegationId}/events`;
|
|
29
|
+
const response = await fetch(url, {
|
|
30
|
+
headers: { Accept: 'text/event-stream' },
|
|
31
|
+
});
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
throw new Error(`SSE connection failed: ${response.status} ${response.statusText}`);
|
|
34
|
+
}
|
|
35
|
+
if (!response.body) {
|
|
36
|
+
throw new Error('SSE connection failed: no response body');
|
|
37
|
+
}
|
|
38
|
+
const reader = response.body.getReader();
|
|
39
|
+
const decoder = new TextDecoder();
|
|
40
|
+
let buffer = '';
|
|
41
|
+
try {
|
|
42
|
+
while (true) {
|
|
43
|
+
const { done, value } = await reader.read();
|
|
44
|
+
if (done)
|
|
45
|
+
break;
|
|
46
|
+
buffer += decoder.decode(value, { stream: true });
|
|
47
|
+
const lines = buffer.split('\n');
|
|
48
|
+
buffer = lines.pop() ?? '';
|
|
49
|
+
for (const line of lines) {
|
|
50
|
+
if (line.startsWith('data: ')) {
|
|
51
|
+
const data = line.slice(6);
|
|
52
|
+
if (data) {
|
|
53
|
+
try {
|
|
54
|
+
const event = JSON.parse(data);
|
|
55
|
+
yield event;
|
|
56
|
+
if (event.type === 'done' || event.type === 'error') {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Ignore parse errors
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
reader.releaseLock();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Request Executor to cancel a delegation
|
|
30
74
|
*/
|
|
31
75
|
async sendCancel(executorUrl, delegationId) {
|
|
32
76
|
const cancelUrl = executorUrl.replace(/\/$/, '') + `/cancel/${delegationId}`;
|
|
@@ -47,19 +91,13 @@ export class ExecutorClient {
|
|
|
47
91
|
clearTimeout(timeoutId);
|
|
48
92
|
}
|
|
49
93
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Internal send method
|
|
52
|
-
*/
|
|
53
94
|
async send(executorUrl, message) {
|
|
54
95
|
const controller = new AbortController();
|
|
55
96
|
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
56
97
|
try {
|
|
57
98
|
const response = await fetch(executorUrl, {
|
|
58
99
|
method: 'POST',
|
|
59
|
-
headers: {
|
|
60
|
-
'Content-Type': 'application/json',
|
|
61
|
-
'X-AWCP-Callback-URL': this.callbackUrl,
|
|
62
|
-
},
|
|
100
|
+
headers: { 'Content-Type': 'application/json' },
|
|
63
101
|
body: JSON.stringify(message),
|
|
64
102
|
signal: controller.signal,
|
|
65
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-client.js","sourceRoot":"","sources":["../../src/delegator/executor-client.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"executor-client.js","sourceRoot":"","sources":["../../src/delegator/executor-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export Manager - manages export directories on Delegator side
|
|
3
|
+
*/
|
|
4
|
+
import type { ExportConfig } from './config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Manages export directory allocation and cleanup.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ExportManager {
|
|
9
|
+
private baseDir;
|
|
10
|
+
private strategy;
|
|
11
|
+
private exports;
|
|
12
|
+
constructor(config?: ExportConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Allocate an export path for a delegation.
|
|
15
|
+
* Returns path with trailing slash for SSHFS symlink compatibility.
|
|
16
|
+
*/
|
|
17
|
+
allocate(delegationId: string, localDir: string): Promise<string>;
|
|
18
|
+
/** Release an export and remove the directory */
|
|
19
|
+
release(delegationId: string): Promise<void>;
|
|
20
|
+
/** Get the export path for a delegation */
|
|
21
|
+
getPath(delegationId: string): string | undefined;
|
|
22
|
+
/** Release all exports */
|
|
23
|
+
releaseAll(): Promise<void>;
|
|
24
|
+
/** Cleanup stale export directories from previous runs */
|
|
25
|
+
cleanupStale(): Promise<number>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=export-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-manager.d.ts","sourceRoot":"","sources":["../../src/delegator/export-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAA6B;gBAEhC,MAAM,CAAC,EAAE,YAAY;IAKjC;;;OAGG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BvE,iDAAiD;IAC3C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalD,2CAA2C;IAC3C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIjD,0BAA0B;IACpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,0DAA0D;IACpD,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAetC"}
|