@enactprotocol/shared 1.2.13 → 2.0.1

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 (207) hide show
  1. package/README.md +44 -0
  2. package/dist/config.d.ts +164 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +386 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/constants.d.ts +15 -5
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +24 -8
  9. package/dist/constants.js.map +1 -0
  10. package/dist/execution/command.d.ts +102 -0
  11. package/dist/execution/command.d.ts.map +1 -0
  12. package/dist/execution/command.js +262 -0
  13. package/dist/execution/command.js.map +1 -0
  14. package/dist/execution/index.d.ts +12 -0
  15. package/dist/execution/index.d.ts.map +1 -0
  16. package/dist/execution/index.js +17 -0
  17. package/dist/execution/index.js.map +1 -0
  18. package/dist/execution/runtime.d.ts +82 -0
  19. package/dist/execution/runtime.d.ts.map +1 -0
  20. package/dist/execution/runtime.js +273 -0
  21. package/dist/execution/runtime.js.map +1 -0
  22. package/dist/execution/types.d.ts +306 -0
  23. package/dist/execution/types.d.ts.map +1 -0
  24. package/dist/execution/types.js +14 -0
  25. package/dist/execution/types.js.map +1 -0
  26. package/dist/execution/validation.d.ts +43 -0
  27. package/dist/execution/validation.d.ts.map +1 -0
  28. package/dist/execution/validation.js +430 -0
  29. package/dist/execution/validation.js.map +1 -0
  30. package/dist/index.d.ts +21 -21
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +49 -25
  33. package/dist/index.js.map +1 -0
  34. package/dist/manifest/index.d.ts +7 -0
  35. package/dist/manifest/index.d.ts.map +1 -0
  36. package/dist/manifest/index.js +10 -0
  37. package/dist/manifest/index.js.map +1 -0
  38. package/dist/manifest/loader.d.ts +76 -0
  39. package/dist/manifest/loader.d.ts.map +1 -0
  40. package/dist/manifest/loader.js +146 -0
  41. package/dist/manifest/loader.js.map +1 -0
  42. package/dist/manifest/parser.d.ts +64 -0
  43. package/dist/manifest/parser.d.ts.map +1 -0
  44. package/dist/manifest/parser.js +135 -0
  45. package/dist/manifest/parser.js.map +1 -0
  46. package/dist/manifest/validator.d.ts +95 -0
  47. package/dist/manifest/validator.d.ts.map +1 -0
  48. package/dist/manifest/validator.js +258 -0
  49. package/dist/manifest/validator.js.map +1 -0
  50. package/dist/paths.d.ts +57 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +93 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/registry.d.ts +73 -0
  55. package/dist/registry.d.ts.map +1 -0
  56. package/dist/registry.js +147 -0
  57. package/dist/registry.js.map +1 -0
  58. package/dist/resolver.d.ts +89 -0
  59. package/dist/resolver.d.ts.map +1 -0
  60. package/dist/resolver.js +282 -0
  61. package/dist/resolver.js.map +1 -0
  62. package/dist/types/index.d.ts +6 -0
  63. package/dist/types/index.d.ts.map +1 -0
  64. package/dist/types/index.js +5 -0
  65. package/dist/types/index.js.map +1 -0
  66. package/dist/types/manifest.d.ts +201 -0
  67. package/dist/types/manifest.d.ts.map +1 -0
  68. package/dist/types/manifest.js +13 -0
  69. package/dist/types/manifest.js.map +1 -0
  70. package/dist/types.d.ts +5 -132
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +5 -3
  73. package/dist/types.js.map +1 -0
  74. package/dist/utils/fs.d.ts +105 -0
  75. package/dist/utils/fs.d.ts.map +1 -0
  76. package/dist/utils/fs.js +233 -0
  77. package/dist/utils/fs.js.map +1 -0
  78. package/dist/utils/logger.d.ts +102 -25
  79. package/dist/utils/logger.d.ts.map +1 -0
  80. package/dist/utils/logger.js +214 -57
  81. package/dist/utils/logger.js.map +1 -0
  82. package/dist/utils/version.d.ts +60 -2
  83. package/dist/utils/version.d.ts.map +1 -0
  84. package/dist/utils/version.js +255 -31
  85. package/dist/utils/version.js.map +1 -0
  86. package/package.json +16 -58
  87. package/src/config.ts +510 -0
  88. package/src/constants.ts +36 -0
  89. package/src/execution/command.ts +314 -0
  90. package/src/execution/index.ts +73 -0
  91. package/src/execution/runtime.ts +308 -0
  92. package/src/execution/types.ts +379 -0
  93. package/src/execution/validation.ts +508 -0
  94. package/src/index.ts +238 -30
  95. package/src/manifest/index.ts +36 -0
  96. package/src/manifest/loader.ts +187 -0
  97. package/src/manifest/parser.ts +173 -0
  98. package/src/manifest/validator.ts +309 -0
  99. package/src/paths.ts +108 -0
  100. package/src/registry.ts +219 -0
  101. package/src/resolver.ts +345 -0
  102. package/src/types/index.ts +30 -0
  103. package/src/types/manifest.ts +255 -0
  104. package/src/types.ts +5 -188
  105. package/src/utils/fs.ts +281 -0
  106. package/src/utils/logger.ts +270 -59
  107. package/src/utils/version.ts +304 -36
  108. package/tests/config.test.ts +515 -0
  109. package/tests/execution/command.test.ts +317 -0
  110. package/tests/execution/validation.test.ts +384 -0
  111. package/tests/fixtures/invalid-tool.yaml +4 -0
  112. package/tests/fixtures/valid-tool.md +62 -0
  113. package/tests/fixtures/valid-tool.yaml +40 -0
  114. package/tests/index.test.ts +8 -0
  115. package/tests/manifest/loader.test.ts +291 -0
  116. package/tests/manifest/parser.test.ts +345 -0
  117. package/tests/manifest/validator.test.ts +394 -0
  118. package/tests/manifest-types.test.ts +358 -0
  119. package/tests/paths.test.ts +153 -0
  120. package/tests/registry.test.ts +231 -0
  121. package/tests/resolver.test.ts +272 -0
  122. package/tests/utils/fs.test.ts +388 -0
  123. package/tests/utils/logger.test.ts +480 -0
  124. package/tests/utils/version.test.ts +390 -0
  125. package/tsconfig.json +12 -0
  126. package/dist/LocalToolResolver.d.ts +0 -84
  127. package/dist/LocalToolResolver.js +0 -353
  128. package/dist/api/enact-api.d.ts +0 -130
  129. package/dist/api/enact-api.js +0 -428
  130. package/dist/api/index.d.ts +0 -2
  131. package/dist/api/index.js +0 -2
  132. package/dist/api/types.d.ts +0 -103
  133. package/dist/api/types.js +0 -1
  134. package/dist/core/DaggerExecutionProvider.d.ts +0 -169
  135. package/dist/core/DaggerExecutionProvider.js +0 -1029
  136. package/dist/core/DirectExecutionProvider.d.ts +0 -23
  137. package/dist/core/DirectExecutionProvider.js +0 -406
  138. package/dist/core/EnactCore.d.ts +0 -162
  139. package/dist/core/EnactCore.js +0 -597
  140. package/dist/core/NativeExecutionProvider.d.ts +0 -9
  141. package/dist/core/NativeExecutionProvider.js +0 -16
  142. package/dist/core/index.d.ts +0 -3
  143. package/dist/core/index.js +0 -3
  144. package/dist/exec/index.d.ts +0 -3
  145. package/dist/exec/index.js +0 -3
  146. package/dist/exec/logger.d.ts +0 -11
  147. package/dist/exec/logger.js +0 -57
  148. package/dist/exec/validate.d.ts +0 -5
  149. package/dist/exec/validate.js +0 -167
  150. package/dist/lib/enact-direct.d.ts +0 -150
  151. package/dist/lib/enact-direct.js +0 -159
  152. package/dist/lib/index.d.ts +0 -1
  153. package/dist/lib/index.js +0 -1
  154. package/dist/security/index.d.ts +0 -3
  155. package/dist/security/index.js +0 -3
  156. package/dist/security/security.d.ts +0 -23
  157. package/dist/security/security.js +0 -137
  158. package/dist/security/sign.d.ts +0 -103
  159. package/dist/security/sign.js +0 -666
  160. package/dist/security/verification-enforcer.d.ts +0 -53
  161. package/dist/security/verification-enforcer.js +0 -204
  162. package/dist/services/McpCoreService.d.ts +0 -98
  163. package/dist/services/McpCoreService.js +0 -124
  164. package/dist/services/index.d.ts +0 -1
  165. package/dist/services/index.js +0 -1
  166. package/dist/utils/config.d.ts +0 -111
  167. package/dist/utils/config.js +0 -342
  168. package/dist/utils/env-loader.d.ts +0 -54
  169. package/dist/utils/env-loader.js +0 -270
  170. package/dist/utils/help.d.ts +0 -36
  171. package/dist/utils/help.js +0 -248
  172. package/dist/utils/index.d.ts +0 -7
  173. package/dist/utils/index.js +0 -7
  174. package/dist/utils/silent-monitor.d.ts +0 -67
  175. package/dist/utils/silent-monitor.js +0 -242
  176. package/dist/utils/timeout.d.ts +0 -5
  177. package/dist/utils/timeout.js +0 -23
  178. package/dist/web/env-manager-server.d.ts +0 -29
  179. package/dist/web/env-manager-server.js +0 -367
  180. package/dist/web/index.d.ts +0 -1
  181. package/dist/web/index.js +0 -1
  182. package/src/LocalToolResolver.ts +0 -424
  183. package/src/api/enact-api.ts +0 -604
  184. package/src/api/index.ts +0 -2
  185. package/src/api/types.ts +0 -114
  186. package/src/core/DaggerExecutionProvider.ts +0 -1357
  187. package/src/core/DirectExecutionProvider.ts +0 -484
  188. package/src/core/EnactCore.ts +0 -847
  189. package/src/core/index.ts +0 -3
  190. package/src/exec/index.ts +0 -3
  191. package/src/exec/logger.ts +0 -63
  192. package/src/exec/validate.ts +0 -238
  193. package/src/lib/enact-direct.ts +0 -254
  194. package/src/lib/index.ts +0 -1
  195. package/src/services/McpCoreService.ts +0 -201
  196. package/src/services/index.ts +0 -1
  197. package/src/utils/config.ts +0 -438
  198. package/src/utils/env-loader.ts +0 -370
  199. package/src/utils/help.ts +0 -257
  200. package/src/utils/index.ts +0 -7
  201. package/src/utils/silent-monitor.ts +0 -328
  202. package/src/utils/timeout.ts +0 -26
  203. package/src/web/env-manager-server.ts +0 -465
  204. package/src/web/index.ts +0 -1
  205. package/src/web/static/app.js +0 -663
  206. package/src/web/static/index.html +0 -117
  207. package/src/web/static/style.css +0 -291
