@aalis/plugin-tool-code-runner 0.10.1 → 0.11.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/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -46
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +11 -7
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +22 -11
- package/dist/runner.js.map +1 -1
- package/package.json +8 -8
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
2
2
|
tools: import("@aalis/core").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
|
|
3
|
-
storage: import("@aalis/core").ServiceDescriptor<import("@aalis/api-storage").StorageService, import("@aalis/
|
|
4
|
-
proc: import("@aalis/core").ServiceDescriptor<import("@aalis/api-process").ProcessService, import("@aalis/
|
|
5
|
-
codeSandbox: import("@aalis/core").OptionalUse<import("@aalis/api-code-sandbox").CodeSandboxService, import("@aalis/
|
|
3
|
+
storage: import("@aalis/core").ServiceDescriptor<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
|
|
4
|
+
proc: import("@aalis/core").ServiceDescriptor<import("@aalis/api-process").ProcessService, import("@aalis/api-process").ProcessService>;
|
|
5
|
+
codeSandbox: import("@aalis/core").OptionalUse<import("@aalis/api-code-sandbox").CodeSandboxService, import("@aalis/api-code-sandbox").CodeSandboxService>;
|
|
6
6
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
7
7
|
config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
|
|
8
8
|
}>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;AAmIA,wBAmJG"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { codeSandbox } from '@aalis/api-code-sandbox';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { processService } from '@aalis/api-process';
|
|
3
|
+
import { resolveAgainstCwd, storage } from '@aalis/api-storage';
|
|
4
4
|
import { tools, withToolGroups } from '@aalis/api-tools';
|
|
5
5
|
import { config, definePlugin, logger, optional } from '@aalis/core';
|
|
6
6
|
import { defineConfig, parseConfig } from '@aalis/schema-config';
|
|
@@ -34,18 +34,6 @@ const configSchema = defineConfig({
|
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
},
|
|
37
|
-
defaultTimeout: {
|
|
38
|
-
type: 'number',
|
|
39
|
-
label: '默认超时 (ms)',
|
|
40
|
-
default: 60000,
|
|
41
|
-
description: '脚本执行默认超时时间',
|
|
42
|
-
},
|
|
43
|
-
maxTimeout: {
|
|
44
|
-
type: 'number',
|
|
45
|
-
label: '最大超时 (ms)',
|
|
46
|
-
default: 300000,
|
|
47
|
-
description: '允许指定的最大超时时间',
|
|
48
|
-
},
|
|
49
37
|
maxOutputSize: {
|
|
50
38
|
type: 'number',
|
|
51
39
|
label: '最大输出字节',
|
|
@@ -113,20 +101,17 @@ const uses = {
|
|
|
113
101
|
config,
|
|
114
102
|
};
|
|
115
103
|
async function createRunnerConfig(caps, cfg) {
|
|
116
|
-
if (!caps.storage.
|
|
117
|
-
throw new Error('
|
|
118
|
-
|
|
119
|
-
const gateway = createStorageGateway(caps.storage);
|
|
104
|
+
if (!caps.storage.present)
|
|
105
|
+
throw new Error('代码执行器需要 storage 服务');
|
|
106
|
+
const gateway = caps.storage.use;
|
|
120
107
|
const cwdUri = toRunnerCwdUri(cfg.workingDirectory);
|
|
121
108
|
return {
|
|
122
|
-
defaultTimeout: cfg.defaultTimeout,
|
|
123
|
-
maxTimeout: cfg.maxTimeout,
|
|
124
109
|
maxOutputSize: cfg.maxOutputSize,
|
|
125
110
|
cwd: await gateway.resolveLocalPath(cwdUri, 'read'),
|
|
126
111
|
env: safeEnv(),
|
|
127
112
|
// mode='none' → 不带 sandbox(裸跑);mode='auto' → 带策略,runCode 经 code-sandbox 强制隔离或 fail-closed
|
|
128
113
|
sandbox: cfg.sandbox.mode === 'none' ? undefined : { network: cfg.sandbox.network },
|
|
129
|
-
codeSandbox: caps.codeSandbox.
|
|
114
|
+
codeSandbox: caps.codeSandbox.present ? caps.codeSandbox.use : undefined,
|
|
130
115
|
};
|
|
131
116
|
}
|
|
132
117
|
export default definePlugin({
|
|
@@ -137,19 +122,17 @@ export default definePlugin({
|
|
|
137
122
|
uses,
|
|
138
123
|
apply(caps) {
|
|
139
124
|
const { tools, proc, storage, codeSandbox, logger } = caps;
|
|
140
|
-
const cfg = parseConfig(configSchema, caps.config, logger);
|
|
125
|
+
const cfg = parseConfig(configSchema, caps.config.use, logger.use);
|
|
141
126
|
if (cfg.sandbox.mode === 'none') {
|
|
142
|
-
logger.warn('⚠️ code-runner 运行在【无隔离】模式(sandbox.mode=none):代码以宿主用户全权限裸跑,仅在完全可信环境使用。');
|
|
127
|
+
logger.use.warn('⚠️ code-runner 运行在【无隔离】模式(sandbox.mode=none):代码以宿主用户全权限裸跑,仅在完全可信环境使用。');
|
|
143
128
|
}
|
|
144
129
|
const cwdUri = toRunnerCwdUri(cfg.workingDirectory);
|
|
145
|
-
const processGateway = createProcessGateway(proc);
|
|
146
|
-
const storageGateway = createStorageGateway(storage);
|
|
147
130
|
// 每次调用现取:cwd 要按当时的 storage 实况解析,沙箱后端也可能中途上下线
|
|
148
131
|
const runnerDeps = { storage, codeSandbox };
|
|
149
132
|
// 创建带分组标记的工具视图
|
|
150
|
-
const groupTools = withToolGroups(tools, ['code-runner']);
|
|
133
|
+
const groupTools = withToolGroups(tools.use, ['code-runner']);
|
|
151
134
|
// 注册工具分组
|
|
152
|
-
tools.registerGroup({
|
|
135
|
+
tools.use.registerGroup({
|
|
153
136
|
name: 'code-runner',
|
|
154
137
|
label: '代码执行',
|
|
155
138
|
description: '编写并运行 Python / JavaScript 代码来解决计算、分析、文件处理等问题',
|
|
@@ -184,10 +167,6 @@ export default definePlugin({
|
|
|
184
167
|
type: 'string',
|
|
185
168
|
description: '完整的 Python 脚本源代码',
|
|
186
169
|
},
|
|
187
|
-
timeout: {
|
|
188
|
-
type: 'number',
|
|
189
|
-
description: `超时毫秒数(可选,默认 ${cfg.defaultTimeout},最大 ${cfg.maxTimeout})`,
|
|
190
|
-
},
|
|
191
170
|
},
|
|
192
171
|
required: ['code'],
|
|
193
172
|
additionalProperties: false,
|
|
@@ -195,16 +174,16 @@ export default definePlugin({
|
|
|
195
174
|
},
|
|
196
175
|
},
|
|
197
176
|
visibility: 'restricted',
|
|
198
|
-
|
|
177
|
+
background: {},
|
|
178
|
+
handler: async (args, callCtx) => {
|
|
199
179
|
const code = args.code;
|
|
200
|
-
|
|
201
|
-
logger.debug(`run_python: ${code.length} 字符`);
|
|
180
|
+
logger.use.debug(`run_python: ${code.length} 字符`);
|
|
202
181
|
const runnerConfig = await createRunnerConfig(runnerDeps, cfg);
|
|
203
|
-
const result = await runCode(
|
|
182
|
+
const result = await runCode(proc.use, storage.use, cfg.python.interpreter, code, '.py', runnerConfig, [], callCtx.signal);
|
|
204
183
|
return JSON.stringify(result);
|
|
205
184
|
},
|
|
206
185
|
});
|
|
207
|
-
logger.info(`Python 代码执行工具已启用 (解释器: ${cfg.python.interpreter})`);
|
|
186
|
+
logger.use.info(`Python 代码执行工具已启用 (解释器: ${cfg.python.interpreter})`);
|
|
208
187
|
}
|
|
209
188
|
// ==================== run_javascript ====================
|
|
210
189
|
if (cfg.javascript.enabled) {
|
|
@@ -232,10 +211,6 @@ export default definePlugin({
|
|
|
232
211
|
type: 'string',
|
|
233
212
|
description: '完整的 JavaScript (Node.js ESM) 脚本源代码',
|
|
234
213
|
},
|
|
235
|
-
timeout: {
|
|
236
|
-
type: 'number',
|
|
237
|
-
description: `超时毫秒数(可选,默认 ${cfg.defaultTimeout},最大 ${cfg.maxTimeout})`,
|
|
238
|
-
},
|
|
239
214
|
},
|
|
240
215
|
required: ['code'],
|
|
241
216
|
additionalProperties: false,
|
|
@@ -243,18 +218,18 @@ export default definePlugin({
|
|
|
243
218
|
},
|
|
244
219
|
},
|
|
245
220
|
visibility: 'restricted',
|
|
246
|
-
|
|
221
|
+
background: {},
|
|
222
|
+
handler: async (args, callCtx) => {
|
|
247
223
|
const code = args.code;
|
|
248
|
-
|
|
249
|
-
logger.debug(`run_javascript: ${code.length} 字符`);
|
|
224
|
+
logger.use.debug(`run_javascript: ${code.length} 字符`);
|
|
250
225
|
const runnerConfig = await createRunnerConfig(runnerDeps, cfg);
|
|
251
|
-
const result = await runCode(
|
|
226
|
+
const result = await runCode(proc.use, storage.use, cfg.javascript.interpreter, code, '.mjs', runnerConfig, [], callCtx.signal);
|
|
252
227
|
return JSON.stringify(result);
|
|
253
228
|
},
|
|
254
229
|
});
|
|
255
|
-
logger.info(`JavaScript 代码执行工具已启用 (解释器: ${cfg.javascript.interpreter})`);
|
|
230
|
+
logger.use.info(`JavaScript 代码执行工具已启用 (解释器: ${cfg.javascript.interpreter})`);
|
|
256
231
|
}
|
|
257
|
-
logger.info(`代码执行器插件已启动 (工作目录: ${cwdUri})`);
|
|
232
|
+
logger.use.info(`代码执行器插件已启动 (工作目录: ${cwdUri})`);
|
|
258
233
|
},
|
|
259
234
|
});
|
|
260
235
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -8,8 +8,6 @@ import type { CodeSandboxService } from '@aalis/api-code-sandbox';
|
|
|
8
8
|
import type { ProcessService } from '@aalis/api-process';
|
|
9
9
|
import type { StorageService } from '@aalis/api-storage';
|
|
10
10
|
export interface RunnerConfig {
|
|
11
|
-
defaultTimeout: number;
|
|
12
|
-
maxTimeout: number;
|
|
13
11
|
maxOutputSize: number;
|
|
14
12
|
/** 子进程 cwd(已通过 storage.resolveLocalPath 解析的本地路径) */
|
|
15
13
|
cwd: string;
|
|
@@ -30,20 +28,26 @@ export interface RunResult {
|
|
|
30
28
|
exitCode: number;
|
|
31
29
|
stdout: string;
|
|
32
30
|
stderr: string;
|
|
33
|
-
|
|
31
|
+
/** 脚本没能运行(沙箱不可用、起进程失败),或没被中止而以非零退出(「退出码 N」)、被信号结束:带 error 的工具结果判为失败 */
|
|
34
32
|
error?: string;
|
|
33
|
+
/** 调用被中止且脚本是被信号结束的 */
|
|
34
|
+
aborted?: true;
|
|
35
|
+
/** 随 aborted 给出的文字说明(与 exec 的「命令已中止」同一口径) */
|
|
36
|
+
message?: string;
|
|
37
|
+
/** 调用已中止、但脚本不是被信号结束的(中止前已正常退出等):按实际退出回报并加此注 */
|
|
38
|
+
note?: string;
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
|
-
*
|
|
41
|
+
* 执行代码脚本。不另设超时:等多久由执行器的让出时限管,停只认 signal
|
|
38
42
|
*
|
|
39
43
|
* @param proc ProcessService 句柄
|
|
40
44
|
* @param storage StorageService(用于写脚本到 tmp)
|
|
41
45
|
* @param interpreter 解释器路径 (python3 / node)
|
|
42
46
|
* @param code 完整源代码
|
|
43
47
|
* @param ext 临时文件扩展名 (.py / .mjs)
|
|
44
|
-
* @param config
|
|
45
|
-
* @param timeout 可选自定义超时
|
|
48
|
+
* @param config 输出限制、工作目录与沙箱
|
|
46
49
|
* @param extraArgs 额外的解释器参数
|
|
50
|
+
* @param signal 执行器给这次调用的中止信号:中止时经 process 服务(或 code-sandbox)按进程组停掉脚本
|
|
47
51
|
*/
|
|
48
|
-
export declare function runCode(proc: ProcessService, storage: StorageService, interpreter: string, code: string, ext: string, config: RunnerConfig,
|
|
52
|
+
export declare function runCode(proc: ProcessService, storage: StorageService, interpreter: string, code: string, ext: string, config: RunnerConfig, extraArgs?: string[], signal?: AbortSignal): Promise<RunResult>;
|
|
49
53
|
//# sourceMappingURL=runner.d.ts.map
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ;mEAC+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACxC,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,SAAS,GAAE,MAAM,EAAO,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAgFpB"}
|
package/dist/runner.js
CHANGED
|
@@ -12,19 +12,18 @@ function truncateOutput(output, maxSize) {
|
|
|
12
12
|
return `${truncated}\n...[输出截断,超过 ${maxSize} 字节]`;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 执行代码脚本。不另设超时:等多久由执行器的让出时限管,停只认 signal
|
|
16
16
|
*
|
|
17
17
|
* @param proc ProcessService 句柄
|
|
18
18
|
* @param storage StorageService(用于写脚本到 tmp)
|
|
19
19
|
* @param interpreter 解释器路径 (python3 / node)
|
|
20
20
|
* @param code 完整源代码
|
|
21
21
|
* @param ext 临时文件扩展名 (.py / .mjs)
|
|
22
|
-
* @param config
|
|
23
|
-
* @param timeout 可选自定义超时
|
|
22
|
+
* @param config 输出限制、工作目录与沙箱
|
|
24
23
|
* @param extraArgs 额外的解释器参数
|
|
24
|
+
* @param signal 执行器给这次调用的中止信号:中止时经 process 服务(或 code-sandbox)按进程组停掉脚本
|
|
25
25
|
*/
|
|
26
|
-
export async function runCode(proc, storage, interpreter, code, ext, config,
|
|
27
|
-
const effectiveTimeout = Math.min(Math.max(1000, timeout ?? config.defaultTimeout), config.maxTimeout);
|
|
26
|
+
export async function runCode(proc, storage, interpreter, code, ext, config, extraArgs = [], signal) {
|
|
28
27
|
const tmp = await proc.makeTempDir('code-runner');
|
|
29
28
|
try {
|
|
30
29
|
const scriptUri = `${tmp.uri}/script${ext}`;
|
|
@@ -54,32 +53,44 @@ export async function runCode(proc, storage, interpreter, code, ext, config, tim
|
|
|
54
53
|
args: [...extraArgs, scriptPath],
|
|
55
54
|
cwd: config.cwd,
|
|
56
55
|
env,
|
|
57
|
-
|
|
56
|
+
signal,
|
|
58
57
|
policy,
|
|
59
58
|
})
|
|
60
59
|
: await proc.execFile(interpreter, [...extraArgs, scriptPath], {
|
|
61
60
|
cwd: config.cwd,
|
|
62
61
|
env,
|
|
63
|
-
|
|
62
|
+
signal,
|
|
64
63
|
});
|
|
65
|
-
|
|
64
|
+
const output = {
|
|
66
65
|
exitCode: result.code ?? -1,
|
|
67
66
|
stdout: truncateOutput(result.stdout, config.maxOutputSize),
|
|
68
67
|
stderr: truncateOutput(result.stderr, config.maxOutputSize),
|
|
69
68
|
};
|
|
69
|
+
// 退出码 0 不是被信号结束的:调用已中止也按实际退出回报,只注明
|
|
70
|
+
return signal?.aborted ? { ...output, note: '调用已中止' } : output;
|
|
70
71
|
}
|
|
71
72
|
catch (err) {
|
|
72
73
|
// ProcessService.execFile 在非 0 退出时抛错,但会把 .result 挂上
|
|
73
74
|
const e = err;
|
|
74
75
|
if (e.result) {
|
|
75
|
-
const
|
|
76
|
-
return {
|
|
76
|
+
const output = {
|
|
77
77
|
exitCode: e.result.code ?? -1,
|
|
78
78
|
stdout: truncateOutput(e.result.stdout, config.maxOutputSize),
|
|
79
79
|
stderr: truncateOutput(e.result.stderr, config.maxOutputSize),
|
|
80
|
-
...(timedOut ? { timedOut: true } : {}),
|
|
81
80
|
};
|
|
81
|
+
if (signal?.aborted) {
|
|
82
|
+
// 被信号结束的才说被中止(中止宽限到点的 SIGKILL 也算);中止前已退出或 Windows 下强制结束
|
|
83
|
+
// (signal 可能为 null)的按实际退出回报,免得下一轮把已经生效的脚本再跑一遍
|
|
84
|
+
if (e.result.signal !== null)
|
|
85
|
+
return { ...output, aborted: true, message: '代码已中止' };
|
|
86
|
+
return { ...output, note: '调用已中止' };
|
|
87
|
+
}
|
|
88
|
+
const ended = e.result.signal !== null ? `被信号 ${e.result.signal} 结束` : `退出码 ${output.exitCode}`;
|
|
89
|
+
return { ...output, error: ended };
|
|
82
90
|
}
|
|
91
|
+
// 没有退出结果:spawn 失败,或已中止时 spawn 同步抛出(不起进程)
|
|
92
|
+
if (signal?.aborted)
|
|
93
|
+
return { exitCode: -1, stdout: '', stderr: '', aborted: true, message: '代码已中止' };
|
|
83
94
|
return {
|
|
84
95
|
exitCode: -1,
|
|
85
96
|
stdout: '',
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/plugin-tool-code-runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,19 +24,19 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aalis/api-code-sandbox": ">=0.
|
|
28
|
-
"@aalis/schema-config": ">=0.
|
|
29
|
-
"@aalis/api-process": ">=0.
|
|
30
|
-
"@aalis/api-storage": ">=0.
|
|
31
|
-
"@aalis/api-tools": ">=0.
|
|
27
|
+
"@aalis/api-code-sandbox": ">=0.7.0 <1.0.0",
|
|
28
|
+
"@aalis/schema-config": ">=0.15.0 <1.0.0",
|
|
29
|
+
"@aalis/api-process": ">=0.9.0 <1.0.0",
|
|
30
|
+
"@aalis/api-storage": ">=0.8.0 <1.0.0",
|
|
31
|
+
"@aalis/api-tools": ">=0.11.0 <1.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "^22.0.0",
|
|
35
35
|
"typescript": "^5.7.0",
|
|
36
|
-
"@aalis/core": "0.
|
|
36
|
+
"@aalis/core": "0.20.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@aalis/core": ">=0.
|
|
39
|
+
"@aalis/core": ">=0.20.0 <1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"aalis": {
|
|
42
42
|
"service": {
|