1. 16 Mar, 2026 6 commits
    • Update action (#6571) · 04bf2d9b
      * action
      
      * action
      
      * action
      Archer committed
    • update action (#6570) · b90c053f
      * action
      
      * action
      
      * update action
      Archer committed
    • update action (#6569) · a8d09818
      * action
      
      * action
      
      * action
      Archer committed
    • V4.14.9 dev (#6568) · d6db937a
      * action
      
      * action
      
      * rename action
      
      * action
      
      * action
      Archer committed
    • V4.14.9 dev (#6566) · 7101ba5f
      * sandbox-sync-agent (#6565)
      
      * action
      
      * action
      
      ---------
      
      Co-authored-by: Ryo <whoeverimf5@gmail.com>
      Archer committed
    • V4.14.9 dev (#6555) · aaa7d17e
      * feat: encapsulate logger (#6535)
      
      * feat: encapsulate logger
      
      * update engines
      
      ---------
      
      Co-authored-by: archer <545436317@qq.com>
      
      * next config
      
      * dev shell
      
      * Agent sandbox (#6532)
      
      * docs: switch to docs layout and apply black theme (#6533)
      
      * feat: add Gemini 3.1 models
      
      - Add gemini-3.1-pro-preview (released February 19, 2026)
      - Add gemini-3.1-flash-lite-preview (released March 3, 2026)
      
      Both models support:
      - 1M context window
      - 64k max response
      - Vision
      - Tool choice
      
      * docs: switch to docs layout and apply black theme
      
      - Change layout from notebook to docs
      - Update logo to icon + text format
      - Apply fumadocs black theme
      - Simplify global.css (keep only navbar and TOC styles)
      - Fix icon components to properly accept className props
      - Add mobile text overflow handling
      - Update Node engine requirement to >=20.x
      
      * doc
      
      * doc
      
      * lock
      
      * fix: ts
      
      * doc
      
      * doc
      
      ---------
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Co-authored-by: archer <545436317@qq.com>
      
      * Doc (#6493)
      
      * cloud doc
      
      * doc refactor
      
      * doc move
      
      * seo
      
      * remove doc
      
      * yml
      
      * doc
      
      * fix: tsconfig
      
      * fix: tsconfig
      
      * sandbox version (#6497)
      
      * sandbox version
      
      * add sandbox log
      
      * update lock
      
      * fix
      
      * fix: sandbox
      
      * doc
      
      * add console
      
      * i18n
      
      * sandbxo in agent
      
      * feat: agent sandbox
      
      * lock
      
      * feat: sandbox ui
      
      * sandbox check exists
      
      * env tempalte
      
      * doc
      
      * lock
      
      * sandbox in chat window
      
      * sandbox entry
      
      * fix: test
      
      * rename var
      
      * sandbox config tip
      
      * update sandbox lifecircle
      
      * update prompt
      
      * rename provider test
      
      * sandbox logger
      
      * yml
      
      ---------
      
      Co-authored-by: Archer <archer@fastgpt.io>
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      
      * perf: sandbox error tip
      
      * Add sandbox limit and fix some issue (#6550)
      
      * sandbox in plan
      
      * fix: some issue
      
      * fix: test
      
      * editor default path
      
      * fix: comment
      
      * perf: sandbox worksapce
      
      * doc
      
      * perf: del sandbox
      
      * sandbox build
      
      * fix: test
      
      * fix: pr comment
      
      ---------
      
      Co-authored-by: Ryo <whoeverimf5@gmail.com>
      Co-authored-by: Archer <archer@fastgpt.io>
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Archer committed
  2. 15 Mar, 2026 2 commits
    • refactor: merge standardConstants and standard in team plan (#6549) · 21b3f854
      * refactor: merge standardConstants and standard in team plan
      
      * Update packages/service/support/wallet/sub/utils.ts
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      
      * fix: remove type assertion
      
      * chore: type
      
      * test: test buildStandardPlan
      
      * fix: type
      
      * perf: code perf
      
      * add test code
      
      ---------
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      Co-authored-by: archer <545436317@qq.com>
      Finley Ge committed
    • perf: workflow runtime (#6562) · 007ca097
      * perf: workflow runtime
      
      * perf: lable input and dispatch workflow
      
      * fix: workflow dispatch
      
      * fix: workflow dispatch
      
      * fix: workflow dispatch
      
      * fix: workflow dispatch
      
      * perf: workflow runtime
      
      * perf: workflow runtime
      Archer committed
  3. 14 Mar, 2026 1 commit
  4. 13 Mar, 2026 2 commits
  5. 12 Mar, 2026 1 commit
    • fix: api dataset (#6551) · 4b4f856e
      * fix: api dataset
      
      * Update packages/global/core/chat/type.ts
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      
      ---------
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      Archer committed
  6. 11 Mar, 2026 3 commits
    • chore(deps-dev): bump tar from 7.5.10 to 7.5.11 in /document (#6545) · 57489c2f
      Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.10 to 7.5.11.
      - [Release notes](https://github.com/isaacs/node-tar/releases)
      - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
      - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.10...v7.5.11)
      
      ---
      updated-dependencies:
      - dependency-name: tar
        dependency-version: 7.5.11
        dependency-type: indirect
      ...
      
      Signed-off-by: dependabot[bot] <support@github.com>
      Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
      dependabot[bot] committed
    • fix: SSRF vulnerability in HTTP Tool (GHSA-6g6x-8hq5-9cw4) (#6546) · 91a13030
      * fix: SSRF vulnerability in HTTP Tool (GHSA-6g6x-8hq5-9cw4)
      
      修复 HTTP Tool 中的 SSRF 漏洞,防止攻击者访问内部网络资源。
      
      主要变更:
      1. 在 runHTTPTool 函数中添加 isInternalAddress 验证
      2. 修改 CHECK_INTERNAL_IP 默认行为为启用(安全优先)
      3. 添加全面的单元测试验证修复
      
      安全改进:
      - 阻止访问 AWS/GCP/Azure 等云服务商元数据端点
      - 阻止访问 Kubernetes 服务端点
      - 阻止访问私有 IP 范围 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
      - 阻止访问 localhost 和 127.0.0.1
      - 阻止访问 link-local 地址 (169.254.0.0/16)
      
      破坏性变更:
      - CHECK_INTERNAL_IP 环境变量默认值从 false 改为 true
      - 需要访问内部服务的用户需要显式设置 CHECK_INTERNAL_IP=false(不推荐)
      
      测试:
      - 添加 23 个测试用例覆盖各种 SSRF 攻击场景
      - 所有测试通过
      
      相关问题:
      - Fixes GHSA-6g6x-8hq5-9cw4
      - CWE-918: Server-Side Request Forgery
      
      Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
      
      * test: update isInternalAddress tests for new default behavior
      
      更新测试以反映 CHECK_INTERNAL_IP 的新默认行为(默认启用安全检查)。
      
      变更:
      - 修改默认行为测试:现在默认阻止私有 IP 地址
      - 添加 CHECK_INTERNAL_IP=false 测试组:测试向后兼容模式
      - 所有 62 个测试通过
      
      Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
      
      * doc
      
      ---------
      
      Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
      Archer committed
    • fix: tool id (#6544) · 38f6f9dd
      * fix: tool id
      
      * fix: test
      
      * fix: ts
      
      * add test
      Archer committed
  7. 10 Mar, 2026 1 commit
    • docs: switch to docs layout and apply black theme (#6533) · 960c8898
      * feat: add Gemini 3.1 models
      
      - Add gemini-3.1-pro-preview (released February 19, 2026)
      - Add gemini-3.1-flash-lite-preview (released March 3, 2026)
      
      Both models support:
      - 1M context window
      - 64k max response
      - Vision
      - Tool choice
      
      * docs: switch to docs layout and apply black theme
      
      - Change layout from notebook to docs
      - Update logo to icon + text format
      - Apply fumadocs black theme
      - Simplify global.css (keep only navbar and TOC styles)
      - Fix icon components to properly accept className props
      - Add mobile text overflow handling
      - Update Node engine requirement to >=20.x
      
      * doc
      
      * doc
      
      * lock
      
      * fix: ts
      
      * doc
      
      * doc
      
      ---------
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Co-authored-by: archer <545436317@qq.com>
      Archer committed
  8. 09 Mar, 2026 5 commits
  9. 07 Mar, 2026 1 commit
    • fix: optimize documentation SEO meta tags (#6523) · d8b8da8d
      - Improve title tags with specific page context (Getting Started)
      - Enhance meta descriptions to be more action-oriented
      - Fix Open Graph locale format (zh_CN instead of zh-CN)
      - Add specific OG titles and descriptions per language
      - Update siteName to 'FastGPT Documentation'
      - Unify Twitter Card image path to /og-image.png
      - Add language-specific alt text for OG images
      
      These changes improve:
      - Documentation discoverability in search engines
      - Social sharing preview quality
      - AI system understanding of documentation content
      - User engagement from search results
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Archer committed
  10. 06 Mar, 2026 5 commits
  11. 05 Mar, 2026 1 commit
  12. 03 Mar, 2026 5 commits
  13. 28 Feb, 2026 1 commit
    • feat(sandbox): 重构代码沙盒,支持内置函数和网络请求 (#6479) · 6b613595
      * fix(sandbox): 重构代码沙盒,支持内置函数和网络请求 (#6462)
      
      * feat(sandbox): 重写代码沙盒 - Bun + Hono + 统一子进程模型
      
      - 运行时: Node.js → Bun
      - HTTP 框架: NestJS + Fastify → Hono
      - JS 执行: isolated-vm → Bun 子进程(与 Python 统一)
      - 架构: 统一子进程模型,JS 和 Python 共享同一套执行引擎
      
      - SubprocessRunner 基类,JS/Python 各自继承
      - ProcessPool 进程池预热(SANDBOX_JS_POOL_SIZE / SANDBOX_PYTHON_POOL_SIZE)
      - SystemHelper 命名空间(JS 端保留向后兼容全局函数)
      - 临时文件系统隔离 + 路径遍历防护 + 磁盘配额
      - 请求级资源限制(timeoutMs / memoryMB / diskMB)
      
      - JS: 原型链冻结 + Bun API 禁用 + Function 构造器注入 safe require(模块白名单)
      - Python: 宿主侧正则预检 + __import__ 拦截 + resource 限制
      
      - 移除: @nestjs/*(6个包)、fastify、isolated-vm、node-gyp、reflect-metadata、rxjs
      - 新增: hono
      - 保留: tiktoken
      - 新增用户可用包: lodash、dayjs、axios、moment、uuid、crypto-js、qs
      
      - 67 个测试全部通过(单元测试 + 安全测试 + 集成测试)
      - vitest 独立配置,不影响全局
      
      * fix(sandbox): 安全加固 - 扩展 Bun API 封锁、清理 process.env、闭包封装 Python import 拦截
      
      - JS: 扩展 Bun 危险 API 封锁列表(serve/connect/listen/udpSocket/dns/plugin/build/Transpiler)
      - JS: 清理 process.env,仅保留沙箱必要变量,防止泄露敏感环境变量
      - Python: 用闭包封装 _safe_import,del 掉 _original_import/_make_safe_import/_BLOCKED_MODULES
        防止用户代码恢复原始 __import__
      - Dockerfile: 复制 bun.lock 并使用 --frozen-lockfile 确保构建可复现
      
      * fix(sandbox): 将 sandbox 从 pnpm workspace 中移除,独立管理依赖
      
      * fix(sandbox): 从全局 vitest 移除 sandbox 测试,集成测试无 SANDBOX_URL 时跳过
      
      * ci(sandbox): 添加独立测试 workflow,仅 sandbox 代码变更时触发
      
      * refactor(sandbox): 使用 export default 启动方式,与 sandbox_server 保持一致
      
      * fix: sandbox security hardening & comprehensive test suite
      
      Security fixes:
      - JS: freeze Function constructor to block constructor.constructor escape
      - JS: handle undefined return from main() (serialize as null)
      - Python: fix http_request using from-import after __import__ interception
      - Python: __import__ whitelist mode blocks exec/eval import bypasses
      
      New tests (223 passing):
      - security/escape-attacks: JS/Python escape attack vectors
      - security/network-security: IP blacklist, protocol restrictions, httpRequest
      - compat/legacy-js: 18 backward compatibility tests
      - compat/legacy-python: 21 backward compatibility tests
      - boundary: timeout, memory, disk, edge cases
      - examples: common user code patterns
      
      * feat(sandbox): env vars for all limits + rewrite README
      
      - Network limits configurable via env: SANDBOX_MAX_REQUESTS, SANDBOX_REQUEST_TIMEOUT, SANDBOX_MAX_RESPONSE_SIZE
      - Resource upper bounds configurable: SANDBOX_MAX_TIMEOUT, SANDBOX_MAX_MEMORY_MB, SANDBOX_MAX_DISK_MB
      - README: architecture, API docs, env var reference, how to add JS/Python packages, security overview, built-in functions
      
      * refactor(sandbox): extract env.ts with dotenv for typed env loading
      
      - New env.ts: dotenv.config() + typed helpers (str/int/bool)
      - config.ts re-exports env for backward compatibility
      - index.ts imports env first to ensure .env loaded before anything else
      
      * refactor(sandbox): use zod for env validation and type coercion
      
      - Replace manual parseInt/str helpers with zod schema + coerce
      - Invalid env vars now fail fast with formatted error on startup
      - dotenv + zod, clean and declarative
      
      * chore(sandbox): remove unused process pool code
      
      - Delete pool.ts and pool.test.ts (pool was never wired into runners)
      - Remove PoolConfig/PooledProcess types
      - Remove pool env vars from env.ts
      - Clean up README
      
      * feat(sandbox): add concurrency limiter with semaphore
      
      - New Semaphore utility for max concurrent subprocess control
      - SANDBOX_MAX_CONCURRENCY env var (default 50)
      - Excess requests queue instead of spawning unbounded processes
      - Health endpoint exposes concurrency stats (current/queued/max)
      
      * test(sandbox): add semaphore tests and expand coverage to 292 cases
      
      - New semaphore.test.ts (11 tests): acquire/release, queuing, FIFO, stats, serial execution
      - JS runner: blank code, template literals, primitive returns, more modules, unicode, partial limits
      - Python runner: blank code, triple quotes, primitive returns, unicode, null vars, division errors
      - JS security: process.exit, globalThis, Symbol.unscopables, Proxy, dynamic import, path traversal
      - Python security: pickle/multiprocessing/threading/ctypes/signal, exec bypass, __subclasses__
      - Escape attacks: type() class creation, __builtins__ tampering, getattr access
      - Boundary: long vars, special JSON chars, float precision, big ints, circular refs, Promise.reject
      
      * test(sandbox): test-master review - add 31 tests, coverage report
      
      - base-runner.test.ts (10): BaseRunner precheck, temp dir, semaphore integration
      - semaphore-race.test.ts (5): race conditions, rapid acquire/release, stress test
      - coverage-gaps.test.ts (16): security coverage gaps found during review
      - REVIEW-REPORT.md: full test audit report
      
      Total: 323 passed, 0 failed
      
      * fix(sandbox): address PR #6439 review issues
      
      Security fixes:
      - Intercept Python builtins.open(), restrict file access to sandbox tmpdir
      - Remove unused pool.ts, warmup.mjs, warmup.py (security risk)
      - Fix DNS rebinding TOCTOU: use resolved IP for HTTP connections
      - Fix symlink path traversal: use realpath instead of normpath
      - Add try/finally cleanup for __import__ hook
      
      Robustness:
      - Add __SANDBOX_RESULT__ prefix to stdout parsing, prevent user output interference
      - Fix disk quota tracking: deduct old file size on overwrite
      - Add __import__() pattern scanning in Python precheck
      
      Tests:
      - Fix eval+__import__ test assertion (accept both catch and fail paths)
      
      All 323 tests passing.
      
      * fix(sandbox): remove warmup scripts COPY from Dockerfile
      
      * docs(sandbox): add technical design document
      
      * feat(sandbox): configurable module allowlist/blocklist via env vars
      
      - SANDBOX_JS_ALLOWED_MODULES: JS require whitelist (comma-separated)
      - SANDBOX_PYTHON_BLOCKED_MODULES: Python import blacklist (comma-separated)
      - Defaults unchanged, fully backward compatible
      
      * fix(sandbox): 修复多个安全漏洞
      
      1. Python HTTPS DNS rebinding: HTTPS 请求现在也使用 resolved IP 发起连接
      2. Python __import__ hook 恢复漏洞: 移除 finally 块中恢复原始 __import__ 的代码
      3. Python 内部变量泄露: 用户代码执行前删除 _os, _socket 等内部模块引用
      4. JS process 危险 API: 禁用 process.binding/dlopen/kill/chdir 等,冻结 process.env
      5. Python open() fd 绕过: 阻止通过整数文件描述符绕过路径检查
      6. API 输入校验: 使用 zod schema 校验请求体,限制代码大小 1MB
      7. 无认证警告: SANDBOX_TOKEN 未设置时输出生产环境警告
      
      新增 security-fixes.test.ts 包含所有修复的回归测试
      
      * test: consolidate security tests + add integration test suite
      
      - Merge 6 security test files into 1 consolidated security.test.ts (109 tests)
        - JS/Python module interception (precheck + runtime)
        - JS escape attacks (prototype, constructor, Reflect, globalThis)
        - Python escape attacks (__import__ hook, exec/eval, internal vars, __subclasses__)
        - SSRF protection (private IPs, cloud metadata, file protocol)
        - File system isolation (path traversal, fd, disk quota)
        - Variable injection attacks
        - API input validation
      
      - Add black-box integration test suite functional.test.ts (56 tests)
        - Basic operations (math, string, array, JSON, regex, Date, Promise, Map/Set)
        - Variable passing (string, number, complex objects, empty, multiple)
        - Whitelisted modules (crypto-js, moment, lodash)
        - SystemHelper/system_helper (fs, delay, strToBase64, httpRequest)
        - Error handling (syntax, runtime, undefined var, timeout)
        - Network requests (GET, POST)
        - Complex scenarios (CSV pipeline, recursion, class definition)
      
      - Remove 34 duplicate test cases across merged files
      - Total: 363 passed, 8 skipped (integration API tests need server)
      
      * fix(sandbox): z.record() zod v4 compatibility - add key type param
      
      * feat(sandbox): add .env.template with all config options and comments
      
      * refactor(sandbox): remove disk write support and temp filesystem
      
      * test(sandbox): remove all fs-related tests and add test case inventory
      
      - Remove fs read/write tests from unit, integration, boundary, examples
      - Remove path traversal, absolute path, open fd, builtins.open tests from security
      - Add comprehensive test/case.md with all 344 test cases categorized
      - All tests pass: 344 passed, 8 skipped, 0 failed
      
      * feat(sandbox): add GET /sandbox/modules API to list available packages and builtins
      
      * test(sandbox): add unit tests for GET /sandbox/modules API
      
      * refactor(test): rewrite api.test.ts to use app.request() - no external server needed
      
      * feat(sandbox): validate SANDBOX_TOKEN charset in env schema (ASCII printable only)
      
      * chore(sandbox): remove DESIGN.md and package-lock.json from PR
      
      * feat(sandbox): replace spawn-per-request with process pool architecture
      
      - Add ProcessPool (JS) and PythonProcessPool with long-lived worker processes
      - Workers communicate via stdin/stdout line-based JSON protocol
      - Pool size configurable via SANDBOX_POOL_SIZE env var (default 20)
      - Auto-respawn workers on crash
      - Semaphore-based queueing when requests exceed pool size
      
      Performance gains (simple functions):
      - JS: 22 QPS → 1,328 QPS (60x improvement)
      - Python: 14.7 QPS → 3,395 QPS (231x improvement)
      
      - Fix import.meta.dir compatibility for vitest (Node) environments
      - Export poolReady promise for test initialization
      - Add benchmark scripts to test/benchmark/
      - All 354 tests passing (12 test files)
      
      * chore(sandbox): clean up unused files, update README with pool architecture
      
      - Remove test/REVIEW-REPORT.md, test/case.md, test/benchmark.ts (obsolete)
      - Rewrite README: pool architecture diagram, performance benchmarks,
        SANDBOX_POOL_SIZE config, project structure, health endpoint format
      
      * fix(sandbox): 修复进程池超时后 worker respawn 竞态条件
      
      根因:超时 kill worker 后,exit 事件是异步的,release() 先执行时
      worker 还在列表里,死 worker 被放回 idle 池,后续请求发给死进程。
      
      修复:
      - 超时回调中先 removeWorker 再 kill,防止 release 归还死 worker
      - removeWorker 返回 bool,exit 事件中避免重复 respawn
      - 超时回调主动触发 spawnWorker 补充池
      - release 检查 worker 是否仍在池中
      - spawnWorker 完成时检查 waitQueue 直接分配
      
      * fix: security hardening & test migration to process pool
      
      - JS worker: harden process object (kill/chdir/env freeze/binding/dlopen)
      - Python worker: stack-frame based __import__ hook to block exec/eval bypass
      - Python worker: BuiltinsProxy to prevent __import__ override via builtins module
      - Python worker: restricted __builtins__ dict in exec_globals (no internal refs)
      - Python worker: restore __import__ before each execution
      - Migrate all 9 test files from JsRunner/PythonRunner to ProcessPool/PythonProcessPool
      - Configure vitest for serial execution (pool size=1, fileParallelism: false)
      - Fix security test assertion for builtins tampering (success=true with escaped=false)
      - All 102 security tests passing
      
      * docs(sandbox): update README with accurate benchmark data, remove non-existent features
      
      - Update performance table with latest benchmark results (JS 1414 QPS, Python 4247 QPS)
      - Remove SANDBOX_DISK_MB/SANDBOX_MAX_DISK_MB env vars (not implemented)
      - Remove SystemHelper.fs.* / system_helper.fs.* docs (not implemented in workers)
      - Fix security section to match actual implementation
      - Update test count to 351
      
      * refactor(sandbox): remove legacy runner/sandbox/template code
      
      - Delete src/runner/ (base.ts, js-runner.ts, python-runner.ts)
      - Delete src/sandbox/ (js-template.ts, python-template.ts, network-config.ts)
      - Delete test/unit/js-runner.test.ts, test/unit/python-runner.test.ts
      - Keep src/utils/semaphore.ts (generic utility, has its own tests)
      - Update README project structure and test count (297 cases)
      
      All functionality is now in src/pool/ (process-pool architecture).
      297 tests passing, 0 failures.
      
      * test(sandbox): add process pool lifecycle/respawn/concurrency tests
      
      - ProcessPool: init/shutdown/stats, worker crash respawn, timeout respawn,
        pool-full queuing, concurrent crash isolation
      - PythonProcessPool: init/shutdown/stats, timeout respawn, queuing
      - 14 new test cases, total 311 passing
      
      * fix(sandbox): ping/pong health check, replace httpbin.org with baidu.com
      
      - Worker health check: send actual ping message and verify pong response
        instead of only checking stdin.writable (detects stuck workers)
      - JS worker.ts: handle {type:'ping'} → reply {type:'pong'}
      - Python worker.py: handle {type:'ping'} → reply {type:'pong'}
      - ProcessPool/PythonProcessPool: rewrite pingWorker to send ping,
        wait for pong with timeout, replace worker on failure
      - Replace all httpbin.org URLs with www.baidu.com in tests
        (httpbin.org unreachable from China/Sealos Devbox)
      - Add 4 new health check tests (ping/pong for JS and Python pools)
      - All 318 tests passing, 0 failures
      
      * docs: add test report (test/README.md) and update README testing section
      
      - test/README.md: detailed report with 315 passed / 3 skipped / 0 failed
      - README.md: updated test section with coverage dimensions table and link to report
      
      * docs: add functional test cases checklist (110 cases)
      
      * fix(sandbox): fix Dockerfile Python env and import detection
      
      1. Dockerfile: Remove broken multi-stage Python 3.11 copy.
         - The previous approach copied python3 binary from python:3.11-alpine
           but missed libpython3.11.so.1.0, causing Python pool init failure.
         - Now uses system Python from apk and installs pip packages directly.
      
      2. worker.py: Fix false positive import blocking for third-party packages.
         - numpy/pandas were blocked because their internal 'import os' was
           detected as user-initiated (full stack scan found user code frames).
         - Changed to check only the direct caller frame: if the import comes
           from site-packages (third-party lib internals), allow it.
         - Direct user imports of blocked modules are still properly rejected.
      
      * fix(sandbox): block dynamic import() and restrict file system access
      
      Security fixes found during deep review:
      
      1. JS: Block import() dynamic imports that bypass require whitelist.
         - import('fs') could read arbitrary files on the container.
         - Added static regex check to reject code containing import().
      
      2. Python: Restrict open() to prevent user code from reading files.
         - open('/etc/passwd') was accessible from user code.
         - Added _restricted_open() that checks caller frame: only allows
           stdlib/site-packages internal calls, blocks user code (<string>).
      
      3. Python: Remove duplicate return statement in _safe_import.
      
      All 315 tests pass (3 skipped).
      
      * test(sandbox): add regression tests for import() and open() security fixes
      
      - JS: import('fs'), import('child_process'), import('os') blocked
      - JS: string containing 'import' not false-positive
      - Python: open('/etc/passwd'), open('/proc/self/environ'), open('/tmp/evil.txt', 'w') blocked
      - Python: numpy internal open() not affected (conditional on numpy availability)
      
      Total: 322 passed | 3 skipped (was 315 passed)
      
      * docs(sandbox): rewrite sandbox documentation with JS + Python coverage
      
      - Add Python language support documentation
      - Add httpRequest/http_request function docs
      - Add available modules list (JS whitelist + Python safe modules)
      - Add security restrictions section
      - Add practical examples (data processing, date calc, webhook signing)
      - Add JS/Python function name mapping table
      
      * docs(sandbox): use SystemHelper/system_helper for built-in functions
      
      Direct calls (countToken, delay, etc.) are deprecated (kept for compat).
      All examples now use SystemHelper.xxx() / system_helper.xxx().
      
      * docs(sandbox): Python only show named-params style as recommended
      
      * feat(sandbox): unify Python SystemHelper API with camelCase aliases
      
      - Add camelCase aliases to Python SystemHelper: countToken, strToBase64,
        createHmac, httpRequest (matching JS API exactly)
      - Update docs to use SystemHelper uniformly for both JS and Python
      - snake_case methods (count_token, etc.) still work for backward compat
      
      * feat(sandbox): add matplotlib and increase HTTP timeout to 60s
      
      - Add matplotlib to Python dependencies
      - Increase HTTP request timeout from 10s to 60s (both JS and Python)
      - Update docs accordingly
      
      * docs(sandbox): split docs for old/new sandbox versions
      
      - sandbox.mdx → '代码运行(旧版)' for FastGPT ≤ 4.14.7 (URL unchanged)
      - sandbox-v5.mdx → '代码运行' for FastGPT ≥ 4.14.8
      - Both pages cross-link to each other
      - meta.json updated: sandbox-v5 listed before sandbox
      
      * docs: rename old sandbox doc to 代码运行(弃)
      
      * refactor(sandbox): remove SANDBOX_TIMEOUT, use SANDBOX_MAX_TIMEOUT as unified timeout
      
      * fix(sandbox): add build dependencies for matplotlib in Dockerfile
      
      * refactor(sandbox): migrate Python from blocklist to allowlist for module control
      
      - Change SANDBOX_PYTHON_BLOCKED_MODULES to SANDBOX_PYTHON_ALLOWED_MODULES
      - Update Python worker to use allowlist instead of blocklist
      - Add comprehensive safe module list: math, json, datetime, numpy, pandas, etc.
      - Improve error message: 'Module X is not in the allowlist'
      - Consistent with JS allowlist approach for better security
      
      * fix(sandbox): add _strptime to allowlist and update test assertions
      
      - Add _strptime module (required by datetime.strptime)
      - Update test assertions for Python module import errors
      - All 325 tests now pass (322 passed, 3 skipped)
      
      * fix(docs): center SVG icon in size-5 container on medium screens
      
      * docs(sandbox): simplify built-in functions and improve module documentation
      
      - Remove delay, countToken, strToBase64, createHmac functions (keep only httpRequest)
      - Convert Python module list to table format (10 tables by category)
      - Reorganize usage examples with collapsible sections (JS and Python)
      - Fix icon alignment in desktop/mobile sidebar navigation
      - All 325 tests passing
      
      ---------
      
      Co-authored-by: Lobster 3 <lobster3@sandbox.dev>
      Co-authored-by: OpenClaw Bot <bot@openclaw.ai>
      Co-authored-by: Archer <c121914yu@gmail.com>
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      
      * perf: code sandbox
      
      * update action
      
      * Update projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      
      * update timeout
      
      * update memory limit function
      
      * sandbox
      
      * perf: process poll
      
      * env template
      
      * feat: code tip
      
      * fix: code sandbox error tip
      
      * update memory limit fn
      
      * update memory limit fn
      
      * fix: test
      
      * fix: test
      
      * fix: sandbox
      
      ---------
      
      Co-authored-by: Archer <archer@fastgpt.io>
      Co-authored-by: Lobster 3 <lobster3@sandbox.dev>
      Co-authored-by: OpenClaw Bot <bot@openclaw.ai>
      Co-authored-by: Archer <c121914yu@gmail.com>
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      Archer committed
  14. 26 Feb, 2026 6 commits
    • feat(docs): add analytics tracking script support (#6473) · 544faf6a
      * feat(docs): add analytics tracking script support
      
      - Add tracking script injection in document layout
      - Support separate site IDs for CN and IO domains
      - Add build-time environment variables for tracking config
      - Requires GitHub secrets: DOC_TRACK_SRC, DOC_TRACK_CN, DOC_TRACK_IO
      
      * fix(docs): simplify tracking to single site ID per build
      
      ---------
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Archer committed
    • docs(i18n): translate final 9 files in introduction directory (#6471) · 4b244721
      * docs(i18n): translate batch 1
      
      * docs(i18n): translate batch 2
      
      * docs(i18n): translate batch 3 (20 files)
      
      - openapi/: app, share
      - faq/: all 8 files
      - use-cases/: index, external-integration (5 files), app-cases (4 files)
      
      Translated using North American style with natural, concise language.
      Preserved MDX syntax, code blocks, images, and component imports.
      
      * docs(i18n): translate protocol docs
      
      * docs(i18n): translate introduction docs (part 1)
      
      * docs(i18n): translate use-cases docs
      
      * docs(i18n): translate introduction docs (part 2 - batch 1)
      
      * docs(i18n): translate final 9 files
      
      * fix(i18n): fix YAML and MDX syntax errors in translated files
      
      - Add quotes to description with colon in submit_application_template.en.mdx
      - Remove duplicate Chinese content in translate-subtitle-using-gpt.en.mdx
      - Fix unclosed details tag issue
      
      * docs(i18n): translate all meta.json navigation files
      
      * fix(i18n): translate Chinese separators in meta.en.json files
      
      * translate
      
      * translate
      
      * i18n
      
      ---------
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Co-authored-by: archer <545436317@qq.com>
      Archer committed
    • deploy version (#6470) · e9eca2f8
      Archer committed
    • fix: sse response (#6468) · 2f7427e1
      Archer committed
    • feat(i18n): Fix language loss in navigation and add language selector (#6467) · 2fd4b603
      * feat(docs): enable i18n language selector
      
      * docs(i18n): translate introduction page to English
      
      * fix(i18n): fix language switching issue by always showing locale prefix
      
      * fix(docs): use relative paths for internal links to preserve language
      
      * refactor(i18n): add getLocalizedPath helper to simplify URL generation
      
      * refactor(i18n): make getLocalizedPath respect hideLocale config
      
      * feat(i18n): fallback to default language when translation missing, keep URL unchanged
      
      * feat(i18n): fix language loss in navigation and add language selector
      
      - Set hideLocale to 'never' to always show language prefix
      - Add localized-navigation.ts with useLocalizedRouter hook
      - Update all navigation points to preserve language:
        1. Tab navigation (already using getLocalizedPath)
        2. Sidebar navigation (handled by Fumadocs)
        3. Home/404 redirects (using getLocalizedPath)
        4. MDX Redirect component (using useLocalizedRouter)
        5. Old page redirects (updated not-found.tsx)
        6. Document links (custom LocalizedLink component)
      - Configure language selector in layout.config.tsx
      - Add LOCALIZED_NAVIGATION.md documentation
      
      * fix(i18n): fix type errors and useEffect dependencies
      
      * refactor(i18n): move redirects to middleware for SSR support
      
      - Move old path redirects from client-side (not-found.tsx) to server-side (middleware.ts)
      - Use 301 permanent redirects for better SEO
      - Preserve language prefix in redirects
      - Fix SSR issue caused by client-side redirects
      
      * refactor(i18n): clean up not-found.tsx, remove duplicate redirect maps
      
      - Remove duplicate exactMap and prefixMap (now in middleware)
      - Keep dynamic meta.json lookup for unknown pages
      - Simplify to only handle fallback cases
      - Two-layer approach: middleware (SSR) + not-found (dynamic)
      
      * refactor(i18n): simplify not-found to always redirect to introduction
      
      - Remove dynamic meta.json lookup
      - Always redirect to introduction page on 404
      - Ensures no 404 pages are shown
      - Keep language prefix in redirect
      
      * fix(i18n): fix middleware type error with ts-expect-error
      
      - Add @ts-expect-error for Fumadocs middleware signature mismatch
      - Fix syntax error in config matcher (remove literal \n)
      
      ---------
      
      Co-authored-by: archer <archer@archerdeMac-mini.local>
      Archer committed
    • fix(i18n): optimize English translations for product-appropriate language (#6466) · 616ac031
      * fix(i18n): optimize English translations for product-appropriate language
      
      - Add 51 missing translation keys across 9 files
      - Rewrite 69 literal/unnatural translations to product language
      - Remove 3 orphaned keys not in source
      - Ensure all 22 locale files pass structural validation
      - Key improvements:
        - FAQ section: clearer, more concise answers
        - Dataset: 'Block' → 'Chunk', natural phrasing
        - App: better error messages and descriptions
        - Common: consistent terminology throughout
      
      * Update packages/web/i18n/en/dataset.json
      
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      
      ---------
      
      Co-authored-by: OpenClaw Bot <bot@openclaw.ai>
      Co-authored-by: Archer <545436317@qq.com>
      Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
      Archer committed