@nahisaho/katashiro-sandbox 0.4.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.
- package/README.md +213 -0
- package/dist/docker-executor.d.ts +117 -0
- package/dist/docker-executor.d.ts.map +1 -0
- package/dist/docker-executor.js +557 -0
- package/dist/docker-executor.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/local-executor.d.ts +64 -0
- package/dist/local-executor.d.ts.map +1 -0
- package/dist/local-executor.js +242 -0
- package/dist/local-executor.js.map +1 -0
- package/dist/sandbox.d.ts +104 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +128 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/types.d.ts +228 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +51 -0
- package/dist/types.js.map +1 -0
- package/package.json +55 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KATASHIRO Sandbox - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview REQ-007: コード実行サンドボックスの型定義
|
|
5
|
+
* @module @nahisaho/katashiro-sandbox
|
|
6
|
+
* @since 0.4.0
|
|
7
|
+
*/
|
|
8
|
+
import type { ID, Timestamp } from '@nahisaho/katashiro-core';
|
|
9
|
+
/**
|
|
10
|
+
* サンドボックスランタイム
|
|
11
|
+
*/
|
|
12
|
+
export type SandboxRuntime = 'docker' | 'local' | 'wasm';
|
|
13
|
+
/**
|
|
14
|
+
* サポートされるプログラミング言語
|
|
15
|
+
*/
|
|
16
|
+
export type SupportedLanguage = 'bash' | 'python' | 'javascript' | 'typescript';
|
|
17
|
+
/**
|
|
18
|
+
* 実行状態
|
|
19
|
+
*/
|
|
20
|
+
export type ExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'timeout' | 'cancelled';
|
|
21
|
+
/**
|
|
22
|
+
* サンドボックス設定
|
|
23
|
+
* EARS: The Sandbox shall execute code in an isolated Docker/VM environment
|
|
24
|
+
*/
|
|
25
|
+
export interface SandboxConfig {
|
|
26
|
+
/** ランタイム種別 */
|
|
27
|
+
readonly runtime: SandboxRuntime;
|
|
28
|
+
/** タイムアウト(秒) */
|
|
29
|
+
readonly timeout: number;
|
|
30
|
+
/** メモリ制限(バイト) */
|
|
31
|
+
readonly memoryLimit: number;
|
|
32
|
+
/** CPU制限(0.0-1.0 = 100%) */
|
|
33
|
+
readonly cpuLimit: number;
|
|
34
|
+
/** 作業ディレクトリ */
|
|
35
|
+
readonly workingDir: string;
|
|
36
|
+
/** ネットワークアクセス許可 */
|
|
37
|
+
readonly networkEnabled: boolean;
|
|
38
|
+
/** 一時ファイルシステムサイズ(バイト) */
|
|
39
|
+
readonly tmpfsSize: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* デフォルトサンドボックス設定
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_SANDBOX_CONFIG: SandboxConfig;
|
|
45
|
+
/**
|
|
46
|
+
* Docker固有の設定
|
|
47
|
+
*/
|
|
48
|
+
export interface DockerConfig {
|
|
49
|
+
/** Dockerデーモンソケットパス */
|
|
50
|
+
readonly socketPath?: string;
|
|
51
|
+
/** Dockerホスト(TCP接続時) */
|
|
52
|
+
readonly host?: string;
|
|
53
|
+
/** 使用するイメージ(言語別) */
|
|
54
|
+
readonly images: Record<SupportedLanguage, string>;
|
|
55
|
+
/** コンテナ自動削除 */
|
|
56
|
+
readonly autoRemove: boolean;
|
|
57
|
+
/** コンテナ名プレフィックス */
|
|
58
|
+
readonly containerPrefix: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* デフォルトDockerイメージ
|
|
62
|
+
*/
|
|
63
|
+
export declare const DEFAULT_DOCKER_IMAGES: Record<SupportedLanguage, string>;
|
|
64
|
+
/**
|
|
65
|
+
* デフォルトDocker設定
|
|
66
|
+
*/
|
|
67
|
+
export declare const DEFAULT_DOCKER_CONFIG: DockerConfig;
|
|
68
|
+
/**
|
|
69
|
+
* コード実行リクエスト
|
|
70
|
+
*/
|
|
71
|
+
export interface ExecutionRequest {
|
|
72
|
+
/** リクエストID */
|
|
73
|
+
readonly id: ID;
|
|
74
|
+
/** 実行するコード */
|
|
75
|
+
readonly code: string;
|
|
76
|
+
/** 言語 */
|
|
77
|
+
readonly language: SupportedLanguage;
|
|
78
|
+
/** 入力データ(stdin) */
|
|
79
|
+
readonly stdin?: string;
|
|
80
|
+
/** 環境変数 */
|
|
81
|
+
readonly env?: Record<string, string>;
|
|
82
|
+
/** タイムアウト上書き(秒) */
|
|
83
|
+
readonly timeout?: number;
|
|
84
|
+
/** リクエスト日時 */
|
|
85
|
+
readonly createdAt: Timestamp;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* ファイル出力
|
|
89
|
+
*/
|
|
90
|
+
export interface FileOutput {
|
|
91
|
+
/** ファイルパス(コンテナ内) */
|
|
92
|
+
readonly path: string;
|
|
93
|
+
/** ファイル内容 */
|
|
94
|
+
readonly content: string | Buffer;
|
|
95
|
+
/** ファイルサイズ(バイト) */
|
|
96
|
+
readonly size: number;
|
|
97
|
+
/** MIMEタイプ */
|
|
98
|
+
readonly mimeType?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 実行結果
|
|
102
|
+
* EARS: The Sandbox shall provide a temporary file system for code execution
|
|
103
|
+
*/
|
|
104
|
+
export interface ExecutionResult {
|
|
105
|
+
/** リクエストID */
|
|
106
|
+
readonly requestId: ID;
|
|
107
|
+
/** 実行ステータス */
|
|
108
|
+
readonly status: ExecutionStatus;
|
|
109
|
+
/** 終了コード */
|
|
110
|
+
readonly exitCode: number;
|
|
111
|
+
/** 標準出力 */
|
|
112
|
+
readonly stdout: string;
|
|
113
|
+
/** 標準エラー出力 */
|
|
114
|
+
readonly stderr: string;
|
|
115
|
+
/** 実行時間(ミリ秒) */
|
|
116
|
+
readonly duration: number;
|
|
117
|
+
/** 出力ファイル */
|
|
118
|
+
readonly files: readonly FileOutput[];
|
|
119
|
+
/** メモリ使用量(バイト) */
|
|
120
|
+
readonly memoryUsed?: number;
|
|
121
|
+
/** CPU使用時間(ミリ秒) */
|
|
122
|
+
readonly cpuTime?: number;
|
|
123
|
+
/** エラー詳細(失敗時) */
|
|
124
|
+
readonly error?: ExecutionError;
|
|
125
|
+
/** 完了日時 */
|
|
126
|
+
readonly completedAt: Timestamp;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 実行エラー
|
|
130
|
+
*/
|
|
131
|
+
export interface ExecutionError {
|
|
132
|
+
/** エラーコード */
|
|
133
|
+
readonly code: string;
|
|
134
|
+
/** エラーメッセージ */
|
|
135
|
+
readonly message: string;
|
|
136
|
+
/** 行番号(コンパイルエラー時) */
|
|
137
|
+
readonly line?: number;
|
|
138
|
+
/** 列番号(コンパイルエラー時) */
|
|
139
|
+
readonly column?: number;
|
|
140
|
+
/** スタックトレース */
|
|
141
|
+
readonly stack?: string;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* セキュリティポリシー
|
|
145
|
+
* EARS: If code attempts to access the host system, then the Sandbox shall block the access
|
|
146
|
+
*/
|
|
147
|
+
export interface SecurityPolicy {
|
|
148
|
+
/** 許可するシステムコール */
|
|
149
|
+
readonly allowedSyscalls?: readonly string[];
|
|
150
|
+
/** ブロックするシステムコール */
|
|
151
|
+
readonly blockedSyscalls?: readonly string[];
|
|
152
|
+
/** 許可するネットワークポート */
|
|
153
|
+
readonly allowedPorts?: readonly number[];
|
|
154
|
+
/** 読み取り専用パス */
|
|
155
|
+
readonly readOnlyPaths?: readonly string[];
|
|
156
|
+
/** 書き込み可能パス */
|
|
157
|
+
readonly writablePaths?: readonly string[];
|
|
158
|
+
/** 最大プロセス数 */
|
|
159
|
+
readonly maxProcesses: number;
|
|
160
|
+
/** 最大ファイルディスクリプタ数 */
|
|
161
|
+
readonly maxOpenFiles: number;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* デフォルトセキュリティポリシー
|
|
165
|
+
*/
|
|
166
|
+
export declare const DEFAULT_SECURITY_POLICY: SecurityPolicy;
|
|
167
|
+
/**
|
|
168
|
+
* サンドボックスイベントタイプ
|
|
169
|
+
*/
|
|
170
|
+
export type SandboxEventType = 'execution:start' | 'execution:output' | 'execution:complete' | 'execution:error' | 'execution:timeout' | 'container:create' | 'container:start' | 'container:stop' | 'security:violation';
|
|
171
|
+
/**
|
|
172
|
+
* サンドボックスイベント
|
|
173
|
+
*/
|
|
174
|
+
export interface SandboxEvent {
|
|
175
|
+
/** イベントタイプ */
|
|
176
|
+
readonly type: SandboxEventType;
|
|
177
|
+
/** リクエストID */
|
|
178
|
+
readonly requestId?: ID;
|
|
179
|
+
/** コンテナID */
|
|
180
|
+
readonly containerId?: string;
|
|
181
|
+
/** イベントデータ */
|
|
182
|
+
readonly data?: unknown;
|
|
183
|
+
/** タイムスタンプ */
|
|
184
|
+
readonly timestamp: Timestamp;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* サンドボックスイベントリスナー
|
|
188
|
+
*/
|
|
189
|
+
export type SandboxEventListener = (event: SandboxEvent) => void;
|
|
190
|
+
/**
|
|
191
|
+
* コンテナ情報
|
|
192
|
+
*/
|
|
193
|
+
export interface ContainerInfo {
|
|
194
|
+
/** コンテナID */
|
|
195
|
+
readonly id: string;
|
|
196
|
+
/** コンテナ名 */
|
|
197
|
+
readonly name: string;
|
|
198
|
+
/** イメージ */
|
|
199
|
+
readonly image: string;
|
|
200
|
+
/** 状態 */
|
|
201
|
+
readonly status: 'created' | 'running' | 'paused' | 'exited' | 'dead';
|
|
202
|
+
/** 作成日時 */
|
|
203
|
+
readonly createdAt: Timestamp;
|
|
204
|
+
/** 開始日時 */
|
|
205
|
+
readonly startedAt?: Timestamp;
|
|
206
|
+
/** 終了日時 */
|
|
207
|
+
readonly finishedAt?: Timestamp;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* リソース使用量統計
|
|
211
|
+
*/
|
|
212
|
+
export interface ResourceStats {
|
|
213
|
+
/** メモリ使用量(バイト) */
|
|
214
|
+
readonly memoryUsage: number;
|
|
215
|
+
/** メモリ上限(バイト) */
|
|
216
|
+
readonly memoryLimit: number;
|
|
217
|
+
/** CPU使用率(0-100) */
|
|
218
|
+
readonly cpuPercent: number;
|
|
219
|
+
/** ネットワーク送信バイト */
|
|
220
|
+
readonly networkTx: number;
|
|
221
|
+
/** ネットワーク受信バイト */
|
|
222
|
+
readonly networkRx: number;
|
|
223
|
+
/** ディスクIO読み取りバイト */
|
|
224
|
+
readonly diskRead: number;
|
|
225
|
+
/** ディスクIO書き込みバイト */
|
|
226
|
+
readonly diskWrite: number;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* KATASHIRO Sandbox - Type Definitions
|
|
4
|
+
*
|
|
5
|
+
* @fileoverview REQ-007: コード実行サンドボックスの型定義
|
|
6
|
+
* @module @nahisaho/katashiro-sandbox
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DEFAULT_SECURITY_POLICY = exports.DEFAULT_DOCKER_CONFIG = exports.DEFAULT_DOCKER_IMAGES = exports.DEFAULT_SANDBOX_CONFIG = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* デフォルトサンドボックス設定
|
|
13
|
+
*/
|
|
14
|
+
exports.DEFAULT_SANDBOX_CONFIG = {
|
|
15
|
+
runtime: 'docker',
|
|
16
|
+
timeout: 30,
|
|
17
|
+
memoryLimit: 512 * 1024 * 1024, // 512MB
|
|
18
|
+
cpuLimit: 0.5,
|
|
19
|
+
workingDir: '/workspace',
|
|
20
|
+
networkEnabled: false,
|
|
21
|
+
tmpfsSize: 64 * 1024 * 1024, // 64MB
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* デフォルトDockerイメージ
|
|
25
|
+
*/
|
|
26
|
+
exports.DEFAULT_DOCKER_IMAGES = {
|
|
27
|
+
bash: 'alpine:3.19',
|
|
28
|
+
python: 'python:3.12-slim',
|
|
29
|
+
javascript: 'node:22-slim',
|
|
30
|
+
typescript: 'node:22-slim',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* デフォルトDocker設定
|
|
34
|
+
*/
|
|
35
|
+
exports.DEFAULT_DOCKER_CONFIG = {
|
|
36
|
+
socketPath: '/var/run/docker.sock',
|
|
37
|
+
images: exports.DEFAULT_DOCKER_IMAGES,
|
|
38
|
+
autoRemove: true,
|
|
39
|
+
containerPrefix: 'katashiro-sandbox-',
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* デフォルトセキュリティポリシー
|
|
43
|
+
*/
|
|
44
|
+
exports.DEFAULT_SECURITY_POLICY = {
|
|
45
|
+
blockedSyscalls: ['ptrace', 'mount', 'umount', 'reboot', 'swapon', 'swapoff'],
|
|
46
|
+
readOnlyPaths: ['/etc', '/usr', '/bin', '/lib'],
|
|
47
|
+
writablePaths: ['/workspace', '/tmp'],
|
|
48
|
+
maxProcesses: 10,
|
|
49
|
+
maxOpenFiles: 100,
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAsDH;;GAEG;AACU,QAAA,sBAAsB,GAAkB;IACnD,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;IACxC,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,KAAK;IACrB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;CACrC,CAAC;AAsBF;;GAEG;AACU,QAAA,qBAAqB,GAAsC;IACtE,IAAI,EAAE,aAAa;IACnB,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,cAAc;CAC3B,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAiB;IACjD,UAAU,EAAE,sBAAsB;IAClC,MAAM,EAAE,6BAAqB;IAC7B,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,oBAAoB;CACtC,CAAC;AA8GF;;GAEG;AACU,QAAA,uBAAuB,GAAmB;IACrD,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;IAC7E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC/C,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;IACrC,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,GAAG;CAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nahisaho/katashiro-sandbox",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Code execution sandbox for KATASHIRO with Docker/VM isolation",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc -p tsconfig.json",
|
|
15
|
+
"clean": "rimraf dist",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest watch",
|
|
18
|
+
"lint": "eslint src --ext .ts",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"katashiro",
|
|
23
|
+
"sandbox",
|
|
24
|
+
"docker",
|
|
25
|
+
"code-execution",
|
|
26
|
+
"isolation"
|
|
27
|
+
],
|
|
28
|
+
"author": "nahisaho",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/nahisaho/katashiro.git",
|
|
33
|
+
"directory": "packages/sandbox"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"README.md"
|
|
38
|
+
],
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18.0.0"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@nahisaho/katashiro-core": "*",
|
|
44
|
+
"dockerode": "^4.0.2"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/dockerode": "^3.3.31",
|
|
48
|
+
"rimraf": "^5.0.5",
|
|
49
|
+
"typescript": "^5.3.3",
|
|
50
|
+
"vitest": "^1.6.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"@nahisaho/katashiro-core": ">=0.3.0"
|
|
54
|
+
}
|
|
55
|
+
}
|