@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.
Files changed (105) hide show
  1. package/dist/delegator/admission.d.ts +8 -15
  2. package/dist/delegator/admission.d.ts.map +1 -1
  3. package/dist/delegator/admission.js +15 -36
  4. package/dist/delegator/admission.js.map +1 -1
  5. package/dist/delegator/bin/client.d.ts +8 -9
  6. package/dist/delegator/bin/client.d.ts.map +1 -1
  7. package/dist/delegator/bin/client.js +3 -1
  8. package/dist/delegator/bin/client.js.map +1 -1
  9. package/dist/delegator/bin/daemon.js +9 -9
  10. package/dist/delegator/bin/daemon.js.map +1 -1
  11. package/dist/delegator/config.d.ts +24 -28
  12. package/dist/delegator/config.d.ts.map +1 -1
  13. package/dist/delegator/config.js +24 -23
  14. package/dist/delegator/config.js.map +1 -1
  15. package/dist/delegator/environment-builder.d.ts +37 -0
  16. package/dist/delegator/environment-builder.d.ts.map +1 -0
  17. package/dist/delegator/environment-builder.js +67 -0
  18. package/dist/delegator/environment-builder.js.map +1 -0
  19. package/dist/delegator/executor-client.js +1 -1
  20. package/dist/delegator/executor-client.js.map +1 -1
  21. package/dist/delegator/index.d.ts +5 -4
  22. package/dist/delegator/index.d.ts.map +1 -1
  23. package/dist/delegator/index.js +4 -3
  24. package/dist/delegator/index.js.map +1 -1
  25. package/dist/delegator/resource-adapters/fs-adapter.d.ts +8 -0
  26. package/dist/delegator/resource-adapters/fs-adapter.d.ts.map +1 -0
  27. package/dist/delegator/resource-adapters/fs-adapter.js +14 -0
  28. package/dist/delegator/resource-adapters/fs-adapter.js.map +1 -0
  29. package/dist/delegator/resource-adapters/index.d.ts +4 -0
  30. package/dist/delegator/resource-adapters/index.d.ts.map +1 -0
  31. package/dist/delegator/resource-adapters/index.js +3 -0
  32. package/dist/delegator/resource-adapters/index.js.map +1 -0
  33. package/dist/delegator/resource-adapters/registry.d.ts +8 -0
  34. package/dist/delegator/resource-adapters/registry.d.ts.map +1 -0
  35. package/dist/delegator/resource-adapters/registry.js +17 -0
  36. package/dist/delegator/resource-adapters/registry.js.map +1 -0
  37. package/dist/delegator/resource-adapters/types.d.ts +7 -0
  38. package/dist/delegator/resource-adapters/types.d.ts.map +1 -0
  39. package/dist/delegator/resource-adapters/types.js +2 -0
  40. package/dist/delegator/resource-adapters/types.js.map +1 -0
  41. package/dist/delegator/service.d.ts +7 -21
  42. package/dist/delegator/service.d.ts.map +1 -1
  43. package/dist/delegator/service.js +69 -72
  44. package/dist/delegator/service.js.map +1 -1
  45. package/dist/executor/a2a-adapter.d.ts +14 -0
  46. package/dist/executor/a2a-adapter.d.ts.map +1 -0
  47. package/dist/executor/a2a-adapter.js +66 -0
  48. package/dist/executor/a2a-adapter.js.map +1 -0
  49. package/dist/executor/config.d.ts +6 -6
  50. package/dist/executor/config.d.ts.map +1 -1
  51. package/dist/executor/config.js +1 -0
  52. package/dist/executor/config.js.map +1 -1
  53. package/dist/executor/index.d.ts +2 -1
  54. package/dist/executor/index.d.ts.map +1 -1
  55. package/dist/executor/index.js +1 -2
  56. package/dist/executor/index.js.map +1 -1
  57. package/dist/executor/service.d.ts +3 -14
  58. package/dist/executor/service.d.ts.map +1 -1
  59. package/dist/executor/service.js +13 -55
  60. package/dist/executor/service.js.map +1 -1
  61. package/dist/executor/workspace-manager.d.ts +0 -10
  62. package/dist/executor/workspace-manager.d.ts.map +1 -1
  63. package/dist/executor/workspace-manager.js +8 -27
  64. package/dist/executor/workspace-manager.js.map +1 -1
  65. package/dist/index.d.ts +4 -3
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +8 -22
  68. package/dist/index.js.map +1 -1
  69. package/dist/listener/http-listener.d.ts +18 -0
  70. package/dist/listener/http-listener.d.ts.map +1 -0
  71. package/dist/listener/http-listener.js +80 -0
  72. package/dist/listener/http-listener.js.map +1 -0
  73. package/dist/listener/index.d.ts +6 -0
  74. package/dist/listener/index.d.ts.map +1 -0
  75. package/dist/listener/index.js +6 -0
  76. package/dist/listener/index.js.map +1 -0
  77. package/dist/listener/websocket-tunnel-listener.d.ts +36 -0
  78. package/dist/listener/websocket-tunnel-listener.d.ts.map +1 -0
  79. package/dist/listener/websocket-tunnel-listener.js +187 -0
  80. package/dist/listener/websocket-tunnel-listener.js.map +1 -0
  81. package/dist/server/express/awcp-executor-handler.d.ts +11 -11
  82. package/dist/server/express/awcp-executor-handler.d.ts.map +1 -1
  83. package/dist/server/express/awcp-executor-handler.js +43 -81
  84. package/dist/server/express/awcp-executor-handler.js.map +1 -1
  85. package/dist/utils/fs-helpers.d.ts +17 -0
  86. package/dist/utils/fs-helpers.d.ts.map +1 -0
  87. package/dist/utils/fs-helpers.js +34 -0
  88. package/dist/utils/fs-helpers.js.map +1 -0
  89. package/dist/utils/index.d.ts +8 -0
  90. package/dist/utils/index.d.ts.map +1 -0
  91. package/dist/utils/index.js +8 -0
  92. package/dist/utils/index.js.map +1 -0
  93. package/dist/utils/resolve-workdir.d.ts +21 -0
  94. package/dist/utils/resolve-workdir.d.ts.map +1 -0
  95. package/dist/utils/resolve-workdir.js +30 -0
  96. package/dist/utils/resolve-workdir.js.map +1 -0
  97. package/package.json +7 -3
  98. package/dist/delegator/export-manager.d.ts +0 -27
  99. package/dist/delegator/export-manager.d.ts.map +0 -1
  100. package/dist/delegator/export-manager.js +0 -85
  101. package/dist/delegator/export-manager.js.map +0 -1
  102. package/dist/delegator/export-view.d.ts +0 -43
  103. package/dist/delegator/export-view.d.ts.map +0 -1
  104. package/dist/delegator/export-view.js +0 -108
  105. 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,8 @@
1
+ /**
2
+ * SDK Utilities
3
+ *
4
+ * Shared utility functions for AWCP SDK operations.
5
+ */
6
+ export { resolveWorkDir, type WorkDirContext } from './resolve-workdir.js';
7
+ export { cleanupStaleDirectories } from './fs-helpers.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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,8 @@
1
+ /**
2
+ * SDK Utilities
3
+ *
4
+ * Shared utility functions for AWCP SDK operations.
5
+ */
6
+ export { resolveWorkDir } from './resolve-workdir.js';
7
+ export { cleanupStaleDirectories } from './fs-helpers.js';
8
+ //# sourceMappingURL=index.js.map
@@ -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.8",
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.8",
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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"}