aiden-runtime 4.1.5 → 4.6.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 +265 -847
- package/dist/api/server.js +32 -5
- package/dist/cli/v4/aidenCLI.js +536 -152
- package/dist/cli/v4/callbacks.js +170 -0
- package/dist/cli/v4/chatSession.js +245 -3
- package/dist/cli/v4/commands/_runtimeToggleHelpers.js +94 -0
- package/dist/cli/v4/commands/browserDepth.js +45 -0
- package/dist/cli/v4/commands/cron.js +264 -0
- package/dist/cli/v4/commands/daemon.js +541 -0
- package/dist/cli/v4/commands/daemonStatus.js +253 -0
- package/dist/cli/v4/commands/fanout.js +42 -59
- package/dist/cli/v4/commands/help.js +13 -0
- package/dist/cli/v4/commands/index.js +35 -1
- package/dist/cli/v4/commands/mcp.js +80 -54
- package/dist/cli/v4/commands/plannerGuard.js +53 -0
- package/dist/cli/v4/commands/recovery.js +122 -0
- package/dist/cli/v4/commands/runs.js +223 -0
- package/dist/cli/v4/commands/sandbox.js +48 -0
- package/dist/cli/v4/commands/spawnPause.js +93 -0
- package/dist/cli/v4/commands/suggestions.js +68 -0
- package/dist/cli/v4/commands/tce.js +41 -0
- package/dist/cli/v4/commands/trigger.js +378 -0
- package/dist/cli/v4/commands/update.js +95 -3
- package/dist/cli/v4/daemonAgentBuilder.js +145 -0
- package/dist/cli/v4/defaultSoul.js +1 -1
- package/dist/cli/v4/display/capabilityCard.js +26 -0
- package/dist/cli/v4/display.js +18 -8
- package/dist/cli/v4/replyRenderer.js +31 -23
- package/dist/cli/v4/updateBootPrompt.js +170 -0
- package/dist/core/playwrightBridge.js +129 -0
- package/dist/core/v4/aidenAgent.js +527 -5
- package/dist/core/v4/browserState.js +436 -0
- package/dist/core/v4/checkpoint.js +79 -0
- package/dist/core/v4/daemon/bootstrap.js +651 -0
- package/dist/core/v4/daemon/cleanShutdown.js +154 -0
- package/dist/core/v4/daemon/cron/cronBridge.js +126 -0
- package/dist/core/v4/daemon/cron/cronEmitter.js +173 -0
- package/dist/core/v4/daemon/cron/migration.js +199 -0
- package/dist/core/v4/daemon/cron/misfirePolicy.js +115 -0
- package/dist/core/v4/daemon/daemonConfig.js +90 -0
- package/dist/core/v4/daemon/db/connection.js +106 -0
- package/dist/core/v4/daemon/db/migrations.js +362 -0
- package/dist/core/v4/daemon/db/schema/v1.spec.js +18 -0
- package/dist/core/v4/daemon/dispatcher/agentRunner.js +98 -0
- package/dist/core/v4/daemon/dispatcher/budgetGate.js +127 -0
- package/dist/core/v4/daemon/dispatcher/daemonApproval.js +113 -0
- package/dist/core/v4/daemon/dispatcher/dailyBudgetTracker.js +120 -0
- package/dist/core/v4/daemon/dispatcher/dispatcher.js +389 -0
- package/dist/core/v4/daemon/dispatcher/fireRateLimiter.js +113 -0
- package/dist/core/v4/daemon/dispatcher/index.js +53 -0
- package/dist/core/v4/daemon/dispatcher/promptTemplate.js +95 -0
- package/dist/core/v4/daemon/dispatcher/realAgentRunner.js +356 -0
- package/dist/core/v4/daemon/dispatcher/resolveModel.js +93 -0
- package/dist/core/v4/daemon/dispatcher/sessionId.js +93 -0
- package/dist/core/v4/daemon/drain.js +156 -0
- package/dist/core/v4/daemon/eventLoopLag.js +73 -0
- package/dist/core/v4/daemon/health.js +159 -0
- package/dist/core/v4/daemon/idempotencyStore.js +204 -0
- package/dist/core/v4/daemon/index.js +179 -0
- package/dist/core/v4/daemon/instanceTracker.js +99 -0
- package/dist/core/v4/daemon/resourceRegistry.js +150 -0
- package/dist/core/v4/daemon/restartCode.js +32 -0
- package/dist/core/v4/daemon/restartFailureCounter.js +77 -0
- package/dist/core/v4/daemon/runStore.js +144 -0
- package/dist/core/v4/daemon/runtimeLock.js +167 -0
- package/dist/core/v4/daemon/signals.js +50 -0
- package/dist/core/v4/daemon/supervisor.js +272 -0
- package/dist/core/v4/daemon/triggerBus.js +279 -0
- package/dist/core/v4/daemon/triggers/email/allowlist.js +70 -0
- package/dist/core/v4/daemon/triggers/email/automatedSender.js +78 -0
- package/dist/core/v4/daemon/triggers/email/bodyExtractor.js +0 -0
- package/dist/core/v4/daemon/triggers/email/emailSeenStore.js +99 -0
- package/dist/core/v4/daemon/triggers/email/emailSpec.js +107 -0
- package/dist/core/v4/daemon/triggers/email/imapConnection.js +211 -0
- package/dist/core/v4/daemon/triggers/email/index.js +332 -0
- package/dist/core/v4/daemon/triggers/email/seenUids.js +60 -0
- package/dist/core/v4/daemon/triggers/fileObservationsStore.js +93 -0
- package/dist/core/v4/daemon/triggers/fileWatcher.js +253 -0
- package/dist/core/v4/daemon/triggers/fileWatcherSpec.js +88 -0
- package/dist/core/v4/daemon/triggers/fsIdentity.js +42 -0
- package/dist/core/v4/daemon/triggers/globMatcher.js +100 -0
- package/dist/core/v4/daemon/triggers/reconcile.js +206 -0
- package/dist/core/v4/daemon/triggers/settleStat.js +81 -0
- package/dist/core/v4/daemon/triggers/webhook.js +376 -0
- package/dist/core/v4/daemon/triggers/webhookDeliveriesStore.js +109 -0
- package/dist/core/v4/daemon/triggers/webhookIdempotency.js +72 -0
- package/dist/core/v4/daemon/triggers/webhookRateLimit.js +56 -0
- package/dist/core/v4/daemon/triggers/webhookSpec.js +76 -0
- package/dist/core/v4/daemon/triggers/webhookVerifier.js +128 -0
- package/dist/core/v4/daemon/types.js +15 -0
- package/dist/core/v4/dockerSession.js +461 -0
- package/dist/core/v4/dryRun.js +117 -0
- package/dist/core/v4/failureClassifier.js +779 -0
- package/dist/core/v4/providerFallback.js +35 -2
- package/dist/core/v4/recoveryReport.js +449 -0
- package/dist/core/v4/runtimeToggles.js +214 -0
- package/dist/core/v4/sandboxConfig.js +285 -0
- package/dist/core/v4/sandboxFs.js +316 -0
- package/dist/core/v4/selfimprovement/recoveryStore.js +307 -0
- package/dist/core/v4/selfimprovement/signatureBuilder.js +158 -0
- package/dist/core/v4/subagent/childBuilder.js +391 -0
- package/dist/core/v4/subagent/fanout.js +75 -51
- package/dist/core/v4/subagent/spawnPause.js +191 -0
- package/dist/core/v4/subagent/spawnSubAgent.js +310 -0
- package/dist/core/v4/suggestionCatalog.js +41 -0
- package/dist/core/v4/suggestionEngine.js +210 -0
- package/dist/core/v4/toolRegistry.js +37 -3
- package/dist/core/v4/turnState.js +587 -0
- package/dist/core/v4/update/checkUpdate.js +63 -3
- package/dist/core/v4/update/installMethodDetect.js +115 -0
- package/dist/core/v4/update/registryClient.js +121 -0
- package/dist/core/v4/update/skipState.js +75 -0
- package/dist/core/v4/verifier.js +448 -0
- package/dist/core/version.js +1 -1
- package/dist/moat/plannerGuard.js +29 -0
- package/dist/providers/v4/anthropicAdapter.js +31 -3
- package/dist/providers/v4/chatCompletionsAdapter.js +26 -3
- package/dist/providers/v4/codexResponsesAdapter.js +25 -2
- package/dist/providers/v4/ollamaPromptToolsAdapter.js +57 -2
- package/dist/tools/v4/browser/_observer.js +224 -0
- package/dist/tools/v4/browser/browserBlocker.js +396 -0
- package/dist/tools/v4/browser/browserClick.js +18 -1
- package/dist/tools/v4/browser/browserClose.js +18 -1
- package/dist/tools/v4/browser/browserExtract.js +5 -1
- package/dist/tools/v4/browser/browserFill.js +17 -1
- package/dist/tools/v4/browser/browserGetUrl.js +5 -1
- package/dist/tools/v4/browser/browserNavigate.js +16 -1
- package/dist/tools/v4/browser/browserScreenshot.js +5 -1
- package/dist/tools/v4/browser/browserScroll.js +18 -1
- package/dist/tools/v4/browser/browserType.js +17 -1
- package/dist/tools/v4/browser/captchaCheck.js +5 -1
- package/dist/tools/v4/executeCode.js +1 -0
- package/dist/tools/v4/files/fileCopy.js +56 -2
- package/dist/tools/v4/files/fileDelete.js +38 -1
- package/dist/tools/v4/files/fileList.js +12 -1
- package/dist/tools/v4/files/fileMove.js +59 -2
- package/dist/tools/v4/files/filePatch.js +43 -1
- package/dist/tools/v4/files/fileRead.js +12 -1
- package/dist/tools/v4/files/fileWrite.js +41 -1
- package/dist/tools/v4/index.js +88 -61
- package/dist/tools/v4/memory/memoryAdd.js +14 -0
- package/dist/tools/v4/memory/memoryRemove.js +14 -0
- package/dist/tools/v4/memory/memoryReplace.js +15 -0
- package/dist/tools/v4/memory/sessionSummary.js +12 -0
- package/dist/tools/v4/process/processKill.js +19 -0
- package/dist/tools/v4/process/processList.js +1 -0
- package/dist/tools/v4/process/processLogRead.js +1 -0
- package/dist/tools/v4/process/processSpawn.js +13 -0
- package/dist/tools/v4/process/processWait.js +1 -0
- package/dist/tools/v4/sessions/recallSession.js +1 -0
- package/dist/tools/v4/sessions/sessionList.js +1 -0
- package/dist/tools/v4/sessions/sessionSearch.js +1 -0
- package/dist/tools/v4/skills/lookupToolSchema.js +7 -0
- package/dist/tools/v4/skills/skillManage.js +13 -0
- package/dist/tools/v4/skills/skillView.js +1 -0
- package/dist/tools/v4/skills/skillsList.js +1 -0
- package/dist/tools/v4/subagent/spawnSubAgentTool.js +334 -0
- package/dist/tools/v4/subagent/subagentFanout.js +54 -1
- package/dist/tools/v4/system/aidenSelfUpdate.js +16 -0
- package/dist/tools/v4/system/appClose.js +13 -0
- package/dist/tools/v4/system/appInput.js +13 -0
- package/dist/tools/v4/system/appLaunch.js +13 -0
- package/dist/tools/v4/system/clipboardRead.js +1 -0
- package/dist/tools/v4/system/clipboardWrite.js +14 -0
- package/dist/tools/v4/system/mediaKey.js +12 -0
- package/dist/tools/v4/system/mediaSessions.js +1 -0
- package/dist/tools/v4/system/mediaTransport.js +13 -0
- package/dist/tools/v4/system/naturalEvents.js +1 -0
- package/dist/tools/v4/system/nowPlaying.js +1 -0
- package/dist/tools/v4/system/osProcessList.js +1 -0
- package/dist/tools/v4/system/screenshot.js +1 -0
- package/dist/tools/v4/system/systemInfo.js +1 -0
- package/dist/tools/v4/system/volumeSet.js +17 -0
- package/dist/tools/v4/terminal/shellExec.js +81 -9
- package/dist/tools/v4/web/deepResearch.js +1 -0
- package/dist/tools/v4/web/openUrl.js +1 -0
- package/dist/tools/v4/web/webFetch.js +1 -0
- package/dist/tools/v4/web/webPage.js +1 -0
- package/dist/tools/v4/web/webSearch.js +1 -0
- package/dist/tools/v4/web/youtubeSearch.js +1 -0
- package/package.json +13 -3
|
@@ -8,17 +8,34 @@
|
|
|
8
8
|
/**
|
|
9
9
|
* tools/v4/terminal/shellExec.ts — `shell_exec` wrapper.
|
|
10
10
|
*
|
|
11
|
-
* Routes a shell command to
|
|
12
|
-
* Windows, bash on POSIX)
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* Routes a shell command to one of three backends:
|
|
12
|
+
* - local backend (status quo: PowerShell on Windows, bash on POSIX)
|
|
13
|
+
* - docker single-shot backend (status quo for explicit
|
|
14
|
+
* `ctx.terminalBackend='docker'` with AIDEN_SANDBOX=0)
|
|
15
|
+
* - docker session backend (v4.4 Phase 3: long-lived container reuse
|
|
16
|
+
* with hardening + resource limits when AIDEN_SANDBOX=1)
|
|
15
17
|
*
|
|
16
|
-
*
|
|
18
|
+
* Backend selection precedence:
|
|
19
|
+
* 1. Per-call override `ctx.terminalBackend` wins. When that's
|
|
20
|
+
* `'docker'` AND AIDEN_SANDBOX is enabled, the session-backed
|
|
21
|
+
* `dockerSessionExec` is used (reuse + hardening). When
|
|
22
|
+
* `'docker'` AND AIDEN_SANDBOX is disabled, the legacy
|
|
23
|
+
* single-shot `dockerBackendExecute` runs (tests rely on this).
|
|
24
|
+
* 2. No override + AIDEN_SANDBOX=1 → docker session backend.
|
|
25
|
+
* 3. No override + AIDEN_SANDBOX=0 → local (current behavior).
|
|
26
|
+
*
|
|
27
|
+
* Phase 9's approval engine still gates this tool the same way. The
|
|
28
|
+
* tool stays `riskTier: 'dangerous'` — sandbox isolation does not
|
|
29
|
+
* promote a shell command's tier; it only constrains the blast radius.
|
|
30
|
+
*
|
|
31
|
+
* Status: PHASE 8 → v4.4 Phase 3.
|
|
17
32
|
*/
|
|
18
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
34
|
exports.shellExecTool = void 0;
|
|
20
35
|
const local_1 = require("../backends/local");
|
|
21
36
|
const docker_1 = require("../backends/docker");
|
|
37
|
+
const dockerSession_1 = require("../../../core/v4/dockerSession");
|
|
38
|
+
const sandboxConfig_1 = require("../../../core/v4/sandboxConfig");
|
|
22
39
|
exports.shellExecTool = {
|
|
23
40
|
schema: {
|
|
24
41
|
name: 'shell_exec',
|
|
@@ -43,6 +60,41 @@ exports.shellExecTool = {
|
|
|
43
60
|
category: 'execute',
|
|
44
61
|
mutates: true,
|
|
45
62
|
toolset: 'terminal',
|
|
63
|
+
riskTier: 'dangerous', // v4.4 Phase 1 — arbitrary shell command
|
|
64
|
+
// v4.4 Phase 4 — dry-run preview.
|
|
65
|
+
buildPreview(args, ctx) {
|
|
66
|
+
const command = String(args.command ?? args.cmd ?? '').trim();
|
|
67
|
+
const cwd = typeof args.cwd === 'string' ? args.cwd : ctx.cwd;
|
|
68
|
+
const config = (0, sandboxConfig_1.getSandboxConfig)();
|
|
69
|
+
const userOverride = ctx.terminalBackend;
|
|
70
|
+
const effective = userOverride ?? (config.enabled ? config.defaultBackend : 'local');
|
|
71
|
+
// Lightweight risk hints — same patterns ApprovalEngine uses
|
|
72
|
+
// in smart mode. Kept inline to avoid pulling moat/ into the
|
|
73
|
+
// tool layer.
|
|
74
|
+
const risks = [];
|
|
75
|
+
if (/\brm\s+-rf?\b/.test(command))
|
|
76
|
+
risks.push('rm -rf');
|
|
77
|
+
if (/sudo\b/.test(command))
|
|
78
|
+
risks.push('sudo');
|
|
79
|
+
if (/\bcurl\s.+\|\s*(sh|bash)/.test(command))
|
|
80
|
+
risks.push('curl|sh');
|
|
81
|
+
if (/\bwget\s.+\|\s*(sh|bash)/.test(command))
|
|
82
|
+
risks.push('wget|sh');
|
|
83
|
+
if (/\bdd\s+if=/.test(command))
|
|
84
|
+
risks.push('dd');
|
|
85
|
+
if (/:\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;\s*:/.test(command))
|
|
86
|
+
risks.push('fork bomb');
|
|
87
|
+
if (/format\s+[a-zA-Z]:/i.test(command))
|
|
88
|
+
risks.push('format');
|
|
89
|
+
return {
|
|
90
|
+
tool: 'shell_exec',
|
|
91
|
+
args,
|
|
92
|
+
riskTier: 'dangerous',
|
|
93
|
+
sideEffects: [{ type: 'shell_command', command, cwd, backend: effective }],
|
|
94
|
+
detectedRisks: risks,
|
|
95
|
+
summary: `Would run \`${command.length > 80 ? command.slice(0, 80) + '…' : command}\` via ${effective} backend in ${cwd}`,
|
|
96
|
+
};
|
|
97
|
+
},
|
|
46
98
|
async execute(args, ctx) {
|
|
47
99
|
const command = String(args.command ?? args.cmd ?? '').trim();
|
|
48
100
|
if (!command)
|
|
@@ -56,10 +108,30 @@ exports.shellExecTool = {
|
|
|
56
108
|
: true,
|
|
57
109
|
};
|
|
58
110
|
const cb = ctx.log ? { log: ctx.log } : {};
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
111
|
+
// v4.4 Phase 3 — effective backend selection.
|
|
112
|
+
const config = (0, sandboxConfig_1.getSandboxConfig)();
|
|
113
|
+
const userOverride = ctx.terminalBackend;
|
|
114
|
+
const effective = userOverride ?? (config.enabled ? config.defaultBackend : 'local');
|
|
115
|
+
let result;
|
|
116
|
+
if (effective === 'docker') {
|
|
117
|
+
if (config.enabled) {
|
|
118
|
+
// Long-lived session container + hardening flags.
|
|
119
|
+
result = await (0, dockerSession_1.dockerSessionExec)({
|
|
120
|
+
...shellArgs,
|
|
121
|
+
sessionId: ctx.sessionId,
|
|
122
|
+
image: ctx.dockerImage,
|
|
123
|
+
}, cb);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// Status-quo single-shot docker path (AIDEN_SANDBOX=0 +
|
|
127
|
+
// explicit ctx.terminalBackend='docker'). No reuse, no
|
|
128
|
+
// hardening — kept for backward compatibility.
|
|
129
|
+
result = await (0, docker_1.dockerBackendExecute)(shellArgs, { image: ctx.dockerImage }, cb);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
result = await (0, local_1.localBackendExecute)(shellArgs, cb);
|
|
134
|
+
}
|
|
63
135
|
return {
|
|
64
136
|
success: result.exitCode === 0,
|
|
65
137
|
exitCode: result.exitCode,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiden-runtime",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"node": ">=18"
|
|
36
36
|
},
|
|
37
37
|
"bin": {
|
|
38
|
-
"
|
|
39
|
-
"aiden": "./dist/cli/v4/aidenCLI.js"
|
|
38
|
+
"aiden": "./dist/cli/v4/aidenCLI.js",
|
|
39
|
+
"aiden-runtime": "./dist/cli/v4/aidenCLI.js"
|
|
40
40
|
},
|
|
41
41
|
"main": "./dist/cli/v4/aidenCLI.js",
|
|
42
42
|
"files": [
|
|
@@ -242,6 +242,7 @@
|
|
|
242
242
|
"better-sqlite3": "^12.9.0",
|
|
243
243
|
"blessed": "^0.1.81",
|
|
244
244
|
"chalk": "^5.6.2",
|
|
245
|
+
"chokidar": "^4.0.3",
|
|
245
246
|
"chrome-remote-interface": "^0.34.0",
|
|
246
247
|
"commander": "^5.1.0",
|
|
247
248
|
"cors": "^2.8.5",
|
|
@@ -253,10 +254,13 @@
|
|
|
253
254
|
"epub2": "^3.0.2",
|
|
254
255
|
"execa": "^8.0.1",
|
|
255
256
|
"express": "^4.18.2",
|
|
257
|
+
"form-data": "^4.0.0",
|
|
256
258
|
"imap-simple": "^5.1.0",
|
|
257
259
|
"js-tiktoken": "^1.0.21",
|
|
258
260
|
"js-yaml": "^4.1.1",
|
|
259
261
|
"kleur": "^4.1.5",
|
|
262
|
+
"lru-cache": "^10.0.0",
|
|
263
|
+
"mailparser": "^3.9.8",
|
|
260
264
|
"marked": "^15.0.12",
|
|
261
265
|
"marked-terminal": "^7.3.0",
|
|
262
266
|
"multer": "^2.1.1",
|
|
@@ -265,6 +269,7 @@
|
|
|
265
269
|
"open": "^11.0.0",
|
|
266
270
|
"ora": "^9.3.0",
|
|
267
271
|
"pdf-parse": "^1.1.1",
|
|
272
|
+
"picomatch": "^4.0.0",
|
|
268
273
|
"playwright": "^1.58.2",
|
|
269
274
|
"proper-lockfile": "^4.1.2",
|
|
270
275
|
"puppeteer": "^24.39.1",
|
|
@@ -275,6 +280,7 @@
|
|
|
275
280
|
"stripe": "^20.4.1",
|
|
276
281
|
"tar-stream": "^3.1.8",
|
|
277
282
|
"twilio": "^5.13.1",
|
|
283
|
+
"undici": "^6.0.0",
|
|
278
284
|
"uuid": "^9.0.0",
|
|
279
285
|
"whatsapp-web.js": "^1.26.0",
|
|
280
286
|
"wrap-ansi": "^9.0.2",
|
|
@@ -296,13 +302,16 @@
|
|
|
296
302
|
"@types/better-sqlite3": "^7.6.13",
|
|
297
303
|
"@types/blessed": "^0.1.27",
|
|
298
304
|
"@types/dockerode": "^4.0.1",
|
|
305
|
+
"@types/imap-simple": "^4.2.10",
|
|
299
306
|
"@types/js-yaml": "^4.0.9",
|
|
307
|
+
"@types/mailparser": "^3.4.6",
|
|
300
308
|
"@types/multer": "^2.0.0",
|
|
301
309
|
"@types/node": "^25.3.0",
|
|
302
310
|
"@types/node-telegram-bot-api": "0.64.14",
|
|
303
311
|
"@types/nodemailer": "^7.0.11",
|
|
304
312
|
"@types/pdf-parse": "^1.1.4",
|
|
305
313
|
"@types/qrcode-terminal": "^0.12.2",
|
|
314
|
+
"@types/supertest": "^7.2.0",
|
|
306
315
|
"@types/tar-stream": "^3.1.4",
|
|
307
316
|
"@types/uuid": "^9.0.0",
|
|
308
317
|
"@vitest/ui": "^4.1.5",
|
|
@@ -310,6 +319,7 @@
|
|
|
310
319
|
"electron-builder": "^26.8.1",
|
|
311
320
|
"esbuild": "^0.28.0",
|
|
312
321
|
"javascript-obfuscator": "^5.4.1",
|
|
322
|
+
"supertest": "^7.2.2",
|
|
313
323
|
"ts-node": "^10.9.2",
|
|
314
324
|
"typescript": "^5.9.3",
|
|
315
325
|
"vitest": "^4.1.5"
|