@awcp/sdk 0.0.8 → 0.0.10
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/admission.d.ts +8 -15
- package/dist/delegator/admission.d.ts.map +1 -1
- package/dist/delegator/admission.js +15 -36
- package/dist/delegator/admission.js.map +1 -1
- package/dist/delegator/bin/client.d.ts +8 -9
- package/dist/delegator/bin/client.d.ts.map +1 -1
- package/dist/delegator/bin/client.js +3 -1
- package/dist/delegator/bin/client.js.map +1 -1
- package/dist/delegator/bin/daemon.js +9 -9
- package/dist/delegator/bin/daemon.js.map +1 -1
- package/dist/delegator/config.d.ts +24 -28
- package/dist/delegator/config.d.ts.map +1 -1
- package/dist/delegator/config.js +24 -23
- package/dist/delegator/config.js.map +1 -1
- package/dist/delegator/environment-builder.d.ts +37 -0
- package/dist/delegator/environment-builder.d.ts.map +1 -0
- package/dist/delegator/environment-builder.js +67 -0
- package/dist/delegator/environment-builder.js.map +1 -0
- package/dist/delegator/executor-client.js +1 -1
- package/dist/delegator/executor-client.js.map +1 -1
- package/dist/delegator/index.d.ts +5 -4
- package/dist/delegator/index.d.ts.map +1 -1
- package/dist/delegator/index.js +4 -3
- package/dist/delegator/index.js.map +1 -1
- package/dist/delegator/resource-adapters/fs-adapter.d.ts +8 -0
- package/dist/delegator/resource-adapters/fs-adapter.d.ts.map +1 -0
- package/dist/delegator/resource-adapters/fs-adapter.js +14 -0
- package/dist/delegator/resource-adapters/fs-adapter.js.map +1 -0
- package/dist/delegator/resource-adapters/index.d.ts +4 -0
- package/dist/delegator/resource-adapters/index.d.ts.map +1 -0
- package/dist/delegator/resource-adapters/index.js +3 -0
- package/dist/delegator/resource-adapters/index.js.map +1 -0
- package/dist/delegator/resource-adapters/registry.d.ts +8 -0
- package/dist/delegator/resource-adapters/registry.d.ts.map +1 -0
- package/dist/delegator/resource-adapters/registry.js +17 -0
- package/dist/delegator/resource-adapters/registry.js.map +1 -0
- package/dist/delegator/resource-adapters/types.d.ts +7 -0
- package/dist/delegator/resource-adapters/types.d.ts.map +1 -0
- package/dist/delegator/resource-adapters/types.js +2 -0
- package/dist/delegator/resource-adapters/types.js.map +1 -0
- package/dist/delegator/service.d.ts +7 -21
- package/dist/delegator/service.d.ts.map +1 -1
- package/dist/delegator/service.js +69 -72
- package/dist/delegator/service.js.map +1 -1
- package/dist/executor/a2a-adapter.d.ts +14 -0
- package/dist/executor/a2a-adapter.d.ts.map +1 -0
- package/dist/executor/a2a-adapter.js +66 -0
- package/dist/executor/a2a-adapter.js.map +1 -0
- package/dist/executor/config.d.ts +6 -6
- package/dist/executor/config.d.ts.map +1 -1
- package/dist/executor/config.js +1 -0
- package/dist/executor/config.js.map +1 -1
- package/dist/executor/index.d.ts +2 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +1 -2
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/service.d.ts +3 -14
- package/dist/executor/service.d.ts.map +1 -1
- package/dist/executor/service.js +13 -55
- package/dist/executor/service.js.map +1 -1
- package/dist/executor/workspace-manager.d.ts +0 -10
- package/dist/executor/workspace-manager.d.ts.map +1 -1
- package/dist/executor/workspace-manager.js +8 -27
- package/dist/executor/workspace-manager.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -22
- package/dist/index.js.map +1 -1
- package/dist/listener/http-listener.d.ts +18 -0
- package/dist/listener/http-listener.d.ts.map +1 -0
- package/dist/listener/http-listener.js +80 -0
- package/dist/listener/http-listener.js.map +1 -0
- package/dist/listener/index.d.ts +6 -0
- package/dist/listener/index.d.ts.map +1 -0
- package/dist/listener/index.js +6 -0
- package/dist/listener/index.js.map +1 -0
- package/dist/listener/websocket-tunnel-listener.d.ts +36 -0
- package/dist/listener/websocket-tunnel-listener.d.ts.map +1 -0
- package/dist/listener/websocket-tunnel-listener.js +187 -0
- package/dist/listener/websocket-tunnel-listener.js.map +1 -0
- package/dist/server/express/awcp-executor-handler.d.ts +11 -11
- package/dist/server/express/awcp-executor-handler.d.ts.map +1 -1
- package/dist/server/express/awcp-executor-handler.js +43 -81
- package/dist/server/express/awcp-executor-handler.js.map +1 -1
- package/dist/utils/fs-helpers.d.ts +17 -0
- package/dist/utils/fs-helpers.d.ts.map +1 -0
- package/dist/utils/fs-helpers.js +34 -0
- package/dist/utils/fs-helpers.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/resolve-workdir.d.ts +21 -0
- package/dist/utils/resolve-workdir.d.ts.map +1 -0
- package/dist/utils/resolve-workdir.js +30 -0
- package/dist/utils/resolve-workdir.js.map +1 -0
- package/package.json +7 -3
- package/dist/delegator/export-manager.d.ts +0 -27
- package/dist/delegator/export-manager.d.ts.map +0 -1
- package/dist/delegator/export-manager.js +0 -85
- package/dist/delegator/export-manager.js.map +0 -1
- package/dist/delegator/export-view.d.ts +0 -43
- package/dist/delegator/export-view.d.ts.map +0 -1
- package/dist/delegator/export-view.js +0 -108
- package/dist/delegator/export-view.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/fs-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,OAAO,CAAC,MAAM,CAAC,CAcjB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Helpers
|
|
3
|
+
*
|
|
4
|
+
* Shared filesystem utilities for workspace and environment management.
|
|
5
|
+
*/
|
|
6
|
+
import { readdir, rm } from 'node:fs/promises';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* Cleans up stale directories that are not in the active set.
|
|
10
|
+
*
|
|
11
|
+
* Used by both EnvironmentBuilder (delegator) and WorkspaceManager (executor)
|
|
12
|
+
* to remove directories from previous runs that were not properly cleaned up.
|
|
13
|
+
*
|
|
14
|
+
* @param baseDir - Root directory containing subdirectories to check
|
|
15
|
+
* @param activeIds - Set of delegation IDs that should be preserved
|
|
16
|
+
* @returns Number of directories cleaned up
|
|
17
|
+
*/
|
|
18
|
+
export async function cleanupStaleDirectories(baseDir, activeIds) {
|
|
19
|
+
let cleaned = 0;
|
|
20
|
+
try {
|
|
21
|
+
const entries = await readdir(baseDir, { withFileTypes: true });
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
if (entry.isDirectory() && !activeIds.has(entry.name)) {
|
|
24
|
+
await rm(join(baseDir, entry.name), { recursive: true, force: true });
|
|
25
|
+
cleaned++;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Base directory may not exist yet - this is expected on first run
|
|
31
|
+
}
|
|
32
|
+
return cleaned;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=fs-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-helpers.js","sourceRoot":"","sources":["../../src/utils/fs-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAe,EACf,SAAsB;IAEtB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Directory Resolution
|
|
3
|
+
*
|
|
4
|
+
* Resolves the appropriate working directory from an environment spec.
|
|
5
|
+
* Used by executor agents to determine which resource directory to operate in.
|
|
6
|
+
*/
|
|
7
|
+
import type { EnvironmentSpec } from '@awcp/core';
|
|
8
|
+
export interface WorkDirContext {
|
|
9
|
+
environment: EnvironmentSpec;
|
|
10
|
+
workPath: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolves the working directory from environment context.
|
|
14
|
+
*
|
|
15
|
+
* Resolution order:
|
|
16
|
+
* 1. First read-write resource (primary workspace)
|
|
17
|
+
* 2. Single resource (when only one exists)
|
|
18
|
+
* 3. Environment root (fallback)
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveWorkDir(ctx: WorkDirContext): string;
|
|
21
|
+
//# sourceMappingURL=resolve-workdir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-workdir.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-workdir.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAgB1D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Directory Resolution
|
|
3
|
+
*
|
|
4
|
+
* Resolves the appropriate working directory from an environment spec.
|
|
5
|
+
* Used by executor agents to determine which resource directory to operate in.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the working directory from environment context.
|
|
10
|
+
*
|
|
11
|
+
* Resolution order:
|
|
12
|
+
* 1. First read-write resource (primary workspace)
|
|
13
|
+
* 2. Single resource (when only one exists)
|
|
14
|
+
* 3. Environment root (fallback)
|
|
15
|
+
*/
|
|
16
|
+
export function resolveWorkDir(ctx) {
|
|
17
|
+
const { environment, workPath } = ctx;
|
|
18
|
+
// Prefer the first read-write resource as the primary workspace
|
|
19
|
+
const rwResource = environment.resources.find((r) => r.mode === 'rw');
|
|
20
|
+
if (rwResource) {
|
|
21
|
+
return join(workPath, rwResource.name);
|
|
22
|
+
}
|
|
23
|
+
// Single resource: use it regardless of mode
|
|
24
|
+
if (environment.resources.length === 1) {
|
|
25
|
+
return join(workPath, environment.resources[0].name);
|
|
26
|
+
}
|
|
27
|
+
// Fallback to environment root
|
|
28
|
+
return workPath;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=resolve-workdir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-workdir.js","sourceRoot":"","sources":["../../src/utils/resolve-workdir.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAEtC,gEAAgE;IAChE,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,6CAA6C;IAC7C,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,+BAA+B;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awcp/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "AWCP SDK - Delegator and Executor Daemon implementations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -45,8 +45,12 @@
|
|
|
45
45
|
"test:watch": "vitest"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@awcp/core": "^0.0.
|
|
49
|
-
"@a2a-js/sdk": "^0.3.5"
|
|
48
|
+
"@awcp/core": "^0.0.10",
|
|
49
|
+
"@a2a-js/sdk": "^0.3.5",
|
|
50
|
+
"ws": "^8.18.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/ws": "^8.5.13"
|
|
50
54
|
},
|
|
51
55
|
"peerDependencies": {
|
|
52
56
|
"express": "^4.18.0"
|
|
@@ -1,27 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Export Manager - manages export directories on Delegator side
|
|
3
|
-
*/
|
|
4
|
-
import { mkdir, rm, symlink, readdir } from 'node:fs/promises';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
const DEFAULT_EXPORT_BASE = '/tmp/awcp/exports';
|
|
7
|
-
/**
|
|
8
|
-
* Manages export directory allocation and cleanup.
|
|
9
|
-
*/
|
|
10
|
-
export class ExportManager {
|
|
11
|
-
baseDir;
|
|
12
|
-
strategy;
|
|
13
|
-
exports = new Map();
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.baseDir = config?.baseDir ?? DEFAULT_EXPORT_BASE;
|
|
16
|
-
this.strategy = config?.strategy ?? 'symlink';
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Allocate an export path for a delegation.
|
|
20
|
-
* Returns path with trailing slash for SSHFS symlink compatibility.
|
|
21
|
-
*/
|
|
22
|
-
async allocate(delegationId, localDir) {
|
|
23
|
-
const exportPath = join(this.baseDir, delegationId, 'workspace');
|
|
24
|
-
await mkdir(join(this.baseDir, delegationId), { recursive: true });
|
|
25
|
-
switch (this.strategy) {
|
|
26
|
-
case 'symlink':
|
|
27
|
-
await symlink(localDir, exportPath);
|
|
28
|
-
break;
|
|
29
|
-
case 'bind':
|
|
30
|
-
// Not implemented, fallback to symlink
|
|
31
|
-
await symlink(localDir, exportPath);
|
|
32
|
-
break;
|
|
33
|
-
case 'worktree':
|
|
34
|
-
// Not implemented, fallback to symlink
|
|
35
|
-
await symlink(localDir, exportPath);
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
this.exports.set(delegationId, exportPath);
|
|
39
|
-
// Trailing slash for SSHFS symlink compatibility
|
|
40
|
-
// See: https://github.com/libfuse/sshfs/issues/312
|
|
41
|
-
return exportPath + '/';
|
|
42
|
-
}
|
|
43
|
-
/** Release an export and remove the directory */
|
|
44
|
-
async release(delegationId) {
|
|
45
|
-
const exportPath = this.exports.get(delegationId);
|
|
46
|
-
if (!exportPath)
|
|
47
|
-
return;
|
|
48
|
-
try {
|
|
49
|
-
const delegationDir = join(this.baseDir, delegationId);
|
|
50
|
-
await rm(delegationDir, { recursive: true, force: true });
|
|
51
|
-
this.exports.delete(delegationId);
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
console.error(`Failed to release export for ${delegationId}:`, error);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/** Get the export path for a delegation */
|
|
58
|
-
getPath(delegationId) {
|
|
59
|
-
return this.exports.get(delegationId);
|
|
60
|
-
}
|
|
61
|
-
/** Release all exports */
|
|
62
|
-
async releaseAll() {
|
|
63
|
-
for (const delegationId of this.exports.keys()) {
|
|
64
|
-
await this.release(delegationId);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/** Cleanup stale export directories from previous runs */
|
|
68
|
-
async cleanupStale() {
|
|
69
|
-
let cleaned = 0;
|
|
70
|
-
try {
|
|
71
|
-
const entries = await readdir(this.baseDir, { withFileTypes: true });
|
|
72
|
-
for (const entry of entries) {
|
|
73
|
-
if (entry.isDirectory() && !this.exports.has(entry.name)) {
|
|
74
|
-
await rm(join(this.baseDir, entry.name), { recursive: true, force: true });
|
|
75
|
-
cleaned++;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// Base directory may not exist yet
|
|
81
|
-
}
|
|
82
|
-
return cleaned;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=export-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-manager.js","sourceRoot":"","sources":["../../src/delegator/export-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Export view configuration
|
|
3
|
-
*/
|
|
4
|
-
export interface ExportConfig {
|
|
5
|
-
/** Base directory for export views (default: /tmp/awcp/exports) */
|
|
6
|
-
baseDir?: string;
|
|
7
|
-
/** Strategy for creating export view */
|
|
8
|
-
strategy?: 'symlink' | 'bind' | 'worktree';
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Export View Manager
|
|
12
|
-
*
|
|
13
|
-
* Creates isolated export views for each delegation.
|
|
14
|
-
* This prevents exposing real paths and enables cleanup.
|
|
15
|
-
*/
|
|
16
|
-
export declare class ExportViewManager {
|
|
17
|
-
private config;
|
|
18
|
-
private exports;
|
|
19
|
-
constructor(config?: ExportConfig);
|
|
20
|
-
/**
|
|
21
|
-
* Create an export view for a delegation
|
|
22
|
-
*
|
|
23
|
-
* @returns The path to the export view (with trailing slash for SSHFS symlink compatibility)
|
|
24
|
-
*/
|
|
25
|
-
create(delegationId: string, localDir: string): Promise<string>;
|
|
26
|
-
/**
|
|
27
|
-
* Cleanup an export view
|
|
28
|
-
*/
|
|
29
|
-
cleanup(delegationId: string): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Get the export path for a delegation
|
|
32
|
-
*/
|
|
33
|
-
getExportPath(delegationId: string): string | undefined;
|
|
34
|
-
/**
|
|
35
|
-
* Cleanup all export views
|
|
36
|
-
*/
|
|
37
|
-
cleanupAll(): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Cleanup stale export directories from previous runs
|
|
40
|
-
*/
|
|
41
|
-
cleanupStaleExports(): Promise<number>;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=export-view.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-view.d.ts","sourceRoot":"","sources":["../../src/delegator/export-view.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;CAC5C;AAOD;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAA6B;gBAEhC,MAAM,CAAC,EAAE,YAAY;IAIjC;;;;OAIG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmCrE;;OAEG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlD;;OAEG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;CAsB7C"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm, symlink, readdir } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* Default export base directory
|
|
5
|
-
*/
|
|
6
|
-
const DEFAULT_EXPORT_BASE = '/tmp/awcp/exports';
|
|
7
|
-
/**
|
|
8
|
-
* Export View Manager
|
|
9
|
-
*
|
|
10
|
-
* Creates isolated export views for each delegation.
|
|
11
|
-
* This prevents exposing real paths and enables cleanup.
|
|
12
|
-
*/
|
|
13
|
-
export class ExportViewManager {
|
|
14
|
-
config;
|
|
15
|
-
exports = new Map();
|
|
16
|
-
constructor(config) {
|
|
17
|
-
this.config = config ?? {};
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Create an export view for a delegation
|
|
21
|
-
*
|
|
22
|
-
* @returns The path to the export view (with trailing slash for SSHFS symlink compatibility)
|
|
23
|
-
*/
|
|
24
|
-
async create(delegationId, localDir) {
|
|
25
|
-
const baseDir = this.config.baseDir ?? DEFAULT_EXPORT_BASE;
|
|
26
|
-
const exportPath = join(baseDir, delegationId, 'workspace');
|
|
27
|
-
// Create export directory structure
|
|
28
|
-
await mkdir(join(baseDir, delegationId), { recursive: true });
|
|
29
|
-
// Create the export view based on strategy
|
|
30
|
-
const strategy = this.config.strategy ?? 'symlink';
|
|
31
|
-
switch (strategy) {
|
|
32
|
-
case 'symlink':
|
|
33
|
-
await symlink(localDir, exportPath);
|
|
34
|
-
break;
|
|
35
|
-
case 'bind':
|
|
36
|
-
// Bind mount - requires root/sudo
|
|
37
|
-
console.warn('Bind mount not implemented, falling back to symlink');
|
|
38
|
-
await symlink(localDir, exportPath);
|
|
39
|
-
break;
|
|
40
|
-
case 'worktree':
|
|
41
|
-
// Git worktree - requires git repo
|
|
42
|
-
console.warn('Git worktree not implemented, falling back to symlink');
|
|
43
|
-
await symlink(localDir, exportPath);
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
this.exports.set(delegationId, exportPath);
|
|
47
|
-
// Return path with trailing slash for SSHFS symlink compatibility
|
|
48
|
-
// See: https://github.com/libfuse/sshfs/issues/312
|
|
49
|
-
return exportPath + '/';
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Cleanup an export view
|
|
53
|
-
*/
|
|
54
|
-
async cleanup(delegationId) {
|
|
55
|
-
const exportPath = this.exports.get(delegationId);
|
|
56
|
-
if (!exportPath) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
const baseDir = this.config.baseDir ?? DEFAULT_EXPORT_BASE;
|
|
61
|
-
const delegationDir = join(baseDir, delegationId);
|
|
62
|
-
await rm(delegationDir, { recursive: true, force: true });
|
|
63
|
-
this.exports.delete(delegationId);
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
console.error(`Failed to cleanup export view for ${delegationId}:`, error);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Get the export path for a delegation
|
|
71
|
-
*/
|
|
72
|
-
getExportPath(delegationId) {
|
|
73
|
-
return this.exports.get(delegationId);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Cleanup all export views
|
|
77
|
-
*/
|
|
78
|
-
async cleanupAll() {
|
|
79
|
-
for (const delegationId of this.exports.keys()) {
|
|
80
|
-
await this.cleanup(delegationId);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Cleanup stale export directories from previous runs
|
|
85
|
-
*/
|
|
86
|
-
async cleanupStaleExports() {
|
|
87
|
-
const baseDir = this.config.baseDir ?? DEFAULT_EXPORT_BASE;
|
|
88
|
-
let cleaned = 0;
|
|
89
|
-
try {
|
|
90
|
-
const entries = await readdir(baseDir, { withFileTypes: true });
|
|
91
|
-
for (const entry of entries) {
|
|
92
|
-
if (entry.isDirectory()) {
|
|
93
|
-
const delegationId = entry.name;
|
|
94
|
-
// Only clean directories not currently tracked
|
|
95
|
-
if (!this.exports.has(delegationId)) {
|
|
96
|
-
await rm(join(baseDir, delegationId), { recursive: true, force: true });
|
|
97
|
-
cleaned++;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// Base directory may not exist yet
|
|
104
|
-
}
|
|
105
|
-
return cleaned;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=export-view.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-view.js","sourceRoot":"","sources":["../../src/delegator/export-view.ts"],"names":[],"mappings":"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"}
|