<?xml version="1.0" encoding="UTF-8"?>
<config>
    <bean class="com.gzzm.lobster.config.LobsterConfig" factory="instance">
        <maxTurnsPerRun>30</maxTurnsPerRun>
        <defaultContextBudgetTokens>100000</defaultContextBudgetTokens>
        <llmTurnTimeoutMs>120000</llmTurnTimeoutMs>
        <perUserConcurrentRunLimit>3</perUserConcurrentRunLimit>
        <perThreadConcurrentRunLimit>1</perThreadConcurrentRunLimit>

        <summarizerEnabled>false</summarizerEnabled>
        <summarizerMaxInputChars>24000</summarizerMaxInputChars>

        <memoryMaxContentLen>500</memoryMaxContentLen>
        <memoryWriteLimitPerMin>20</memoryWriteLimitPerMin>
        <toolRateLimitPerMin>60</toolRateLimitPerMin>
        <listDefaultPageSize>20</listDefaultPageSize>
        <listMaxPageSize>200</listMaxPageSize>
        <adminRoleName>ai_admin</adminRoleName>
        <apiKeyMaskTailLen>4</apiKeyMaskTailLen>

        <!-- Default to the built-in mock so Docker startup is self-contained.
             For real KB, replace with http://host.docker.internal:8900/api/v1/lobster-kb
             or a Compose service URL such as http://zm-rag:8900/api/v1/lobster-kb. -->
        <oaKnowledgeBaseUrl>http://192.168.1.13:8900/api/v1/lobster-kb</oaKnowledgeBaseUrl>

        <oaKnowledgeApiKey>dev-lobster-kb-key</oaKnowledgeApiKey>
        <kbForcedInjectMaxHits>10</kbForcedInjectMaxHits>

        <llmTraceEnabled>true</llmTraceEnabled>
        <llmTraceMaxMessageChars>0</llmTraceMaxMessageChars>
        <contentStoreBase>/home/app/lobster</contentStoreBase>

        <uploadMaxBytes>52428800</uploadMaxBytes>
        <uploadInlineMaxChars>4000</uploadInlineMaxChars>
        <parsedMarkdownMaxChars>80000</parsedMarkdownMaxChars>
        <xlsxInlineRowLimit>500</xlsxInlineRowLimit>
        <outlineFoldThreshold>500</outlineFoldThreshold>
        <pdfBookmarkMaxDepth>3</pdfBookmarkMaxDepth>

        <sandboxImage>lobster-sandbox:py3.11-office-v4</sandboxImage>
        <sandboxDockerBin>docker</sandboxDockerBin>
        <sandboxDefaultTimeoutSec>30</sandboxDefaultTimeoutSec>
        <sandboxMaxTimeoutSec>120</sandboxMaxTimeoutSec>
        <sandboxMemoryMb>512</sandboxMemoryMb>
        <sandboxCpus>0.5</sandboxCpus>
        <sandboxPidsLimit>128</sandboxPidsLimit>
        <sandboxOutputMaxBytes>52428800</sandboxOutputMaxBytes>
        <sandboxCodeMaxBytes>65536</sandboxCodeMaxBytes>
        <sandboxRatePerMinute>10</sandboxRatePerMinute>

        <sandboxPoolEnabled>true</sandboxPoolEnabled>
        <sandboxPoolSize>3</sandboxPoolSize>
      <sandboxPoolRoot>/srv/sandbox/pool</sandboxPoolRoot>
      
        <sandboxWorkDir>/srv/sandbox</sandboxWorkDir>
        <sandboxBundleCacheDir>/var/cache/lobster/skill-bundles</sandboxBundleCacheDir>
        <sandboxBundleCacheMaxEntries>64</sandboxBundleCacheMaxEntries>
        <sandboxBundleCacheMaxBytes>2147483648</sandboxBundleCacheMaxBytes>
        <sandboxInputMaxBytes>20971520</sandboxInputMaxBytes>
        <sandboxInputTotalMaxBytes>104857600</sandboxInputTotalMaxBytes>
        <sandboxInputMaxFiles>20</sandboxInputMaxFiles>
        <sandboxUid>10001</sandboxUid>

        <systemSandboxSkillDir>WEB-INF/lobster/deploy/skills</systemSandboxSkillDir>
        <systemGuidanceSkillDir>WEB-INF/lobster/skills</systemGuidanceSkillDir>
        <sandboxInstalledPackagesFile>WEB-INF/lobster/sandbox-installed-packages.json</sandboxInstalledPackagesFile>
        <sandboxRequireInstalledPackagesFile>true</sandboxRequireInstalledPackagesFile>
    </bean>
</config>