@@ -1,137 +0,0 @@
1
- // src/security/security.ts - Simplified security module for CLI core
2
- import logger from "../exec/logger";
3
- /**
4
- * Verify the signature of an Enact tool before execution
5
- * @param tool The tool to verify
6
- * @returns Boolean indicating validity
7
- */
8
- /**
9
- * Verify that a command is safe to execute
10
- * @param command The command to verify
11
- * @param tool The tool containing the command
12
- * @returns Object with safety status and warnings
13
- */
14
- export function verifyCommandSafety(command, tool) {
15
- const warnings = [];
16
- const blocked = [];
17
- // Dangerous command patterns that should be blocked
18
- const dangerousPatterns = [
19
- /rm\s+-rf\s+\//, // rm -rf /
20
- /rm\s+-rf\s+\*/, // rm -rf *
21
- />\s*\/dev\/sd[a-z]/, // Writing to disk devices
22
- /dd\s+if=.*of=\/dev/, // Direct disk writing
23
- /mkfs/, // Format filesystem
24
- /fdisk/, // Disk partitioning
25
- /passwd/, // Password changes
26
- /sudo\s+passwd/, // Password changes with sudo
27
- /chmod\s+777/, // Overly permissive permissions
28
- /curl.*\|\s*sh/, // Piping curl to shell
29
- /wget.*\|\s*sh/, // Piping wget to shell
30
- /exec\s+sh/, // Executing shell
31
- /\/etc\/passwd/, // Accessing password file
32
- /\/etc\/shadow/, // Accessing shadow file
33
- ];
34
- // Check for dangerous patterns
35
- for (const pattern of dangerousPatterns) {
36
- if (pattern.test(command)) {
37
- blocked.push(`Potentially dangerous command pattern detected: ${pattern.source}`);
38
- }
39
- }
40
- // Warning patterns that are suspicious but not necessarily blocked
41
- const warningPatterns = [
42
- /sudo\s+/, // Sudo usage
43
- /su\s+/, // User switching
44
- /systemctl/, // System service control
45
- /service\s+/, // Service control
46
- /mount/, // Mounting filesystems
47
- /umount/, // Unmounting filesystems
48
- /iptables/, // Firewall rules
49
- /crontab/, // Cron job management
50
- ];
51
- // Check for warning patterns
52
- for (const pattern of warningPatterns) {
53
- if (pattern.test(command)) {
54
- warnings.push(`Potentially privileged operation detected: ${pattern.source}`);
55
- }
56
- }
57
- // Check for version pinning (security best practice)
58
- if (command.includes("npx ") && !command.match(/npx\s+[^@#\s]+[@#]/)) {
59
- if (!command.includes("github:")) {
60
- warnings.push("NPX package not version-pinned - consider using @version or github:org/repo#commit");
61
- }
62
- }
63
- if (command.includes("uvx ") &&
64
- !command.includes("git+") &&
65
- !command.includes("@")) {
66
- warnings.push("UVX package not version-pinned - consider using @version or git+ URL");
67
- }
68
- if (command.includes("docker run") &&
69
- !command.match(/:[^@\s]+(@sha256:|:\w)/)) {
70
- warnings.push("Docker image not version-pinned - consider using specific tags or digests");
71
- }
72
- // Check for network access patterns
73
- if (tool.annotations?.openWorldHint !== true) {
74
- const networkPatterns = [
75
- /curl\s+/, // HTTP requests
76
- /wget\s+/, // HTTP requests
77
- /http[s]?:\/\//, // HTTP URLs
78
- /ftp:\/\//, // FTP URLs
79
- /ssh\s+/, // SSH connections
80
- /scp\s+/, // SCP transfers
81
- /rsync.*::/, // Rsync over network
82
- ];
83
- for (const pattern of networkPatterns) {
84
- if (pattern.test(command)) {
85
- warnings.push("Network access detected but openWorldHint not set to true");
86
- break;
87
- }
88
- }
89
- }
90
- // Check for destructive operations
91
- if (tool.annotations?.destructiveHint !== true) {
92
- const destructivePatterns = [
93
- /rm\s+/, // File removal
94
- /rmdir\s+/, // Directory removal
95
- /mv\s+.*\s+\/dev\//, // Moving to device files
96
- />\s*[^&]/, // File redirection (overwriting)
97
- /tee\s+/, // Writing to files
98
- ];
99
- for (const pattern of destructivePatterns) {
100
- if (pattern.test(command)) {
101
- warnings.push("Potentially destructive operation detected but destructiveHint not set to true");
102
- break;
103
- }
104
- }
105
- }
106
- return {
107
- isSafe: blocked.length === 0,
108
- warnings,
109
- ...(blocked.length > 0 && { blocked }),
110
- };
111
- }
112
- /**
113
- * Sanitize environment variables to prevent injection attacks
114
- * @param envVars Environment variables to sanitize
115
- * @returns Sanitized environment variables
116
- */
117
- export function sanitizeEnvironmentVariables(envVars) {
118
- const sanitized = {};
119
- for (const [key, value] of Object.entries(envVars)) {
120
- // Validate environment variable name
121
- if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
122
- logger.warn(`Invalid environment variable name: ${key}`);
123
- continue;
124
- }
125
- // Convert value to string and sanitize
126
- const strValue = String(value);
127
- // Check for potentially dangerous characters
128
- if (strValue.includes("\n") || strValue.includes("\r")) {
129
- logger.warn(`Environment variable ${key} contains newline characters`);
130
- }
131
- if (strValue.includes("$(") || strValue.includes("`")) {
132
- logger.warn(`Environment variable ${key} contains command substitution patterns`);
133
- }
134
- sanitized[key] = strValue;
135
- }
136
- return sanitized;
137
- }
@@ -1,103 +0,0 @@
1
- interface SignatureData {
2
- algorithm: string;
3
- type: string;
4
- signer: string;
5
- created: string;
6
- value: string;
7
- role?: string;
8
- }
9
- interface EnactTool {
10
- name: string;
11
- description: string;
12
- command: string;
13
- timeout?: string;
14
- tags?: string[];
15
- version?: string;
16
- enact?: string;
17
- protocol_version?: string;
18
- input_schema?: any;
19
- output_schema?: any;
20
- annotations?: any;
21
- env_vars?: Record<string, any>;
22
- examples?: any;
23
- resources?: any;
24
- raw_content?: string;
25
- signatures?: Array<SignatureData>;
26
- [key: string]: any;
27
- }
28
- interface VerificationPolicy {
29
- requireRoles?: string[];
30
- minimumSignatures?: number;
31
- trustedSigners?: string[];
32
- allowedAlgorithms?: string[];
33
- }
34
- /**
35
- * Get all trusted public keys mapped by their base64 representation
36
- * @returns Map of base64 public key -> PEM content
37
- */
38
- export declare function getTrustedPublicKeysMap(): Map<string, string>;
39
- /**
40
- * Sign an Enact tool and add to the signatures map
41
- * Signs only critical security fields for focused and reliable validation
42
- */
43
- export declare function signTool(toolPath: string, privateKeyPath: string, publicKeyPath: string, signerInfo: {
44
- id: string;
45
- role?: string;
46
- }, outputPath?: string): Promise<string>;
47
- /**
48
- * Verify tool signature using critical security fields only
49
- * This verifies signatures against only the security-critical fields
50
- */
51
- export declare function verifyToolSignature(toolObject: Record<string, unknown>, signatureB64: string, publicKeyObj: CryptoKey): Promise<boolean>;
52
- /**
53
- * Verify an Enact tool with embedded signatures against trusted keys
54
- * Only verifies signatures against critical security fields for focused validation
55
- */
56
- export declare function verifyTool(toolYaml: string | EnactTool, policy?: VerificationPolicy): Promise<{
57
- isValid: boolean;
58
- message: string;
59
- validSignatures: number;
60
- totalSignatures: number;
61
- verifiedSigners: Array<{
62
- signer: string;
63
- role?: string;
64
- keyId: string;
65
- }>;
66
- errors: string[];
67
- }>;
68
- /**
69
- * Check if a tool should be executed based on verification policy
70
- * @param tool Tool to check
71
- * @param policy Verification policy
72
- * @returns Whether execution should proceed
73
- */
74
- export declare function shouldExecuteTool(tool: EnactTool, policy?: VerificationPolicy): Promise<{
75
- allowed: boolean;
76
- reason: string;
77
- }>;
78
- /**
79
- * Generate a new ECC key pair
80
- */
81
- export declare function generateKeyPair(outputDir: string, prefix?: string): {
82
- privateKeyPath: string;
83
- publicKeyPath: string;
84
- };
85
- /**
86
- * Add a public key to trusted keys
87
- */
88
- export declare function addTrustedKey(keyPath: string, keyName?: string): string;
89
- /**
90
- * List all trusted keys with their base64 representations
91
- */
92
- export declare function listTrustedKeys(): Array<{
93
- id: string;
94
- filename: string;
95
- base64Key: string;
96
- fingerprint: string;
97
- }>;
98
- export declare const VERIFICATION_POLICIES: {
99
- PERMISSIVE: VerificationPolicy;
100
- ENTERPRISE: VerificationPolicy;
101
- PARANOID: VerificationPolicy;
102
- };
103
- export type { EnactTool, VerificationPolicy, SignatureData };