aiden-runtime 4.1.4 → 4.5.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 (169) hide show
  1. package/README.md +250 -847
  2. package/dist/api/server.js +32 -5
  3. package/dist/cli/v4/aidenCLI.js +379 -53
  4. package/dist/cli/v4/callbacks.js +248 -0
  5. package/dist/cli/v4/chatSession.js +292 -4
  6. package/dist/cli/v4/commands/_runtimeToggleHelpers.js +92 -0
  7. package/dist/cli/v4/commands/browserDepth.js +45 -0
  8. package/dist/cli/v4/commands/cron.js +264 -0
  9. package/dist/cli/v4/commands/daemon.js +541 -0
  10. package/dist/cli/v4/commands/daemonStatus.js +253 -0
  11. package/dist/cli/v4/commands/help.js +7 -0
  12. package/dist/cli/v4/commands/index.js +20 -1
  13. package/dist/cli/v4/commands/runs.js +203 -0
  14. package/dist/cli/v4/commands/sandbox.js +48 -0
  15. package/dist/cli/v4/commands/suggestions.js +68 -0
  16. package/dist/cli/v4/commands/tce.js +41 -0
  17. package/dist/cli/v4/commands/trigger.js +378 -0
  18. package/dist/cli/v4/commands/update.js +95 -3
  19. package/dist/cli/v4/daemonAgentBuilder.js +142 -0
  20. package/dist/cli/v4/defaultSoul.js +75 -3
  21. package/dist/cli/v4/display/capabilityCard.js +26 -0
  22. package/dist/cli/v4/display/progressBar.js +41 -8
  23. package/dist/cli/v4/display.js +258 -15
  24. package/dist/cli/v4/replyRenderer.js +31 -23
  25. package/dist/cli/v4/toolPreview.js +10 -0
  26. package/dist/cli/v4/updateBootPrompt.js +170 -0
  27. package/dist/core/playwrightBridge.js +129 -0
  28. package/dist/core/toolRegistry.js +7 -1
  29. package/dist/core/v4/aidenAgent.js +371 -4
  30. package/dist/core/v4/browserState.js +436 -0
  31. package/dist/core/v4/checkpoint.js +79 -0
  32. package/dist/core/v4/daemon/bootstrap.js +604 -0
  33. package/dist/core/v4/daemon/cleanShutdown.js +154 -0
  34. package/dist/core/v4/daemon/cron/cronBridge.js +126 -0
  35. package/dist/core/v4/daemon/cron/cronEmitter.js +173 -0
  36. package/dist/core/v4/daemon/cron/migration.js +199 -0
  37. package/dist/core/v4/daemon/cron/misfirePolicy.js +115 -0
  38. package/dist/core/v4/daemon/daemonConfig.js +90 -0
  39. package/dist/core/v4/daemon/db/connection.js +106 -0
  40. package/dist/core/v4/daemon/db/migrations.js +296 -0
  41. package/dist/core/v4/daemon/db/schema/v1.spec.js +18 -0
  42. package/dist/core/v4/daemon/dispatcher/agentRunner.js +98 -0
  43. package/dist/core/v4/daemon/dispatcher/budgetGate.js +127 -0
  44. package/dist/core/v4/daemon/dispatcher/daemonApproval.js +113 -0
  45. package/dist/core/v4/daemon/dispatcher/dailyBudgetTracker.js +120 -0
  46. package/dist/core/v4/daemon/dispatcher/dispatcher.js +389 -0
  47. package/dist/core/v4/daemon/dispatcher/fireRateLimiter.js +113 -0
  48. package/dist/core/v4/daemon/dispatcher/index.js +53 -0
  49. package/dist/core/v4/daemon/dispatcher/promptTemplate.js +95 -0
  50. package/dist/core/v4/daemon/dispatcher/realAgentRunner.js +356 -0
  51. package/dist/core/v4/daemon/dispatcher/resolveModel.js +93 -0
  52. package/dist/core/v4/daemon/dispatcher/sessionId.js +93 -0
  53. package/dist/core/v4/daemon/drain.js +156 -0
  54. package/dist/core/v4/daemon/eventLoopLag.js +73 -0
  55. package/dist/core/v4/daemon/health.js +159 -0
  56. package/dist/core/v4/daemon/idempotencyStore.js +204 -0
  57. package/dist/core/v4/daemon/index.js +179 -0
  58. package/dist/core/v4/daemon/instanceTracker.js +99 -0
  59. package/dist/core/v4/daemon/resourceRegistry.js +150 -0
  60. package/dist/core/v4/daemon/restartCode.js +32 -0
  61. package/dist/core/v4/daemon/restartFailureCounter.js +77 -0
  62. package/dist/core/v4/daemon/runStore.js +114 -0
  63. package/dist/core/v4/daemon/runtimeLock.js +167 -0
  64. package/dist/core/v4/daemon/signals.js +50 -0
  65. package/dist/core/v4/daemon/supervisor.js +272 -0
  66. package/dist/core/v4/daemon/triggerBus.js +279 -0
  67. package/dist/core/v4/daemon/triggers/email/allowlist.js +70 -0
  68. package/dist/core/v4/daemon/triggers/email/automatedSender.js +78 -0
  69. package/dist/core/v4/daemon/triggers/email/bodyExtractor.js +0 -0
  70. package/dist/core/v4/daemon/triggers/email/emailSeenStore.js +99 -0
  71. package/dist/core/v4/daemon/triggers/email/emailSpec.js +107 -0
  72. package/dist/core/v4/daemon/triggers/email/imapConnection.js +211 -0
  73. package/dist/core/v4/daemon/triggers/email/index.js +332 -0
  74. package/dist/core/v4/daemon/triggers/email/seenUids.js +60 -0
  75. package/dist/core/v4/daemon/triggers/fileObservationsStore.js +93 -0
  76. package/dist/core/v4/daemon/triggers/fileWatcher.js +253 -0
  77. package/dist/core/v4/daemon/triggers/fileWatcherSpec.js +88 -0
  78. package/dist/core/v4/daemon/triggers/fsIdentity.js +42 -0
  79. package/dist/core/v4/daemon/triggers/globMatcher.js +100 -0
  80. package/dist/core/v4/daemon/triggers/reconcile.js +206 -0
  81. package/dist/core/v4/daemon/triggers/settleStat.js +81 -0
  82. package/dist/core/v4/daemon/triggers/webhook.js +376 -0
  83. package/dist/core/v4/daemon/triggers/webhookDeliveriesStore.js +109 -0
  84. package/dist/core/v4/daemon/triggers/webhookIdempotency.js +72 -0
  85. package/dist/core/v4/daemon/triggers/webhookRateLimit.js +56 -0
  86. package/dist/core/v4/daemon/triggers/webhookSpec.js +76 -0
  87. package/dist/core/v4/daemon/triggers/webhookVerifier.js +128 -0
  88. package/dist/core/v4/daemon/types.js +15 -0
  89. package/dist/core/v4/dockerSession.js +461 -0
  90. package/dist/core/v4/dryRun.js +117 -0
  91. package/dist/core/v4/failureClassifier.js +779 -0
  92. package/dist/core/v4/loopTrace.js +257 -0
  93. package/dist/core/v4/recoveryReport.js +449 -0
  94. package/dist/core/v4/runtimeToggles.js +187 -0
  95. package/dist/core/v4/sandboxConfig.js +285 -0
  96. package/dist/core/v4/sandboxFs.js +316 -0
  97. package/dist/core/v4/suggestionCatalog.js +41 -0
  98. package/dist/core/v4/suggestionEngine.js +210 -0
  99. package/dist/core/v4/toolRegistry.js +18 -0
  100. package/dist/core/v4/turnState.js +587 -0
  101. package/dist/core/v4/update/checkUpdate.js +63 -3
  102. package/dist/core/v4/update/installMethodDetect.js +115 -0
  103. package/dist/core/v4/update/registryClient.js +121 -0
  104. package/dist/core/v4/update/skipState.js +75 -0
  105. package/dist/core/v4/verifier.js +448 -0
  106. package/dist/core/version.js +1 -1
  107. package/dist/core/webSearch.js +64 -24
  108. package/dist/tools/v4/browser/_observer.js +224 -0
  109. package/dist/tools/v4/browser/browserBlocker.js +396 -0
  110. package/dist/tools/v4/browser/browserClick.js +18 -1
  111. package/dist/tools/v4/browser/browserClose.js +18 -1
  112. package/dist/tools/v4/browser/browserExtract.js +5 -1
  113. package/dist/tools/v4/browser/browserFill.js +17 -1
  114. package/dist/tools/v4/browser/browserGetUrl.js +5 -1
  115. package/dist/tools/v4/browser/browserNavigate.js +16 -1
  116. package/dist/tools/v4/browser/browserScreenshot.js +5 -1
  117. package/dist/tools/v4/browser/browserScroll.js +18 -1
  118. package/dist/tools/v4/browser/browserType.js +17 -1
  119. package/dist/tools/v4/browser/captchaCheck.js +5 -1
  120. package/dist/tools/v4/executeCode.js +1 -0
  121. package/dist/tools/v4/files/fileCopy.js +56 -2
  122. package/dist/tools/v4/files/fileDelete.js +38 -1
  123. package/dist/tools/v4/files/fileList.js +12 -1
  124. package/dist/tools/v4/files/fileMove.js +59 -2
  125. package/dist/tools/v4/files/filePatch.js +43 -1
  126. package/dist/tools/v4/files/fileRead.js +12 -1
  127. package/dist/tools/v4/files/fileWrite.js +41 -1
  128. package/dist/tools/v4/index.js +71 -58
  129. package/dist/tools/v4/memory/memoryAdd.js +14 -0
  130. package/dist/tools/v4/memory/memoryRemove.js +14 -0
  131. package/dist/tools/v4/memory/memoryReplace.js +15 -0
  132. package/dist/tools/v4/memory/sessionSummary.js +12 -0
  133. package/dist/tools/v4/process/processKill.js +19 -0
  134. package/dist/tools/v4/process/processList.js +1 -0
  135. package/dist/tools/v4/process/processLogRead.js +1 -0
  136. package/dist/tools/v4/process/processSpawn.js +13 -0
  137. package/dist/tools/v4/process/processWait.js +1 -0
  138. package/dist/tools/v4/sessions/recallSession.js +1 -0
  139. package/dist/tools/v4/sessions/sessionList.js +1 -0
  140. package/dist/tools/v4/sessions/sessionSearch.js +1 -0
  141. package/dist/tools/v4/skills/lookupToolSchema.js +2 -0
  142. package/dist/tools/v4/skills/skillManage.js +13 -0
  143. package/dist/tools/v4/skills/skillView.js +1 -0
  144. package/dist/tools/v4/skills/skillsList.js +1 -0
  145. package/dist/tools/v4/subagent/subagentFanout.js +1 -0
  146. package/dist/tools/v4/system/aidenSelfUpdate.js +16 -0
  147. package/dist/tools/v4/system/appClose.js +13 -0
  148. package/dist/tools/v4/system/appInput.js +13 -0
  149. package/dist/tools/v4/system/appLaunch.js +13 -0
  150. package/dist/tools/v4/system/clipboardRead.js +1 -0
  151. package/dist/tools/v4/system/clipboardWrite.js +14 -0
  152. package/dist/tools/v4/system/mediaKey.js +12 -0
  153. package/dist/tools/v4/system/mediaSessions.js +1 -0
  154. package/dist/tools/v4/system/mediaTransport.js +13 -0
  155. package/dist/tools/v4/system/naturalEvents.js +1 -0
  156. package/dist/tools/v4/system/nowPlaying.js +1 -0
  157. package/dist/tools/v4/system/osProcessList.js +1 -0
  158. package/dist/tools/v4/system/screenshot.js +1 -0
  159. package/dist/tools/v4/system/systemInfo.js +1 -0
  160. package/dist/tools/v4/system/volumeSet.js +17 -0
  161. package/dist/tools/v4/terminal/shellExec.js +81 -9
  162. package/dist/tools/v4/web/deepResearch.js +1 -0
  163. package/dist/tools/v4/web/openUrl.js +1 -0
  164. package/dist/tools/v4/web/webFetch.js +1 -0
  165. package/dist/tools/v4/web/webPage.js +1 -0
  166. package/dist/tools/v4/web/webSearch.js +1 -0
  167. package/dist/tools/v4/web/youtubeSearch.js +1 -0
  168. package/package.json +7 -1
  169. package/plugins/aiden-plugin-cdp-browser/.granted-permissions.json +8 -0
