cloison-runtime 0.1.0

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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +47 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +57 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +27 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/credentials/index.d.ts +4 -0
  12. package/dist/credentials/index.d.ts.map +1 -0
  13. package/dist/credentials/index.js +3 -0
  14. package/dist/credentials/index.js.map +1 -0
  15. package/dist/credentials/proxy.d.ts +3 -0
  16. package/dist/credentials/proxy.d.ts.map +1 -0
  17. package/dist/credentials/proxy.js +11 -0
  18. package/dist/credentials/proxy.js.map +1 -0
  19. package/dist/credentials/store.d.ts +7 -0
  20. package/dist/credentials/store.d.ts.map +1 -0
  21. package/dist/credentials/store.js +115 -0
  22. package/dist/credentials/store.js.map +1 -0
  23. package/dist/credentials/types.d.ts +14 -0
  24. package/dist/credentials/types.d.ts.map +1 -0
  25. package/dist/credentials/types.js +2 -0
  26. package/dist/credentials/types.js.map +1 -0
  27. package/dist/hooks/index.d.ts +3 -0
  28. package/dist/hooks/index.d.ts.map +1 -0
  29. package/dist/hooks/index.js +2 -0
  30. package/dist/hooks/index.js.map +1 -0
  31. package/dist/hooks/runner.d.ts +7 -0
  32. package/dist/hooks/runner.d.ts.map +1 -0
  33. package/dist/hooks/runner.js +20 -0
  34. package/dist/hooks/runner.js.map +1 -0
  35. package/dist/hooks/types.d.ts +39 -0
  36. package/dist/hooks/types.d.ts.map +1 -0
  37. package/dist/hooks/types.js +2 -0
  38. package/dist/hooks/types.js.map +1 -0
  39. package/dist/index.d.ts +32 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +58 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/infra/env.d.ts +2 -0
  44. package/dist/infra/env.d.ts.map +1 -0
  45. package/dist/infra/env.js +6 -0
  46. package/dist/infra/env.js.map +1 -0
  47. package/dist/infra/warning-filter.d.ts +8 -0
  48. package/dist/infra/warning-filter.d.ts.map +1 -0
  49. package/dist/infra/warning-filter.js +66 -0
  50. package/dist/infra/warning-filter.js.map +1 -0
  51. package/dist/logging/subsystem.d.ts +29 -0
  52. package/dist/logging/subsystem.d.ts.map +1 -0
  53. package/dist/logging/subsystem.js +322 -0
  54. package/dist/logging/subsystem.js.map +1 -0
  55. package/dist/memory/embedding-batch.d.ts +38 -0
  56. package/dist/memory/embedding-batch.d.ts.map +1 -0
  57. package/dist/memory/embedding-batch.js +253 -0
  58. package/dist/memory/embedding-batch.js.map +1 -0
  59. package/dist/memory/embedding-cache.d.ts +16 -0
  60. package/dist/memory/embedding-cache.d.ts.map +1 -0
  61. package/dist/memory/embedding-cache.js +113 -0
  62. package/dist/memory/embedding-cache.js.map +1 -0
  63. package/dist/memory/embeddings-debug.d.ts +2 -0
  64. package/dist/memory/embeddings-debug.d.ts.map +1 -0
  65. package/dist/memory/embeddings-debug.js +12 -0
  66. package/dist/memory/embeddings-debug.js.map +1 -0
  67. package/dist/memory/embeddings.d.ts +17 -0
  68. package/dist/memory/embeddings.d.ts.map +1 -0
  69. package/dist/memory/embeddings.js +203 -0
  70. package/dist/memory/embeddings.js.map +1 -0
  71. package/dist/memory/file-indexer.d.ts +26 -0
  72. package/dist/memory/file-indexer.d.ts.map +1 -0
  73. package/dist/memory/file-indexer.js +260 -0
  74. package/dist/memory/file-indexer.js.map +1 -0
  75. package/dist/memory/fs-utils.d.ts +12 -0
  76. package/dist/memory/fs-utils.d.ts.map +1 -0
  77. package/dist/memory/fs-utils.js +24 -0
  78. package/dist/memory/fs-utils.js.map +1 -0
  79. package/dist/memory/hybrid.d.ts +46 -0
  80. package/dist/memory/hybrid.d.ts.map +1 -0
  81. package/dist/memory/hybrid.js +85 -0
  82. package/dist/memory/hybrid.js.map +1 -0
  83. package/dist/memory/index.d.ts +17 -0
  84. package/dist/memory/index.d.ts.map +1 -0
  85. package/dist/memory/index.js +15 -0
  86. package/dist/memory/index.js.map +1 -0
  87. package/dist/memory/internal.d.ts +39 -0
  88. package/dist/memory/internal.d.ts.map +1 -0
  89. package/dist/memory/internal.js +292 -0
  90. package/dist/memory/internal.js.map +1 -0
  91. package/dist/memory/manager-search.d.ts +61 -0
  92. package/dist/memory/manager-search.d.ts.map +1 -0
  93. package/dist/memory/manager-search.js +102 -0
  94. package/dist/memory/manager-search.js.map +1 -0
  95. package/dist/memory/mmr.d.ts +63 -0
  96. package/dist/memory/mmr.d.ts.map +1 -0
  97. package/dist/memory/mmr.js +165 -0
  98. package/dist/memory/mmr.js.map +1 -0
  99. package/dist/memory/query-expansion.d.ts +42 -0
  100. package/dist/memory/query-expansion.d.ts.map +1 -0
  101. package/dist/memory/query-expansion.js +776 -0
  102. package/dist/memory/query-expansion.js.map +1 -0
  103. package/dist/memory/session-indexer.d.ts +41 -0
  104. package/dist/memory/session-indexer.d.ts.map +1 -0
  105. package/dist/memory/session-indexer.js +367 -0
  106. package/dist/memory/session-indexer.js.map +1 -0
  107. package/dist/memory/simple-manager.d.ts +29 -0
  108. package/dist/memory/simple-manager.d.ts.map +1 -0
  109. package/dist/memory/simple-manager.js +216 -0
  110. package/dist/memory/simple-manager.js.map +1 -0
  111. package/dist/memory/sqlite.d.ts +2 -0
  112. package/dist/memory/sqlite.d.ts.map +1 -0
  113. package/dist/memory/sqlite.js +16 -0
  114. package/dist/memory/sqlite.js.map +1 -0
  115. package/dist/memory/ssrf.d.ts +18 -0
  116. package/dist/memory/ssrf.d.ts.map +1 -0
  117. package/dist/memory/ssrf.js +396 -0
  118. package/dist/memory/ssrf.js.map +1 -0
  119. package/dist/memory/temporal-decay.d.ts +26 -0
  120. package/dist/memory/temporal-decay.d.ts.map +1 -0
  121. package/dist/memory/temporal-decay.js +120 -0
  122. package/dist/memory/temporal-decay.js.map +1 -0
  123. package/dist/memory/types.d.ts +95 -0
  124. package/dist/memory/types.d.ts.map +1 -0
  125. package/dist/memory/types.js +2 -0
  126. package/dist/memory/types.js.map +1 -0
  127. package/dist/package.json +68 -0
  128. package/dist/platform/index.d.ts +3 -0
  129. package/dist/platform/index.d.ts.map +1 -0
  130. package/dist/platform/index.js +2 -0
  131. package/dist/platform/index.js.map +1 -0
  132. package/dist/platform/platform.d.ts +3 -0
  133. package/dist/platform/platform.d.ts.map +1 -0
  134. package/dist/platform/platform.js +91 -0
  135. package/dist/platform/platform.js.map +1 -0
  136. package/dist/platform/types.d.ts +18 -0
  137. package/dist/platform/types.d.ts.map +1 -0
  138. package/dist/platform/types.js +2 -0
  139. package/dist/platform/types.js.map +1 -0
  140. package/dist/runtime/agent.d.ts +36 -0
  141. package/dist/runtime/agent.d.ts.map +1 -0
  142. package/dist/runtime/agent.js +250 -0
  143. package/dist/runtime/agent.js.map +1 -0
  144. package/dist/runtime/api-key-rotation.d.ts +26 -0
  145. package/dist/runtime/api-key-rotation.d.ts.map +1 -0
  146. package/dist/runtime/api-key-rotation.js +174 -0
  147. package/dist/runtime/api-key-rotation.js.map +1 -0
  148. package/dist/runtime/context-guard.d.ts +32 -0
  149. package/dist/runtime/context-guard.d.ts.map +1 -0
  150. package/dist/runtime/context-guard.js +61 -0
  151. package/dist/runtime/context-guard.js.map +1 -0
  152. package/dist/runtime/failover-error.d.ts +62 -0
  153. package/dist/runtime/failover-error.d.ts.map +1 -0
  154. package/dist/runtime/failover-error.js +733 -0
  155. package/dist/runtime/failover-error.js.map +1 -0
  156. package/dist/runtime/failover-policy.d.ts +5 -0
  157. package/dist/runtime/failover-policy.d.ts.map +1 -0
  158. package/dist/runtime/failover-policy.js +18 -0
  159. package/dist/runtime/failover-policy.js.map +1 -0
  160. package/dist/runtime/index.d.ts +13 -0
  161. package/dist/runtime/index.d.ts.map +1 -0
  162. package/dist/runtime/index.js +13 -0
  163. package/dist/runtime/index.js.map +1 -0
  164. package/dist/runtime/memory-flush.d.ts +24 -0
  165. package/dist/runtime/memory-flush.d.ts.map +1 -0
  166. package/dist/runtime/memory-flush.js +64 -0
  167. package/dist/runtime/memory-flush.js.map +1 -0
  168. package/dist/runtime/memory-tools.d.ts +14 -0
  169. package/dist/runtime/memory-tools.d.ts.map +1 -0
  170. package/dist/runtime/memory-tools.js +58 -0
  171. package/dist/runtime/memory-tools.js.map +1 -0
  172. package/dist/runtime/model-fallback.d.ts +56 -0
  173. package/dist/runtime/model-fallback.d.ts.map +1 -0
  174. package/dist/runtime/model-fallback.js +301 -0
  175. package/dist/runtime/model-fallback.js.map +1 -0
  176. package/dist/runtime/model-fallback.types.d.ts +14 -0
  177. package/dist/runtime/model-fallback.types.d.ts.map +1 -0
  178. package/dist/runtime/model-fallback.types.js +3 -0
  179. package/dist/runtime/model-fallback.types.js.map +1 -0
  180. package/dist/runtime/retry.d.ts +24 -0
  181. package/dist/runtime/retry.d.ts.map +1 -0
  182. package/dist/runtime/retry.js +100 -0
  183. package/dist/runtime/retry.js.map +1 -0
  184. package/dist/runtime/session-pruning.d.ts +22 -0
  185. package/dist/runtime/session-pruning.d.ts.map +1 -0
  186. package/dist/runtime/session-pruning.js +118 -0
  187. package/dist/runtime/session-pruning.js.map +1 -0
  188. package/dist/runtime/stream-adapters.d.ts +11 -0
  189. package/dist/runtime/stream-adapters.d.ts.map +1 -0
  190. package/dist/runtime/stream-adapters.js +46 -0
  191. package/dist/runtime/stream-adapters.js.map +1 -0
  192. package/dist/runtime/subagent.d.ts +83 -0
  193. package/dist/runtime/subagent.d.ts.map +1 -0
  194. package/dist/runtime/subagent.js +190 -0
  195. package/dist/runtime/subagent.js.map +1 -0
  196. package/dist/runtime/tool-result-truncation.d.ts +25 -0
  197. package/dist/runtime/tool-result-truncation.d.ts.map +1 -0
  198. package/dist/runtime/tool-result-truncation.js +115 -0
  199. package/dist/runtime/tool-result-truncation.js.map +1 -0
  200. package/dist/sandbox/cgroup.d.ts +20 -0
  201. package/dist/sandbox/cgroup.d.ts.map +1 -0
  202. package/dist/sandbox/cgroup.js +82 -0
  203. package/dist/sandbox/cgroup.js.map +1 -0
  204. package/dist/sandbox/index.d.ts +12 -0
  205. package/dist/sandbox/index.d.ts.map +1 -0
  206. package/dist/sandbox/index.js +10 -0
  207. package/dist/sandbox/index.js.map +1 -0
  208. package/dist/sandbox/ipc.d.ts +26 -0
  209. package/dist/sandbox/ipc.d.ts.map +1 -0
  210. package/dist/sandbox/ipc.js +154 -0
  211. package/dist/sandbox/ipc.js.map +1 -0
  212. package/dist/sandbox/manager.d.ts +4 -0
  213. package/dist/sandbox/manager.d.ts.map +1 -0
  214. package/dist/sandbox/manager.js +251 -0
  215. package/dist/sandbox/manager.js.map +1 -0
  216. package/dist/sandbox/namespace.d.ts +12 -0
  217. package/dist/sandbox/namespace.d.ts.map +1 -0
  218. package/dist/sandbox/namespace.js +119 -0
  219. package/dist/sandbox/namespace.js.map +1 -0
  220. package/dist/sandbox/proxy-tools.d.ts +14 -0
  221. package/dist/sandbox/proxy-tools.d.ts.map +1 -0
  222. package/dist/sandbox/proxy-tools.js +63 -0
  223. package/dist/sandbox/proxy-tools.js.map +1 -0
  224. package/dist/sandbox/rootfs.d.ts +20 -0
  225. package/dist/sandbox/rootfs.d.ts.map +1 -0
  226. package/dist/sandbox/rootfs.js +247 -0
  227. package/dist/sandbox/rootfs.js.map +1 -0
  228. package/dist/sandbox/seccomp-apply.d.ts +9 -0
  229. package/dist/sandbox/seccomp-apply.d.ts.map +1 -0
  230. package/dist/sandbox/seccomp-apply.js +227 -0
  231. package/dist/sandbox/seccomp-apply.js.map +1 -0
  232. package/dist/sandbox/seccomp.d.ts +13 -0
  233. package/dist/sandbox/seccomp.d.ts.map +1 -0
  234. package/dist/sandbox/seccomp.js +120 -0
  235. package/dist/sandbox/seccomp.js.map +1 -0
  236. package/dist/sandbox/types.d.ts +66 -0
  237. package/dist/sandbox/types.d.ts.map +1 -0
  238. package/dist/sandbox/types.js +8 -0
  239. package/dist/sandbox/types.js.map +1 -0
  240. package/dist/sandbox/worker.d.ts +15 -0
  241. package/dist/sandbox/worker.d.ts.map +1 -0
  242. package/dist/sandbox/worker.js +151 -0
  243. package/dist/sandbox/worker.js.map +1 -0
  244. package/dist/sessions/index.d.ts +3 -0
  245. package/dist/sessions/index.d.ts.map +1 -0
  246. package/dist/sessions/index.js +3 -0
  247. package/dist/sessions/index.js.map +1 -0
  248. package/dist/sessions/store.d.ts +17 -0
  249. package/dist/sessions/store.d.ts.map +1 -0
  250. package/dist/sessions/store.js +70 -0
  251. package/dist/sessions/store.js.map +1 -0
  252. package/dist/sessions/transcript-events.d.ts +11 -0
  253. package/dist/sessions/transcript-events.d.ts.map +1 -0
  254. package/dist/sessions/transcript-events.js +40 -0
  255. package/dist/sessions/transcript-events.js.map +1 -0
  256. package/dist/shared/agent-session.d.ts +10 -0
  257. package/dist/shared/agent-session.d.ts.map +1 -0
  258. package/dist/shared/agent-session.js +33 -0
  259. package/dist/shared/agent-session.js.map +1 -0
  260. package/dist/shared/constants.d.ts +6 -0
  261. package/dist/shared/constants.d.ts.map +1 -0
  262. package/dist/shared/constants.js +17 -0
  263. package/dist/shared/constants.js.map +1 -0
  264. package/dist/shared/fs.d.ts +7 -0
  265. package/dist/shared/fs.d.ts.map +1 -0
  266. package/dist/shared/fs.js +14 -0
  267. package/dist/shared/fs.js.map +1 -0
  268. package/dist/shared/index.d.ts +4 -0
  269. package/dist/shared/index.d.ts.map +1 -0
  270. package/dist/shared/index.js +4 -0
  271. package/dist/shared/index.js.map +1 -0
  272. package/dist/skills/enablement.d.ts +10 -0
  273. package/dist/skills/enablement.d.ts.map +1 -0
  274. package/dist/skills/enablement.js +52 -0
  275. package/dist/skills/enablement.js.map +1 -0
  276. package/dist/skills/index.d.ts +4 -0
  277. package/dist/skills/index.d.ts.map +1 -0
  278. package/dist/skills/index.js +4 -0
  279. package/dist/skills/index.js.map +1 -0
  280. package/dist/skills/loader.d.ts +8 -0
  281. package/dist/skills/loader.d.ts.map +1 -0
  282. package/dist/skills/loader.js +8 -0
  283. package/dist/skills/loader.js.map +1 -0
  284. package/dist/skills/registry.d.ts +19 -0
  285. package/dist/skills/registry.d.ts.map +1 -0
  286. package/dist/skills/registry.js +106 -0
  287. package/dist/skills/registry.js.map +1 -0
  288. package/dist/utils/boolean.d.ts +6 -0
  289. package/dist/utils/boolean.d.ts.map +1 -0
  290. package/dist/utils/boolean.js +28 -0
  291. package/dist/utils/boolean.js.map +1 -0
  292. package/dist/utils/run-with-concurrency.d.ts +12 -0
  293. package/dist/utils/run-with-concurrency.d.ts.map +1 -0
  294. package/dist/utils/run-with-concurrency.js +40 -0
  295. package/dist/utils/run-with-concurrency.js.map +1 -0
  296. package/dist/utils.d.ts +3 -0
  297. package/dist/utils.d.ts.map +1 -0
  298. package/dist/utils.js +38 -0
  299. package/dist/utils.js.map +1 -0
  300. package/dist/workspace/index.d.ts +3 -0
  301. package/dist/workspace/index.d.ts.map +1 -0
  302. package/dist/workspace/index.js +2 -0
  303. package/dist/workspace/index.js.map +1 -0
  304. package/dist/workspace/runner.d.ts +19 -0
  305. package/dist/workspace/runner.d.ts.map +1 -0
  306. package/dist/workspace/runner.js +491 -0
  307. package/dist/workspace/runner.js.map +1 -0
  308. package/dist/workspace/types.d.ts +37 -0
  309. package/dist/workspace/types.d.ts.map +1 -0
  310. package/dist/workspace/types.js +2 -0
  311. package/dist/workspace/types.js.map +1 -0
  312. package/dist/workspace/workspace.d.ts +12 -0
  313. package/dist/workspace/workspace.d.ts.map +1 -0
  314. package/dist/workspace/workspace.js +85 -0
  315. package/dist/workspace/workspace.js.map +1 -0
  316. package/package.json +82 -0
