feat(ai): add code interpreter for AI data analysis (#16559)

## Summary

- Add code interpreter tool that enables AI to execute Python code for
data analysis, CSV processing, and chart generation
- Support for both local (development) and E2B (sandboxed production)
execution drivers
- Real-time streaming of stdout/stderr and generated files
- Frontend components for displaying code execution results with
expandable sections

## Code Quality Improvements

- Extract `getMimeType` to shared utility to reduce code duplication
between drivers
- Fix security issue: escape single quotes/backslashes in E2B driver env
variable injection
- Add `buildExecutionState` helper to reduce duplicated state object
construction
- Add `DEFAULT_CODE_INTERPRETER_TIMEOUT_MS` constant for consistency
- Fix lingui linting warning and TypeScript theme errors in frontend

## Test Plan

- [ ] Test code interpreter with local driver in development
- [ ] Test code interpreter with E2B driver in production environment
- [ ] Verify streaming output displays correctly in chat UI
- [ ] Verify generated files (charts, CSVs) are uploaded and
downloadable
- [ ] Test file upload flow (CSV, Excel) triggers code interpreter

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Updates generated i18n catalogs for Polish and pseudo-English, adding
strings for code execution/output (code interpreter) and various UI
messages, with minor text adjustments.
> 
> - **Localization**:
> - **Generated catalogs**: Refresh `locales/generated/pl-PL.ts` and
`locales/generated/pseudo-en.ts`.
> - Add strings for code execution/output (e.g., code, copy code/output,
running/waiting states, download files, generated files, Python code
execution).
> - Include new UI texts (errors, prompts, menus) and minor text
corrections.
>   - No changes to `pt-BR`; other files unchanged functionally.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
befc13d02c21e5a6647bc1aa6daa2a89f60b7ef8. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This commit is contained in:
Félix Malfait
2025-12-15 16:11:24 +01:00
committed by GitHub
parent 4281a71f40
commit 2e104c8e76
151 changed files with 10361 additions and 449 deletions
+74 -1
View File
@@ -4258,6 +4258,13 @@ __metadata:
languageName: node
linkType: hard
"@bufbuild/protobuf@npm:^2.6.2":
version: 2.10.1
resolution: "@bufbuild/protobuf@npm:2.10.1"
checksum: 10c0/47fde36740663e8b45c8290dc9107780a579971fae9664ece6ed0da24add458b46492cc1ff4847db218ec918a9cdf76b8e74ab0b21d79912163f3c4cb0ceda22
languageName: node
linkType: hard
"@bundled-es-modules/cookie@npm:^2.0.0":
version: 2.0.1
resolution: "@bundled-es-modules/cookie@npm:2.0.1"
@@ -4578,6 +4585,25 @@ __metadata:
languageName: node
linkType: hard
"@connectrpc/connect-web@npm:2.0.0-rc.3":
version: 2.0.0-rc.3
resolution: "@connectrpc/connect-web@npm:2.0.0-rc.3"
peerDependencies:
"@bufbuild/protobuf": ^2.2.0
"@connectrpc/connect": 2.0.0-rc.3
checksum: 10c0/32ee39a377b2a1c110a92427b9d60e5189e24261bbd8bf9e7b92d3cce67db49528a92fe0f158967746d9035d09b49f9f554075824e94dbd35dda658054a6ae62
languageName: node
linkType: hard
"@connectrpc/connect@npm:2.0.0-rc.3":
version: 2.0.0-rc.3
resolution: "@connectrpc/connect@npm:2.0.0-rc.3"
peerDependencies:
"@bufbuild/protobuf": ^2.2.0
checksum: 10c0/96de3d73df3eca3681a026b3396d0344b2237ed6ea8f7e09e0f913a03fba3f5e07538c82ee13daa2257e7e0b158929b7cc60d49a946b57d94404efd1944af581
languageName: node
linkType: hard
"@cspotcode/source-map-support@npm:^0.8.0":
version: 0.8.1
resolution: "@cspotcode/source-map-support@npm:0.8.1"
@@ -4715,6 +4741,15 @@ __metadata:
languageName: node
linkType: hard
"@e2b/code-interpreter@npm:^1.0.4":
version: 1.5.1
resolution: "@e2b/code-interpreter@npm:1.5.1"
dependencies:
e2b: "npm:^1.4.0"
checksum: 10c0/edb0aa6643749e91c2446aa5e124304066703cce2c41adb8647ad5a124340332f6f547758bf196c9a5400a171f1a295a13eb0946d4462d76b06106aed65913c2
languageName: node
linkType: hard
"@emnapi/core@npm:^1.1.0, @emnapi/core@npm:^1.4.3":
version: 1.4.5
resolution: "@emnapi/core@npm:1.4.5"
@@ -30615,7 +30650,7 @@ __metadata:
languageName: node
linkType: hard
"compare-versions@npm:^6.1.1":
"compare-versions@npm:^6.1.0, compare-versions@npm:^6.1.1":
version: 6.1.1
resolution: "compare-versions@npm:6.1.1"
checksum: 10c0/415205c7627f9e4f358f571266422980c9fe2d99086be0c9a48008ef7c771f32b0fbe8e97a441ffedc3910872f917a0675fe0fe3c3b6d331cda6d8690be06338
@@ -33036,6 +33071,20 @@ __metadata:
languageName: node
linkType: hard
"e2b@npm:^1.4.0":
version: 1.13.2
resolution: "e2b@npm:1.13.2"
dependencies:
"@bufbuild/protobuf": "npm:^2.6.2"
"@connectrpc/connect": "npm:2.0.0-rc.3"
"@connectrpc/connect-web": "npm:2.0.0-rc.3"
compare-versions: "npm:^6.1.0"
openapi-fetch: "npm:^0.9.7"
platform: "npm:^1.3.6"
checksum: 10c0/5c6f6b15cf380331dae5561017bf4653aed38e7e7102542984997b2888390732c525a399aac06da5ad26bfe08cf99073b7174825c8f6d54a1b78a327456fccd6
languageName: node
linkType: hard
"eastasianwidth@npm:^0.2.0":
version: 0.2.0
resolution: "eastasianwidth@npm:0.2.0"
@@ -47052,6 +47101,15 @@ __metadata:
languageName: node
linkType: hard
"openapi-fetch@npm:^0.9.7":
version: 0.9.8
resolution: "openapi-fetch@npm:0.9.8"
dependencies:
openapi-typescript-helpers: "npm:^0.0.8"
checksum: 10c0/a96590c3df4f3e6800003f1128bafd50a01113073f00ea32a6e21e8c1ec38f3dc88141448569e52e791c58088fdbee61ea4fc44b6856cc24da2768fc43fddb82
languageName: node
linkType: hard
"openapi-types@npm:12.1.3, openapi-types@npm:^12.0.0":
version: 12.1.3
resolution: "openapi-types@npm:12.1.3"
@@ -47059,6 +47117,13 @@ __metadata:
languageName: node
linkType: hard
"openapi-typescript-helpers@npm:^0.0.8":
version: 0.0.8
resolution: "openapi-typescript-helpers@npm:0.0.8"
checksum: 10c0/b31a326c67d65f947732e32126f79976ecc67597f911f7ed43ea9ea23b1e2df7a012026327b6e39df5897a70781f9c57f9fcdd86f8a05c0f67ab2b23ee5d708a
languageName: node
linkType: hard
"openapi3-ts@npm:^3.0.0":
version: 3.2.0
resolution: "openapi3-ts@npm:3.2.0"
@@ -48389,6 +48454,13 @@ __metadata:
languageName: node
linkType: hard
"platform@npm:^1.3.6":
version: 1.3.6
resolution: "platform@npm:1.3.6"
checksum: 10c0/69f2eb692e15f1a343dd0d9347babd9ca933824c8673096be746ff66f99f2bdc909fadd8609076132e6ec768349080babb7362299f2a7f885b98f1254ae6224b
languageName: node
linkType: hard
"playwright-core@npm:1.56.1":
version: 1.56.1
resolution: "playwright-core@npm:1.56.1"
@@ -56148,6 +56220,7 @@ __metadata:
"@blocknote/server-util": "npm:^0.31.1"
"@clickhouse/client": "npm:^1.11.0"
"@dagrejs/dagre": "npm:^1.1.2"
"@e2b/code-interpreter": "npm:^1.0.4"
"@envelop/core": "npm:4.0.3"
"@envelop/on-resolve": "npm:4.1.0"
"@esbuild-plugins/node-modules-polyfill": "npm:^0.2.2"