@@ -40,6 +40,7 @@ exports.naturalEventsTool = {
40
40
  category: 'network',
41
41
  mutates: false,
42
42
  toolset: 'system',
43
+ riskTier: 'safe', // v4.4 Phase 1
43
44
  async execute(args) {
44
45
  const limit = typeof args.limit === 'number' && args.limit > 0
45
46
  ? Math.floor(args.limit)
@@ -32,6 +32,7 @@ exports.nowPlayingTool = {
32
32
  category: 'read',
33
33
  mutates: false,
34
34
  toolset: 'system',
35
+ riskTier: 'safe', // v4.4 Phase 1
35
36
  async execute() {
36
37
  try {
37
38
  const result = await (0, nowPlaying_1.getNowPlaying)();
@@ -62,6 +62,7 @@ exports.osProcessListTool = {
62
62
  category: 'read',
63
63
  mutates: false,
64
64
  toolset: 'system',
65
+ riskTier: 'safe', // v4.4 Phase 1
65
66
  async execute(args, _ctx) {
66
67
  if (!(0, _psHelpers_1.isWindows)())
67
68
  return (0, _psHelpers_1.windowsOnlyError)('os_process_list');
@@ -63,6 +63,7 @@ exports.screenshotTool = {
63
63
  category: 'read',
64
64
  mutates: false,
65
65
  toolset: 'system',
66
+ riskTier: 'safe', // v4.4 Phase 1
66
67
  async execute(_args, ctx) {
67
68
  if (!(0, _psHelpers_1.isWindows)())
68
69
  return (0, _psHelpers_1.windowsOnlyError)('screenshot');
@@ -57,6 +57,7 @@ exports.systemInfoTool = {
57
57
  category: 'read',
58
58
  mutates: false,
59
59
  toolset: 'system',
60
+ riskTier: 'safe', // v4.4 Phase 1
60
61
  async execute() {
61
62
  try {
62
63
  const info = process.platform === 'win32' ? await readWindows() : readPosix();
@@ -123,6 +123,23 @@ exports.volumeSetTool = {
123
123
  category: 'execute',
124
124
  mutates: true,
125
125
  toolset: 'system',
126
+ riskTier: 'caution', // v4.4 Phase 1
127
+ buildPreview(args) {
128
+ const action = typeof args.action === 'string' ? args.action : '';
129
+ const percent = typeof args.percent === 'number' ? args.percent : -1;
130
+ return {
131
+ tool: 'volume_set',
132
+ args,
133
+ riskTier: 'caution',
134
+ sideEffects: action === 'set'
135
+ ? [{ type: 'volume_set', level: Math.max(0, Math.min(100, percent)) }]
136
+ : [{ type: 'media_control', action }],
137
+ detectedRisks: [],
138
+ summary: action === 'set'
139
+ ? `Would set volume to ${percent}%`
140
+ : `Would ${action.replace('_', ' ')}`,
141
+ };
142
+ },
126
143
  async execute(args, _ctx) {
127
144
  if (!(0, _psHelpers_1.isWindows)())
128
145
  return (0, _psHelpers_1.windowsOnlyError)('volume_set');
@@ -8,17 +8,34 @@
8
8
  /**
9
9
  * tools/v4/terminal/shellExec.ts — `shell_exec` wrapper.
10
10
  *
11
- * Routes a shell command to either the local backend (PowerShell on
12
- * Windows, bash on POSIX) or the Docker backend, based on
13
- * `ctx.terminalBackend`. Phase 8 has no shell-injection guards —
14
- * Phase 9's approval engine inspects every call before it lands here.
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
- * Status: PHASE 8.
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
- const backend = ctx.terminalBackend ?? 'local';
60
- const result = backend === 'docker'
61
- ? await (0, docker_1.dockerBackendExecute)(shellArgs, { image: ctx.dockerImage }, cb)
62
- : await (0, local_1.localBackendExecute)(shellArgs, cb);
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,
@@ -36,6 +36,7 @@ exports.deepResearchTool = {
36
36
  category: 'network',
37
37
  mutates: false,
38
38
  toolset: 'web',
39
+ riskTier: 'safe', // v4.4 Phase 1
39
40
  async execute(args) {
40
41
  const topic = String(args.topic ?? '').trim();
41
42
  if (!topic)
@@ -76,6 +76,7 @@ exports.openUrlTool = {
76
76
  category: 'network',
77
77
  mutates: false,
78
78
  toolset: 'web',
79
+ riskTier: 'safe', // v4.4 Phase 1
79
80
  async execute(args) {
80
81
  const url = String(args.url ?? '').trim();
81
82
  if (!isLaunchableUrl(url)) {
@@ -49,6 +49,7 @@ exports.webFetchTool = {
49
49
  category: 'network',
50
50
  mutates: false,
51
51
  toolset: 'web',
52
+ riskTier: 'safe', // v4.4 Phase 1
52
53
  async execute(args) {
53
54
  const url = String(args.url ?? '').trim();
54
55
  if (!url)
@@ -38,6 +38,7 @@ exports.webPageTool = {
38
38
  category: 'network',
39
39
  mutates: false,
40
40
  toolset: 'web',
41
+ riskTier: 'safe', // v4.4 Phase 1
41
42
  async execute(args) {
42
43
  const url = String(args.url ?? '').trim();
43
44
  if (!url)
@@ -35,6 +35,7 @@ exports.webSearchTool = {
35
35
  category: 'network',
36
36
  mutates: false,
37
37
  toolset: 'web',
38
+ riskTier: 'safe', // v4.4 Phase 1
38
39
  async execute(args) {
39
40
  const query = String(args.query ?? '').trim();
40
41
  if (!query) {
@@ -239,6 +239,7 @@ exports.youtubeSearchTool = {
239
239
  category: 'network',
240
240
  mutates: false,
241
241
  toolset: 'web',
242
+ riskTier: 'safe', // v4.4 Phase 1
242
243
  async execute(args) {
243
244
  const query = String(args.query ?? '').trim();
244
245
  if (!query) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiden-runtime",
3
- "version": "4.1.4",
3
+ "version": "4.5.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -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",
@@ -257,6 +258,7 @@
257
258
  "js-tiktoken": "^1.0.21",
258
259
  "js-yaml": "^4.1.1",
259
260
  "kleur": "^4.1.5",
261
+ "mailparser": "^3.9.8",
260
262
  "marked": "^15.0.12",
261
263
  "marked-terminal": "^7.3.0",
262
264
  "multer": "^2.1.1",
@@ -296,13 +298,16 @@
296
298
  "@types/better-sqlite3": "^7.6.13",
297
299
  "@types/blessed": "^0.1.27",
298
300
  "@types/dockerode": "^4.0.1",
301
+ "@types/imap-simple": "^4.2.10",
299
302
  "@types/js-yaml": "^4.0.9",
303
+ "@types/mailparser": "^3.4.6",
300
304
  "@types/multer": "^2.0.0",
301
305
  "@types/node": "^25.3.0",
302
306
  "@types/node-telegram-bot-api": "0.64.14",
303
307
  "@types/nodemailer": "^7.0.11",
304
308
  "@types/pdf-parse": "^1.1.4",
305
309
  "@types/qrcode-terminal": "^0.12.2",
310
+ "@types/supertest": "^7.2.0",
306
311
  "@types/tar-stream": "^3.1.4",
307
312
  "@types/uuid": "^9.0.0",
308
313
  "@vitest/ui": "^4.1.5",
@@ -310,6 +315,7 @@
310
315
  "electron-builder": "^26.8.1",
311
316
  "esbuild": "^0.28.0",
312
317
  "javascript-obfuscator": "^5.4.1",
318
+ "supertest": "^7.2.2",
313
319
  "ts-node": "^10.9.2",
314
320
  "typescript": "^5.9.3",
315
321
  "vitest": "^4.1.5"
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": 1,
3
+ "granted": [
4
+ "browser",
5
+ "subprocess",
6
+ "network"
7
+ ]
8
+ }