@@ -0,0 +1,63 @@
1
+ export function createProxyTools(peer) {
2
+ return [
3
+ {
4
+ name: "memory_search",
5
+ label: "Memory Search",
6
+ description: "Search your memory for relevant information. Returns matching memories ranked by relevance.",
7
+ parameters: {
8
+ type: "object",
9
+ properties: {
10
+ query: { type: "string" },
11
+ maxResults: { type: "number" },
12
+ },
13
+ required: ["query"],
14
+ },
15
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
16
+ const results = await peer.call("memory.search", {
17
+ query: params.query,
18
+ maxResults: params.maxResults ?? 5,
19
+ });
20
+ return { resultForAssistant: JSON.stringify(results, null, 2) };
21
+ },
22
+ },
23
+ {
24
+ name: "memory_store",
25
+ label: "Memory Store",
26
+ description: "Store information in your memory for future reference. Use this to remember important facts.",
27
+ parameters: {
28
+ type: "object",
29
+ properties: {
30
+ content: { type: "string" },
31
+ },
32
+ required: ["content"],
33
+ },
34
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
35
+ const result = await peer.call("memory.store", {
36
+ content: params.content,
37
+ });
38
+ return { resultForAssistant: JSON.stringify(result) };
39
+ },
40
+ },
41
+ {
42
+ name: "skill_execute",
43
+ label: "Execute Skill",
44
+ description: "Execute an enabled skill. Credentials are injected automatically by the platform.",
45
+ parameters: {
46
+ type: "object",
47
+ properties: {
48
+ skillId: { type: "string" },
49
+ params: { type: "object" },
50
+ },
51
+ required: ["skillId"],
52
+ },
53
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
54
+ const result = await peer.call("skill.execute", {
55
+ skillId: params.skillId,
56
+ params: params.params,
57
+ });
58
+ return { resultForAssistant: JSON.stringify(result) };
59
+ },
60
+ },
61
+ ];
62
+ }
63
+ //# sourceMappingURL=proxy-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-tools.js","sourceRoot":"","sources":["../../src/sandbox/proxy-tools.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO;QACL;YACE,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,6FAA6F;YAC/F,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC/B;gBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;aACpB;YACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI;gBACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;iBACnC,CAAC,CAAC;gBACH,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,CAAC;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc;YACrB,WAAW,EACT,8FAA8F;YAChG,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC5B;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;YACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI;gBACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAC;gBACH,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,CAAC;SACF;QACD;YACE,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,mFAAmF;YACrF,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;YACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI;gBACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBAC9C,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;gBACH,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { MountBind } from "./types.js";
2
+ export interface RootfsOptions {
3
+ sandboxId: string;
4
+ workspaceDir: string;
5
+ nodeExecutable?: string;
6
+ /** Directory containing the worker script (src/ or dist/) */
7
+ projectDir?: string;
8
+ additionalBinds?: MountBind[];
9
+ }
10
+ export interface PreparedRootfs {
11
+ rootDir: string;
12
+ mounts: MountBind[];
13
+ cleanup(): void;
14
+ }
15
+ export declare function prepareRootfs(options: RootfsOptions): PreparedRootfs;
16
+ export interface MountScriptOptions {
17
+ hasPidNamespace?: boolean;
18
+ }
19
+ export declare function buildMountScript(rootDir: string, mounts: MountBind[], options?: MountScriptOptions): string;
20
+ //# sourceMappingURL=rootfs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rootfs.d.ts","sourceRoot":"","sources":["../../src/sandbox/rootfs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAkBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CA2IpE;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,CAoDR"}
@@ -0,0 +1,247 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import * as url from "node:url";
5
+ import { escapeShellArg } from "../shared/index.js";
6
+ const SYSTEM_READONLY_PATHS = [
7
+ "/usr",
8
+ "/lib",
9
+ "/lib64",
10
+ "/bin",
11
+ "/sbin",
12
+ "/etc/alternatives",
13
+ "/etc/ssl",
14
+ "/etc/ca-certificates",
15
+ "/etc/resolv.conf",
16
+ "/etc/hosts",
17
+ "/etc/nsswitch.conf",
18
+ "/etc/passwd",
19
+ "/etc/group",
20
+ ];
21
+ export function prepareRootfs(options) {
22
+ const resolvedWorkspace = path.resolve(options.workspaceDir);
23
+ if (isSensitiveHostPath(resolvedWorkspace)) {
24
+ throw new Error(`workspaceDir "${options.workspaceDir}" references a sensitive host path`);
25
+ }
26
+ const rootDir = path.join(os.tmpdir(), "cloison-runtime-rootfs", options.sandboxId);
27
+ fs.mkdirSync(rootDir, { recursive: true });
28
+ const mounts = [];
29
+ for (const sysPath of SYSTEM_READONLY_PATHS) {
30
+ const stat = safeStat(sysPath);
31
+ if (!stat)
32
+ continue;
33
+ const targetInRoot = path.join(rootDir, sysPath);
34
+ if (stat?.isDirectory()) {
35
+ fs.mkdirSync(targetInRoot, { recursive: true });
36
+ }
37
+ else {
38
+ fs.mkdirSync(path.dirname(targetInRoot), { recursive: true });
39
+ safeTouch(targetInRoot);
40
+ }
41
+ mounts.push({ source: sysPath, target: targetInRoot, readonly: true });
42
+ }
43
+ const nodeExec = options.nodeExecutable ?? process.execPath;
44
+ const nodeDir = path.dirname(nodeExec);
45
+ const resolvedNodeDir = path.resolve(nodeDir);
46
+ if (isSensitiveHostPath(resolvedNodeDir)) {
47
+ throw new Error(`nodeExecutable directory "${nodeDir}" references a sensitive host path`);
48
+ }
49
+ const nodeDirInRoot = path.join(rootDir, nodeDir);
50
+ fs.mkdirSync(nodeDirInRoot, { recursive: true });
51
+ mounts.push({ source: nodeDir, target: nodeDirInRoot, readonly: true });
52
+ const nodeModulesPath = findNodeModules();
53
+ if (nodeModulesPath) {
54
+ const nmInRoot = path.join(rootDir, nodeModulesPath);
55
+ fs.mkdirSync(nmInRoot, { recursive: true });
56
+ mounts.push({ source: nodeModulesPath, target: nmInRoot, readonly: true });
57
+ }
58
+ if (options.projectDir) {
59
+ const resolvedProjectDir = path.resolve(options.projectDir);
60
+ if (isSensitiveHostPath(resolvedProjectDir)) {
61
+ throw new Error(`projectDir "${options.projectDir}" references a sensitive host path`);
62
+ }
63
+ const projInRoot = path.join(rootDir, options.projectDir);
64
+ fs.mkdirSync(projInRoot, { recursive: true });
65
+ mounts.push({ source: options.projectDir, target: projInRoot, readonly: true });
66
+ }
67
+ const wsInRoot = path.join(rootDir, options.workspaceDir);
68
+ fs.mkdirSync(wsInRoot, { recursive: true });
69
+ mounts.push({
70
+ source: options.workspaceDir,
71
+ target: wsInRoot,
72
+ readonly: false,
73
+ });
74
+ const tmpInRoot = path.join(rootDir, "tmp");
75
+ fs.mkdirSync(tmpInRoot, { recursive: true });
76
+ const devDir = path.join(rootDir, "dev");
77
+ fs.mkdirSync(devDir, { recursive: true });
78
+ for (const dev of ["null", "zero", "urandom", "random"]) {
79
+ const devPath = `/dev/${dev}`;
80
+ if (fs.existsSync(devPath)) {
81
+ const devInRoot = path.join(rootDir, "dev", dev);
82
+ safeTouch(devInRoot);
83
+ mounts.push({ source: devPath, target: devInRoot, readonly: true });
84
+ }
85
+ }
86
+ const procDir = path.join(rootDir, "proc");
87
+ fs.mkdirSync(procDir, { recursive: true });
88
+ const oldRootDir = path.join(rootDir, ".old-root");
89
+ fs.mkdirSync(oldRootDir, { recursive: true });
90
+ if (options.additionalBinds) {
91
+ const resolvedRoot = path.resolve(rootDir);
92
+ for (const bind of options.additionalBinds) {
93
+ const resolvedSource = path.resolve(bind.source);
94
+ if (isSensitiveHostPath(resolvedSource)) {
95
+ throw new Error(`additionalBind source "${bind.source}" references a sensitive host path`);
96
+ }
97
+ const targetInRoot = path.join(rootDir, bind.target);
98
+ const resolvedTarget = path.resolve(targetInRoot);
99
+ if (!resolvedTarget.startsWith(resolvedRoot + path.sep) && resolvedTarget !== resolvedRoot) {
100
+ throw new Error(`additionalBind target "${bind.target}" resolves outside rootDir`);
101
+ }
102
+ const srcStat2 = safeStat(resolvedSource);
103
+ if (!srcStat2) {
104
+ throw new Error(`additionalBind source "${bind.source}" does not exist`);
105
+ }
106
+ if (srcStat2.isSymbolicLink()) {
107
+ throw new Error(`additionalBind source "${bind.source}" is a symbolic link (not allowed)`);
108
+ }
109
+ if (srcStat2.isDirectory()) {
110
+ fs.mkdirSync(targetInRoot, { recursive: true });
111
+ }
112
+ else {
113
+ fs.mkdirSync(path.dirname(targetInRoot), { recursive: true });
114
+ safeTouch(targetInRoot);
115
+ }
116
+ mounts.push({ source: resolvedSource, target: targetInRoot, readonly: bind.readonly });
117
+ }
118
+ }
119
+ return {
120
+ rootDir,
121
+ mounts,
122
+ cleanup() {
123
+ try {
124
+ fs.rmSync(rootDir, { recursive: true, force: true });
125
+ }
126
+ catch {
127
+ // best effort
128
+ }
129
+ },
130
+ };
131
+ }
132
+ export function buildMountScript(rootDir, mounts, options) {
133
+ const esc = escapeShellArg;
134
+ const lines = [
135
+ "#!/bin/sh",
136
+ "set -e",
137
+ "",
138
+ `ROOTDIR=${esc(rootDir)}`,
139
+ "",
140
+ "# Make rootDir a mount point for pivot_root",
141
+ 'mount --bind "$ROOTDIR" "$ROOTDIR"',
142
+ "",
143
+ ];
144
+ for (const mount of mounts) {
145
+ if (mount.readonly) {
146
+ lines.push(`mount --bind ${esc(mount.source)} ${esc(mount.target)}`);
147
+ lines.push(`mount -o remount,ro,bind ${esc(mount.target)}`);
148
+ }
149
+ else {
150
+ lines.push(`mount --bind ${esc(mount.source)} ${esc(mount.target)}`);
151
+ }
152
+ }
153
+ lines.push("");
154
+ if (options?.hasPidNamespace) {
155
+ lines.push("# Mount proc (PID namespace active)");
156
+ lines.push('mount -t proc proc "$ROOTDIR/proc" || { echo "WARNING: proc mount failed" >&2; }');
157
+ }
158
+ else {
159
+ lines.push("# No PID namespace: skip proc mount to prevent host process exposure");
160
+ }
161
+ lines.push("");
162
+ lines.push("# pivot_root: swap root filesystem");
163
+ lines.push('cd "$ROOTDIR"');
164
+ lines.push("pivot_root . .old-root");
165
+ lines.push("");
166
+ lines.push("# Unmount old root - fail-closed: abort if either unmount fails");
167
+ lines.push("umount /.old-root 2>/dev/null || umount -l /.old-root || { echo 'FATAL: cannot unmount old root' >&2; exit 1; }");
168
+ lines.push("# Verify old root is no longer a mount point");
169
+ lines.push('if mountpoint -q /.old-root 2>/dev/null; then');
170
+ lines.push(' echo "FATAL: old root still mounted after unmount" >&2');
171
+ lines.push(" exit 1");
172
+ lines.push("fi");
173
+ lines.push("# Verify old root directory is empty (fail-closed: ls errors also trigger abort)");
174
+ lines.push('if [ -d "/.old-root" ] && [ -n "$(ls -A /.old-root 2>&1)" ]; then');
175
+ lines.push(' echo "FATAL: old root still accessible after unmount" >&2');
176
+ lines.push(" exit 1");
177
+ lines.push("fi");
178
+ lines.push("rmdir /.old-root 2>/dev/null || true");
179
+ lines.push("");
180
+ return lines.join("\n");
181
+ }
182
+ function findNodeModules() {
183
+ const searchRoots = [
184
+ path.dirname(url.fileURLToPath(import.meta.url)),
185
+ process.cwd(),
186
+ ];
187
+ for (const start of searchRoots) {
188
+ let dir = start;
189
+ for (let i = 0; i < 10; i++) {
190
+ const nmPath = path.join(dir, "node_modules");
191
+ const stat = safeStat(nmPath);
192
+ if (stat && stat.isDirectory() && !stat.isSymbolicLink())
193
+ return nmPath;
194
+ const parent = path.dirname(dir);
195
+ if (parent === dir)
196
+ break;
197
+ dir = parent;
198
+ }
199
+ }
200
+ return null;
201
+ }
202
+ const SENSITIVE_HOST_PATHS = new Set([
203
+ "/",
204
+ "/root",
205
+ "/proc",
206
+ "/sys",
207
+ "/dev",
208
+ "/boot",
209
+ "/run",
210
+ "/var/run/docker.sock",
211
+ "/run/docker.sock",
212
+ ]);
213
+ const SENSITIVE_HOST_PREFIXES = [
214
+ "/root/",
215
+ "/proc/",
216
+ "/sys/",
217
+ "/home/",
218
+ "/run/",
219
+ "/etc/shadow",
220
+ "/etc/sudoers",
221
+ "/etc/gshadow",
222
+ "/etc/master.passwd",
223
+ "/var/run/docker.sock",
224
+ "/run/docker.sock",
225
+ ];
226
+ function isSensitiveHostPath(resolved) {
227
+ if (SENSITIVE_HOST_PATHS.has(resolved))
228
+ return true;
229
+ return SENSITIVE_HOST_PREFIXES.some((prefix) => resolved.startsWith(prefix));
230
+ }
231
+ function safeStat(p) {
232
+ try {
233
+ return fs.lstatSync(p);
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ }
239
+ function safeTouch(p) {
240
+ try {
241
+ fs.writeFileSync(p, "", { flag: "a" });
242
+ }
243
+ catch {
244
+ // best effort
245
+ }
246
+ }
247
+ //# sourceMappingURL=rootfs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rootfs.js","sourceRoot":"","sources":["../../src/sandbox/rootfs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type SeccompProfile } from "./seccomp.js";
2
+ export declare function ensureSeccompLoader(): string | null;
3
+ export declare function buildSeccompWrapperArgs(profile: SeccompProfile, sandboxId: string, command: string, args: string[]): {
4
+ command: string;
5
+ args: string[];
6
+ profilePath: string;
7
+ } | null;
8
+ export declare function isSeccompAvailable(): boolean;
9
+ //# sourceMappingURL=seccomp-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seccomp-apply.d.ts","sourceRoot":"","sources":["../../src/sandbox/seccomp-apply.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AA6MxE,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAMnD;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUjE;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C"}
@@ -0,0 +1,227 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import { execSync } from "node:child_process";
5
+ import { createSubsystemLogger } from "../logging/subsystem.js";
6
+ import { writeSeccompProfile } from "./seccomp.js";
7
+ const log = createSubsystemLogger("seccomp-apply");
8
+ // Real seccomp-BPF loader: applies PR_SET_NO_NEW_PRIVS + a BPF filter
9
+ // that blocks dangerous syscalls (ptrace, mount, unshare, bpf, etc.)
10
+ // with EPERM. Falls back to no-new-privs only if seccomp() syscall fails.
11
+ const SECCOMP_LOADER_SOURCE = `
12
+ #include <stdio.h>
13
+ #include <stdlib.h>
14
+ #include <string.h>
15
+ #include <unistd.h>
16
+ #include <errno.h>
17
+ #include <stddef.h>
18
+ #include <sys/prctl.h>
19
+ #include <sys/syscall.h>
20
+ #include <linux/seccomp.h>
21
+ #include <linux/filter.h>
22
+ #include <linux/audit.h>
23
+
24
+ #ifndef SECCOMP_SET_MODE_FILTER
25
+ #define SECCOMP_SET_MODE_FILTER 1
26
+ #endif
27
+
28
+ #if defined(__x86_64__)
29
+ #define AUDIT_ARCH_CURRENT AUDIT_ARCH_X86_64
30
+ #elif defined(__aarch64__)
31
+ #define AUDIT_ARCH_CURRENT AUDIT_ARCH_AARCH64
32
+ #else
33
+ #error "Unsupported architecture for seccomp-BPF"
34
+ #endif
35
+
36
+ /* Blocked syscalls matching BLOCKED_SYSCALLS in seccomp.ts */
37
+ static const int BLOCKED[] = {
38
+ #ifdef __NR_ptrace
39
+ __NR_ptrace,
40
+ #endif
41
+ #ifdef __NR_mount
42
+ __NR_mount,
43
+ #endif
44
+ #ifdef __NR_umount2
45
+ __NR_umount2,
46
+ #endif
47
+ #ifdef __NR_pivot_root
48
+ __NR_pivot_root,
49
+ #endif
50
+ #ifdef __NR_chroot
51
+ __NR_chroot,
52
+ #endif
53
+ #ifdef __NR_reboot
54
+ __NR_reboot,
55
+ #endif
56
+ #ifdef __NR_kexec_load
57
+ __NR_kexec_load,
58
+ #endif
59
+ #ifdef __NR_init_module
60
+ __NR_init_module,
61
+ #endif
62
+ #ifdef __NR_finit_module
63
+ __NR_finit_module,
64
+ #endif
65
+ #ifdef __NR_delete_module
66
+ __NR_delete_module,
67
+ #endif
68
+ #ifdef __NR_acct
69
+ __NR_acct,
70
+ #endif
71
+ #ifdef __NR_swapon
72
+ __NR_swapon,
73
+ #endif
74
+ #ifdef __NR_swapoff
75
+ __NR_swapoff,
76
+ #endif
77
+ #ifdef __NR_bpf
78
+ __NR_bpf,
79
+ #endif
80
+ #ifdef __NR_userfaultfd
81
+ __NR_userfaultfd,
82
+ #endif
83
+ #ifdef __NR_perf_event_open
84
+ __NR_perf_event_open,
85
+ #endif
86
+ #ifdef __NR_unshare
87
+ __NR_unshare,
88
+ #endif
89
+ #ifdef __NR_setns
90
+ __NR_setns,
91
+ #endif
92
+ #ifdef __NR_keyctl
93
+ __NR_keyctl,
94
+ #endif
95
+ #ifdef __NR_request_key
96
+ __NR_request_key,
97
+ #endif
98
+ #ifdef __NR_add_key
99
+ __NR_add_key,
100
+ #endif
101
+ #ifdef __NR_process_vm_readv
102
+ __NR_process_vm_readv,
103
+ #endif
104
+ #ifdef __NR_process_vm_writev
105
+ __NR_process_vm_writev,
106
+ #endif
107
+ #ifdef __NR_personality
108
+ __NR_personality,
109
+ #endif
110
+ };
111
+
112
+ #define N (sizeof(BLOCKED)/sizeof(BLOCKED[0]))
113
+
114
+ static int apply_filter(void) {
115
+ /* BPF program: check arch, load nr, for each blocked: jeq->errno, default allow */
116
+ unsigned int len = 4 + N + 2;
117
+ struct sock_filter *f = calloc(len, sizeof(struct sock_filter));
118
+ if (!f) return -1;
119
+ unsigned int i = 0;
120
+ /* [0] load arch */
121
+ f[i++] = (struct sock_filter)BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, arch));
122
+ /* [1] check arch */
123
+ f[i++] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, AUDIT_ARCH_CURRENT, 1, 0);
124
+ /* [2] kill on wrong arch */
125
+ f[i++] = (struct sock_filter)BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL_PROCESS);
126
+ /* [3] load syscall nr */
127
+ f[i++] = (struct sock_filter)BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, nr));
128
+ /* [4..4+N-1] check each blocked: jt jumps to errno return at [4+N+1] */
129
+ for (unsigned int j = 0; j < N; j++) {
130
+ unsigned int jt = (unsigned int)(N - j); /* distance to errno instr */
131
+ f[i++] = (struct sock_filter)BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, (unsigned int)BLOCKED[j], jt, 0);
132
+ }
133
+ /* [4+N] allow */
134
+ f[i++] = (struct sock_filter)BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW);
135
+ /* [4+N+1] errno EPERM */
136
+ f[i++] = (struct sock_filter)BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ERRNO|(EPERM & SECCOMP_RET_DATA));
137
+
138
+ struct sock_fprog prog = { .len = (unsigned short)i, .filter = f };
139
+ int ret = (int)syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, 0, &prog);
140
+ free(f);
141
+ return ret;
142
+ }
143
+
144
+ int main(int argc, char *argv[]) {
145
+ if (argc < 3) {
146
+ fprintf(stderr, "Usage: seccomp-loader <profile.json> <command> [args...]\\n");
147
+ return 1;
148
+ }
149
+ if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {
150
+ perror("prctl(PR_SET_NO_NEW_PRIVS)");
151
+ return 1;
152
+ }
153
+ if (apply_filter() < 0) {
154
+ fprintf(stderr, "seccomp-loader: BPF filter failed (errno=%d); continuing with no-new-privs only\\n", errno);
155
+ }
156
+ execvp(argv[2], &argv[2]);
157
+ perror("execvp");
158
+ return 1;
159
+ }
160
+ `;
161
+ let loaderBinaryPath = null;
162
+ function getLoaderDir() {
163
+ return path.join(os.tmpdir(), "cloison-runtime-seccomp");
164
+ }
165
+ function compileLoader() {
166
+ const dir = getLoaderDir();
167
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
168
+ const binaryPath = path.join(dir, "seccomp-loader");
169
+ const sourcePath = path.join(dir, "seccomp-loader.c");
170
+ if (fs.existsSync(binaryPath)) {
171
+ try {
172
+ const stat = fs.statSync(binaryPath);
173
+ if (stat.isFile() && (stat.mode & 0o100)) {
174
+ return binaryPath;
175
+ }
176
+ }
177
+ catch {
178
+ // recompile
179
+ }
180
+ }
181
+ fs.writeFileSync(sourcePath, SECCOMP_LOADER_SOURCE, { mode: 0o600 });
182
+ try {
183
+ execSync(`cc -o ${binaryPath} ${sourcePath} -static 2>/dev/null || cc -o ${binaryPath} ${sourcePath}`, {
184
+ timeout: 30_000,
185
+ stdio: "pipe",
186
+ });
187
+ fs.chmodSync(binaryPath, 0o700);
188
+ log.info("seccomp-loader compiled successfully (BPF filter enabled)");
189
+ return binaryPath;
190
+ }
191
+ catch (err) {
192
+ log.warn("failed to compile seccomp-loader (cc not available?)", {
193
+ error: String(err),
194
+ });
195
+ try {
196
+ fs.unlinkSync(sourcePath);
197
+ }
198
+ catch {
199
+ // best effort
200
+ }
201
+ return null;
202
+ }
203
+ }
204
+ export function ensureSeccompLoader() {
205
+ if (loaderBinaryPath && fs.existsSync(loaderBinaryPath)) {
206
+ return loaderBinaryPath;
207
+ }
208
+ loaderBinaryPath = compileLoader();
209
+ return loaderBinaryPath;
210
+ }
211
+ export function buildSeccompWrapperArgs(profile, sandboxId, command, args) {
212
+ const loader = ensureSeccompLoader();
213
+ if (!loader)
214
+ return null;
215
+ const profilePath = writeSeccompProfile(profile, sandboxId);
216
+ return {
217
+ command: loader,
218
+ args: [profilePath, command, ...args],
219
+ profilePath,
220
+ };
221
+ }
222
+ export function isSeccompAvailable() {
223
+ if (process.platform !== "linux")
224
+ return false;
225
+ return ensureSeccompLoader() !== null;
226
+ }
227
+ //# sourceMappingURL=seccomp-apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seccomp-apply.js","sourceRoot":"","sources":["../../src/sandbox/seccomp-apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AAExE,MAAM,GAAG,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAEnD,sEAAsE;AACtE,qEAAqE;AACrE,0EAA0E;AAC1E,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJ7B,CAAC;AAEF,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAEtD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,UAAU,IAAI,UAAU,iCAAiC,UAAU,IAAI,UAAU,EAAE,EAAE;YACrG,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,sDAAsD,EAAE;YAC/D,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;SACnB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,gBAAgB,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,gBAAgB,GAAG,aAAa,EAAE,CAAC;IACnC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAuB,EACvB,SAAiB,EACjB,OAAe,EACf,IAAc;IAEd,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACrC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,mBAAmB,EAAE,KAAK,IAAI,CAAC;AACxC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface SeccompProfile {
2
+ defaultAction: "SCMP_ACT_ALLOW" | "SCMP_ACT_ERRNO" | "SCMP_ACT_KILL";
3
+ syscalls: SeccompRule[];
4
+ }
5
+ export interface SeccompRule {
6
+ names: string[];
7
+ action: "SCMP_ACT_ALLOW" | "SCMP_ACT_ERRNO" | "SCMP_ACT_KILL";
8
+ }
9
+ export declare function buildDefaultProfile(): SeccompProfile;
10
+ export declare function buildRestrictedProfile(additionalAllowed?: string[]): SeccompProfile;
11
+ export declare function writeSeccompProfile(profile: SeccompProfile, sandboxId: string): string;
12
+ export declare function cleanupSeccompProfile(profilePath: string): void;
13
+ //# sourceMappingURL=seccomp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seccomp.d.ts","sourceRoot":"","sources":["../../src/sandbox/seccomp.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACrE,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,eAAe,CAAC;CAC/D;AA8ED,wBAAgB,mBAAmB,IAAI,cAAc,CAcpD;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC3B,cAAc,CAWhB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM/D"}