limixbot 0.2.12 → 0.3.1

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 (136) hide show
  1. package/dist/assets/{ActivityPanel-BHCUppbs.js → ActivityPanel-O6Su2c-u.js} +1 -1
  2. package/dist/assets/{App-D93hKk8l.js → App-Bcey1qup.js} +108 -108
  3. package/dist/assets/{AppEventEditor-tGh5VM2Z.js → AppEventEditor-BlJGPJ3Z.js} +1 -1
  4. package/dist/assets/{BotSettingsDialog-D6Y7Bflm.js → BotSettingsDialog-PiCk9us7.js} +4 -4
  5. package/dist/assets/{BrowserPanel-k55-4cIw.js → BrowserPanel-BWcb5CXi.js} +1 -1
  6. package/dist/assets/{BrowserProfilesManager-BRZM0q_M.js → BrowserProfilesManager-dKHyQotG.js} +1 -1
  7. package/dist/assets/{CloudAddDialog-BZQDNnKi.js → CloudAddDialog-D1ZSbkxV.js} +1 -1
  8. package/dist/assets/{ComputerFilesPane-DAQhcfSG.js → ComputerFilesPane-wgtikCgi.js} +1 -1
  9. package/dist/assets/{ComputerPanel-ExjbTj4s.js → ComputerPanel-Cyj53a7W.js} +2 -2
  10. package/dist/assets/{DataPanel-DRPDfcrQ.js → DataPanel-BlBidswi.js} +1 -1
  11. package/dist/assets/{DesktopViewer-D9jr2w9X.js → DesktopViewer-D7JeLJbi.js} +1 -1
  12. package/dist/assets/{FilesView-CplahKQt.js → FilesView-CNkEKeZB.js} +1 -1
  13. package/dist/assets/{GrokMoveDialog-Cc5o6HuE.js → GrokMoveDialog-fyBulzXL.js} +2 -2
  14. package/dist/assets/{InspectorPanel-B5iY0Ism.js → InspectorPanel-Cut2OqiB.js} +1 -1
  15. package/dist/assets/{KeyboardShortcutsModal-DhUpWvIZ.js → KeyboardShortcutsModal-DnxUB4cd.js} +1 -1
  16. package/dist/assets/{LiveDesktop-DRcJOYg3.js → LiveDesktop-CnbyXW61.js} +1 -1
  17. package/dist/assets/{LocalVmWorkspace-CrRyugwl.js → LocalVmWorkspace-D9xFPGF0.js} +1 -1
  18. package/dist/assets/{MacLocalControl-D2pf75xx.js → MacLocalControl-CpswtfCI.js} +1 -1
  19. package/dist/assets/{MarkdownFilePreview-CLYypRvz.js → MarkdownFilePreview-V-y-0ksi.js} +1 -1
  20. package/dist/assets/{MenuMotion-CNjHVOE4.js → MenuMotion-VeZ_fZ8M.js} +1 -1
  21. package/dist/assets/NewBotDialog-rBjsSV0e.js +1 -0
  22. package/dist/assets/{PhoneAppDialog-EKN4JV-B.js → PhoneAppDialog-DAW1N-hM.js} +1 -1
  23. package/dist/assets/{PlacesRail-eySktVNq.js → PlacesRail-C_3Mh4C8.js} +1 -1
  24. package/dist/assets/{PluginsPanel-D8Kw3j_E.js → PluginsPanel-CMsgWSNg.js} +1 -1
  25. package/dist/assets/{ProIntroduction-Dutut6C-.js → ProIntroduction-6ByF2_US.js} +1 -1
  26. package/dist/assets/{RemoteAgentSettingsPanel-BuNfrHcn.js → RemoteAgentSettingsPanel-D4X4rHMQ.js} +1 -1
  27. package/dist/assets/{RoomPanel-vlOHVr2o.js → RoomPanel-mg6M04wy.js} +1 -1
  28. package/dist/assets/{RoutinesPage-Dgl6g38a.js → RoutinesPage-DomuZMUT.js} +2 -2
  29. package/dist/assets/{SettingsModal-B6mWaU4-.js → SettingsModal-Dd9l0b2C.js} +1 -1
  30. package/dist/assets/{ShareTeamDialog-BNMxpMeG.js → ShareTeamDialog-B_0Gr8Mq.js} +1 -1
  31. package/dist/assets/{SignedInSites-rqBhWQLe.js → SignedInSites-C-eqeBxT.js} +1 -1
  32. package/dist/assets/TeamLibraryPanel-DpXOFOQr.js +1 -0
  33. package/dist/assets/{TeamMapPage-BPNPSuOR.js → TeamMapPage-CIQPYaxL.js} +1 -1
  34. package/dist/assets/{TriggersPage--eDtuNSl.js → TriggersPage-D7RDjrjV.js} +1 -1
  35. package/dist/assets/{VisibilitySection-BCqfMHFk.js → VisibilitySection-Bimhk6c5.js} +1 -1
  36. package/dist/assets/{WebhookTrigger-AXmqIpLx.js → WebhookTrigger-D5c2bPJu.js} +1 -1
  37. package/dist/assets/{WorksOnGrid-IvyvcWBI.js → WorksOnGrid-PZ-caKHg.js} +1 -1
  38. package/dist/assets/{abnfDiagram-YUKMZFIV-CNbBpzNE.js → abnfDiagram-YUKMZFIV-D7az-C1J.js} +1 -1
  39. package/dist/assets/{activity-CtCHrNz-.js → activity-W_ia4q-Y.js} +1 -1
  40. package/dist/assets/{architectureDiagram-47P4ROYG-BZ3BXsFv.js → architectureDiagram-47P4ROYG-B2IC9169.js} +1 -1
  41. package/dist/assets/{blockDiagram-E7TT5TSB-9DpYtThS.js → blockDiagram-E7TT5TSB-FnweBzU4.js} +1 -1
  42. package/dist/assets/{c4Diagram-CRA5TL53-C9ygyYDI.js → c4Diagram-CRA5TL53-rxgwSaAP.js} +1 -1
  43. package/dist/assets/{calendar-days-7b_rKY9F.js → calendar-days-wM1DS-Cu.js} +1 -1
  44. package/dist/assets/channel-BQyC_QMX.js +1 -0
  45. package/dist/assets/{chunk-2Q5K7J3B-DXA1dGYf.js → chunk-2Q5K7J3B-B7yhqEe8.js} +1 -1
  46. package/dist/assets/{chunk-5VM5RSS4-Cmdn6u6A.js → chunk-5VM5RSS4-Sw6phnaf.js} +1 -1
  47. package/dist/assets/{chunk-7TKQ45FW-C6_3KbD6.js → chunk-7TKQ45FW-CheglUSd.js} +1 -1
  48. package/dist/assets/{chunk-AW2ZBBNX-DE_9xcGW.js → chunk-AW2ZBBNX-CswkqPkf.js} +1 -1
  49. package/dist/assets/{chunk-FVRAUYC3-DeXezLUR.js → chunk-FVRAUYC3-DeN53o4S.js} +2 -2
  50. package/dist/assets/{chunk-HTAEGDNF-WoJSboze.js → chunk-HTAEGDNF-CCZ_Udf0.js} +1 -1
  51. package/dist/assets/{chunk-JWPE2WC7-BarwLFEj.js → chunk-JWPE2WC7-nG1rfC9P.js} +1 -1
  52. package/dist/assets/{chunk-KQW6MTUR-DZV0Hgcq.js → chunk-KQW6MTUR-Bh_TxL0e.js} +1 -1
  53. package/dist/assets/{chunk-XXDRQBXY-XRA7d5ef.js → chunk-XXDRQBXY-CLIJBS-V.js} +1 -1
  54. package/dist/assets/{classDiagram-v2-K4WV4PDN-BB9-8H0H.js → classDiagram-v2-K4WV4PDN-B04FntQx.js} +1 -1
  55. package/dist/assets/{coins-RZxks5Iq.js → coins-81htcDNx.js} +1 -1
  56. package/dist/assets/{core-CNxiO5i6.js → core-BLAzrox0.js} +1 -1
  57. package/dist/assets/{cose-bilkent-JH36ORCC-DlAty1qX.js → cose-bilkent-JH36ORCC-D9PAieWF.js} +1 -1
  58. package/dist/assets/{cynefin-EF2NZ3EQ-DjVt4mTB.js → cynefin-EF2NZ3EQ-BAC2DRg5.js} +1 -1
  59. package/dist/assets/{cynefinDiagram-3GCD6N5R-BP3mxzbM.js → cynefinDiagram-3GCD6N5R-Cc3k_C-5.js} +1 -1
  60. package/dist/assets/{dagre-W4DXFKR2-D6R89cka.js → dagre-W4DXFKR2-CpbzxBGo.js} +1 -1
  61. package/dist/assets/{diagram-2UJZ2QOL-ED6ZLR9P.js → diagram-2UJZ2QOL-d22NGVzG.js} +1 -1
  62. package/dist/assets/{diagram-OVF4WLC6-DS5DPgfj.js → diagram-OVF4WLC6-BFTJTNpN.js} +1 -1
  63. package/dist/assets/{diagram-PFPMY2P6-CkwWFUys.js → diagram-PFPMY2P6-CA_YgAo3.js} +1 -1
  64. package/dist/assets/{diagram-UMYRVEAY-B6_INDe2.js → diagram-UMYRVEAY-CCsuWndY.js} +1 -1
  65. package/dist/assets/{diagram-YEKJPTXX-Dt30zl92.js → diagram-YEKJPTXX-Bcwhmpgl.js} +1 -1
  66. package/dist/assets/{diagram-ZIFT7M5P-BWQrszzW.js → diagram-ZIFT7M5P-Bs1iIjhq.js} +1 -1
  67. package/dist/assets/{ebnfDiagram-VR2GEFS7-B40bZpn4.js → ebnfDiagram-VR2GEFS7-CFr96fLM.js} +1 -1
  68. package/dist/assets/{elk-IJKZMXRS-BOAPURLs.js → elk-IJKZMXRS-DSdTG_hW.js} +1 -1
  69. package/dist/assets/{erDiagram-O2IAPWRE-DhIN8EFk.js → erDiagram-O2IAPWRE-BGdMdwi1.js} +1 -1
  70. package/dist/assets/{file-up-Dg7JsLFP.js → file-up-DvGMRF5I.js} +1 -1
  71. package/dist/assets/{flowDiagram-OXPTDLAJ-o61yZ5Jp.js → flowDiagram-OXPTDLAJ-DL25A20O.js} +1 -1
  72. package/dist/assets/{ganttDiagram-R7TSEDQI-DKwTsk_A.js → ganttDiagram-R7TSEDQI-DQaNIRGv.js} +1 -1
  73. package/dist/assets/{gitGraphDiagram-XJZIOB7I-Dqte4h2a.js → gitGraphDiagram-XJZIOB7I-B6ypA1ZF.js} +1 -1
  74. package/dist/assets/{import-name-BpcY7eF3.js → import-name-Cdh9ZlkK.js} +1 -1
  75. package/dist/assets/{index-y3wal1WK.js → index-BaW02tJl.js} +1 -1
  76. package/dist/assets/{index-Df4sIScD.js → index-CxcnLo81.js} +1 -1
  77. package/dist/assets/{index-CN3qYQZ7.js → index-oVds-_Vz.js} +2 -2
  78. package/dist/assets/{infoDiagram-5W2HQ5XZ-CeOhDqP5.js → infoDiagram-5W2HQ5XZ-8YbtI4S4.js} +1 -1
  79. package/dist/assets/{ishikawaDiagram-K3B6WC7H-BLxBG4Ku.js → ishikawaDiagram-K3B6WC7H-DYpDWk2K.js} +1 -1
  80. package/dist/assets/{journeyDiagram-COXZFDF6-a7-OqFVb.js → journeyDiagram-COXZFDF6-BUd8Vnbq.js} +1 -1
  81. package/dist/assets/{kanban-definition-P3RFRI5V-BpqE9wv9.js → kanban-definition-P3RFRI5V-AywqsEBB.js} +1 -1
  82. package/dist/assets/{mcp-servers-Cb7NFF4i.js → mcp-servers-Bu5RuYBT.js} +1 -1
  83. package/dist/assets/{mermaid.core-DCkDS2l6.js → mermaid.core-B5yiNmEY.js} +4 -4
  84. package/dist/assets/{mindmap-definition-LZFPQGKD-CbVxI-Dw.js → mindmap-definition-LZFPQGKD-DRALSCg6.js} +1 -1
  85. package/dist/assets/{minimize-BzhEcU2C.js → minimize-CWsi9mRL.js} +1 -1
  86. package/dist/assets/{monitor-tq9gQZRc.js → monitor-c1mf38zt.js} +1 -1
  87. package/dist/assets/{new-bot-FZ7p0MaB.js → new-bot-mp2gi3ed.js} +1 -1
  88. package/dist/assets/{org-library-BurlfP-M.js → org-library-Bi3EieNo.js} +1 -1
  89. package/dist/assets/{package-format-B2CMS446.js → package-format-CaPiTXn3.js} +1 -1
  90. package/dist/assets/{pegDiagram-BGZESJAR-JzbTYrpF.js → pegDiagram-BGZESJAR-Drj_UJz5.js} +1 -1
  91. package/dist/assets/{pieDiagram-CAPJLFHJ-FJGAn2CJ.js → pieDiagram-CAPJLFHJ-CL7MryRt.js} +1 -1
  92. package/dist/assets/{quadrantDiagram-GDMTTRAM-BH0XP_4R.js → quadrantDiagram-GDMTTRAM-BvWxqPJn.js} +1 -1
  93. package/dist/assets/{rail-Cq1USSn9.js → rail-DApFzTxo.js} +1 -1
  94. package/dist/assets/{railroadDiagram-SM67HX2B-DdmOm9v7.js → railroadDiagram-SM67HX2B-CGfR0UsO.js} +1 -1
  95. package/dist/assets/{remote-desktop-panel-ByjBIDKD.js → remote-desktop-panel-B4uIIoh3.js} +1 -1
  96. package/dist/assets/{requirementDiagram-X7JNWC4A-CmHsqVU3.js → requirementDiagram-X7JNWC4A-CJq96anP.js} +1 -1
  97. package/dist/assets/{sankeyDiagram-UM26HJRW-20UkT1qC.js → sankeyDiagram-UM26HJRW-BdZSA65i.js} +1 -1
  98. package/dist/assets/{sequenceDiagram-ZO4K6R2Y-DbOCvva9.js → sequenceDiagram-ZO4K6R2Y-B5W6udgn.js} +1 -1
  99. package/dist/assets/{sizeCapture-INFHLROL-BiRygHwv.js → sizeCapture-INFHLROL-CuKCNVLn.js} +1 -1
  100. package/dist/assets/{stateDiagram-v2-TBUQTH76-_b0RTe98.js → stateDiagram-v2-TBUQTH76-C7mAgpvB.js} +1 -1
  101. package/dist/assets/{styles-b2tBrp-F.js → styles-C_rlkDrt.js} +2 -2
  102. package/dist/assets/styles-bUbK33f1.css +1 -0
  103. package/dist/assets/{swimlanes-N4OXWK64-Cph2675B.js → swimlanes-N4OXWK64-D-mimAU7.js} +1 -1
  104. package/dist/assets/swimlanesDiagram-K3J5GTZL-Dn31PG7h.js +8 -0
  105. package/dist/assets/{team-share-BegoEw7-.js → team-share-wuAG66b7.js} +1 -1
  106. package/dist/assets/{timeline-definition-YOQAKGHF-2fj61Rzb.js → timeline-definition-YOQAKGHF-C5prnOXi.js} +1 -1
  107. package/dist/assets/{usecaseDiagram-VIAY4XPW-Cfx3YEF_.js → usecaseDiagram-VIAY4XPW-BC-9KKSF.js} +1 -1
  108. package/dist/assets/{vennDiagram-BLWOH2XV-BX_M6eTv.js → vennDiagram-BLWOH2XV-LCNTQN9e.js} +1 -1
  109. package/dist/assets/{vi-KgT8L8Qj.js → vi-NX09tr5q.js} +1 -1
  110. package/dist/assets/{wardleyDiagram-YMQ3BMBF-BfDn4ghH.js → wardleyDiagram-YMQ3BMBF-CtWGEzVU.js} +1 -1
  111. package/dist/assets/{xychartDiagram-TAQBALBS-CqrDBgpf.js → xychartDiagram-TAQBALBS-DadPRdBp.js} +1 -1
  112. package/dist/index.html +3 -3
  113. package/dist/rail.html +5 -5
  114. package/dist-server/container-mcp.js +22 -21
  115. package/dist-server/index.js +106 -105
  116. package/dist-server/openmausbot.js +24 -24
  117. package/dist-server/package.json +1 -1
  118. package/dist-server/pair-cli.js +24 -24
  119. package/dist-server/server/config.js +6 -1
  120. package/dist-server/server/container-computer.js +4 -4
  121. package/dist-server/server/host/team-connections-host.js +2 -2
  122. package/dist-server/server/index.js +20 -3
  123. package/dist-server/server/mcp-registry.js +2 -2
  124. package/dist-server/server/service-unit.js +1 -1
  125. package/dist-server/server/skill-library.js +1 -1
  126. package/dist-server/server/team-library.js +2 -2
  127. package/dist-server/shared/grok-import.js +1 -1
  128. package/dist-server/shared/package-format.js +3 -3
  129. package/dist-server/vps-container-mcp.js +22 -21
  130. package/dist-server/workspace-backup.worker.js +20 -20
  131. package/package.json +1 -1
  132. package/dist/assets/NewBotDialog-CuYIfLJL.js +0 -1
  133. package/dist/assets/TeamLibraryPanel-pCffPnk4.js +0 -1
  134. package/dist/assets/channel-CkUESPbF.js +0 -1
  135. package/dist/assets/styles-D-yh7Z23.css +0 -1
  136. package/dist/assets/swimlanesDiagram-K3J5GTZL-DqgQUDUL.js +0 -8
@@ -1881,29 +1881,29 @@ init_mcp_registry();init_connection();init_schema();init_config();init_live_conf
1881
1881
  MIN_MCP_CALL_TIMEOUT_MINUTES=1,MAX_MCP_CALL_TIMEOUT_MINUTES=60,MIN_THREAD_EVENT_LOG_BYTES=256*1024,MAX_THREAD_EVENT_LOG_BYTES=4*1024*1024*1024;vpsConfigSchema=external_exports.object({sshAlias:external_exports.string().refine(value=>value===""||isValidSshAlias(value),{message:"must be a simple SSH config alias"}).optional()}),roomConfigSchema=external_exports.object({turnTimeoutMinutes:external_exports.number().int().min(MIN_ROOM_TURN_TIMEOUT_MINUTES).max(MAX_ROOM_TURN_TIMEOUT_MINUTES)}),mcpConfigSchema=
1882
1882
  external_exports.object({callTimeoutMinutes:external_exports.number().int().min(MIN_MCP_CALL_TIMEOUT_MINUTES).max(MAX_MCP_CALL_TIMEOUT_MINUTES).optional()}).strict(),browserProfileSchema=external_exports.object({id:external_exports.string().regex(BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved"),name:external_exports.string().trim().min(1).max(40),browser:external_exports.literal("chrome").optional()}).strict(),legacyBrowserProfileSchema=external_exports.object({id:external_exports.
1883
1883
  string().regex(LEGACY_BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved"),name:external_exports.string().trim().min(1).max(40),partitionId:external_exports.string().regex(LEGACY_BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved").optional(),browser:external_exports.literal("chrome").optional()}).strict();legacyBrowserProfilesSchema=external_exports.array(legacyBrowserProfileSchema).max(20),storedBrowserProfilesSchema=legacyBrowserProfilesSchema.transform(profiles=>migrateStoredBrowserProfiles(
1884
- profiles).profiles),browserProfilesSchema=external_exports.array(browserProfileSchema).max(20).superRefine((profiles,ctx)=>{let seen=new Set;profiles.forEach((profile,index2)=>{if(!seen.has(profile.id)){seen.add(profile.id);return}ctx.addIssue({code:"custom",path:[index2,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillReviewSteps:external_exports.
1885
- number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),sharedComputers:external_exports.boolean().optional(),claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().optional(),skillsLibrary:external_exports.boolean().
1886
- optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),parallelRoomJobs:external_exports.boolean().optional(),acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().trim().max(40).optional(),version:external_exports.
1887
- number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kind",[external_exports.object({kind:external_exports.
1888
- literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.string()}).strict().refine(icon2=>providerIconError(icon2)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.boolean().optional(),access:external_exports.
1889
- enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),defaultModelSelectionSchema=external_exports.object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,"invalid model variant").optional()}).
1890
- refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.boolean(),backup:defaultModelSelectionSchema.optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.boolean(),windowMinutes:external_exports.
1891
- number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),eventLogMaxBytes:external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.enum(EFFORT_LEVELS).optional()}).
1892
- strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.shape.maxConcurrentPerBot.optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().optional(),signIn:external_exports.
1893
- object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),defaultModelSelection:defaultModelSelectionSchema.optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.object({access:external_exports.enum(
1894
- ["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.object({key:optionalText2}).optional(),cerebras:external_exports.object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object({key:optionalText2,url:optionalText2}).
1895
- optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,url:optionalText2}).optional(),deepseek:external_exports.object({key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.boolean().optional()}).optional(),
1896
- openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.number().min(0).max(1e6).optional(),warnAtPercent:external_exports.number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().min(1).max(160),external_exports.
1897
- object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).optional()})).optional()}).optional(),openaiCompat:external_exports.object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),box:external_exports.object({token:optionalText2}).
1898
- optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.string()).optional()}).optional(),tts:external_exports.object({key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.string().trim().max(2048).refine(value=>!value||
1899
- /^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).optional(),everyReply:external_exports.boolean().optional()}).optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object({name:optionalText2,email:optionalText2,aboutMe:external_exports.
1900
- string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,computerName:external_exports.string().trim().max(63).optional(),rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).extend(roomContextSettings).extend(replaySettings).optional(),
1901
- memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.
1902
- optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=
1903
- appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.
1904
- optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.record(external_exports.string(),external_exports.json());DEFAULT_CAPTURE_QUIET_MS=2*6e4,DATA_DIR=process.env.OMB_DATA_DIR||join16(dataHome(),".limixbot"),LEGACY_DATA_DIR=join16(dataHome(),".opengrokbot"),EVENTS_DIR=join16(DATA_DIR,"events"),NATIVE_DIR=join16(DATA_DIR,"native"),lastIgnoredConfigWarning="",storedConfig=settledFileCache(()=>join16(DATA_DIR,"config.json"),()=>parseStoredConfig(
1905
- parseJson(readFileSync9(join16(DATA_DIR,"config.json"),"utf8"))));OPENCODE_PROVIDER_KEY_LIMIT=20,OPENCODE_PROVIDER_KEY_NAME=/^[A-Z][A-Z0-9_]{0,59}_(?:API_KEY|KEY|TOKEN)$/,OPENCODE_PROVIDER_KEY_VALUE=/^[\x21-\x7e]{1,4096}$/;configSaveListeners=new Set;CLAUDE_ROUTING_ENV=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY","ANTHROPIC_CUSTOM_HEADERS","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY"];sameUrl=(a2,b3)=>a2.trim().replace(/\/+$/u,"")===b3.trim().replace(
1906
- /\/+$/u,"")}});function agentBrowserReleaseUrl(asset){return asset.url??`https://github.com/vercel-labs/agent-browser/releases/download/v${AGENT_BROWSER_VERSION}/${asset.asset}`}function agentBrowserReleaseVersion(asset){return asset?.version??AGENT_BROWSER_VERSION}function linuxFamilyKey(platform,arch2,musl){return platform==="android"?`linux-musl-${arch2}`:platform==="linux"&&musl?`linux-musl-${arch2}`:`${platform}-${arch2}`}function resolveAgentBrowserReleaseAsset(platform=process.platform,arch2=process.arch,musl=!1){
1884
+ profiles).profiles),browserProfilesSchema=external_exports.array(browserProfileSchema).max(20).superRefine((profiles,ctx)=>{let seen=new Set;profiles.forEach((profile,index2)=>{if(!seen.has(profile.id)){seen.add(profile.id);return}ctx.addIssue({code:"custom",path:[index2,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillAutoApply:external_exports.
1885
+ boolean().optional(),skillReviewSteps:external_exports.number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),sharedComputers:external_exports.boolean().optional(),claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().
1886
+ optional(),skillsLibrary:external_exports.boolean().optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),parallelRoomJobs:external_exports.boolean().optional(),acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().
1887
+ trim().max(40).optional(),version:external_exports.number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kin\
1888
+ d",[external_exports.object({kind:external_exports.literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.string()}).strict().refine(icon2=>providerIconError(icon2)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.
1889
+ boolean().optional(),access:external_exports.enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),defaultModelSelectionSchema=external_exports.object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,
1890
+ "invalid model variant").optional()}).refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.boolean(),backup:defaultModelSelectionSchema.optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.
1891
+ boolean(),windowMinutes:external_exports.number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),eventLogMaxBytes:external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.
1892
+ enum(EFFORT_LEVELS).optional()}).strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.shape.maxConcurrentPerBot.optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().
1893
+ optional(),signIn:external_exports.object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),defaultModelSelection:defaultModelSelectionSchema.optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.
1894
+ object({access:external_exports.enum(["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.object({key:optionalText2}).optional(),cerebras:external_exports.object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object(
1895
+ {key:optionalText2,url:optionalText2}).optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,url:optionalText2}).optional(),deepseek:external_exports.object({key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.
1896
+ boolean().optional()}).optional(),openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.number().min(0).max(1e6).optional(),warnAtPercent:external_exports.number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().
1897
+ min(1).max(160),external_exports.object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).optional()})).optional()}).optional(),openaiCompat:external_exports.object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),
1898
+ box:external_exports.object({token:optionalText2}).optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.string()).optional()}).optional(),tts:external_exports.object({key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.
1899
+ string().trim().max(2048).refine(value=>!value||/^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).optional(),everyReply:external_exports.boolean().optional()}).optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object(
1900
+ {name:optionalText2,email:optionalText2,aboutMe:external_exports.string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,computerName:external_exports.string().trim().max(63).optional(),rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).
1901
+ extend(roomContextSettings).extend(replaySettings).optional(),memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().
1902
+ int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.
1903
+ record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=
1904
+ appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.record(external_exports.string(),external_exports.json());DEFAULT_CAPTURE_QUIET_MS=2*6e4,DATA_DIR=process.env.OMB_DATA_DIR||join16(dataHome(),".limixbot"),LEGACY_DATA_DIR=join16(dataHome(),".opengrokbot"),EVENTS_DIR=join16(DATA_DIR,"events"),NATIVE_DIR=join16(
1905
+ DATA_DIR,"native"),lastIgnoredConfigWarning="",storedConfig=settledFileCache(()=>join16(DATA_DIR,"config.json"),()=>parseStoredConfig(parseJson(readFileSync9(join16(DATA_DIR,"config.json"),"utf8"))));OPENCODE_PROVIDER_KEY_LIMIT=20,OPENCODE_PROVIDER_KEY_NAME=/^[A-Z][A-Z0-9_]{0,59}_(?:API_KEY|KEY|TOKEN)$/,OPENCODE_PROVIDER_KEY_VALUE=/^[\x21-\x7e]{1,4096}$/;configSaveListeners=new Set;CLAUDE_ROUTING_ENV=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY","ANTHROPIC_CUSTOM_HEADERS","CLA\
1906
+ UDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY"];sameUrl=(a2,b3)=>a2.trim().replace(/\/+$/u,"")===b3.trim().replace(/\/+$/u,"")}});function agentBrowserReleaseUrl(asset){return asset.url??`https://github.com/vercel-labs/agent-browser/releases/download/v${AGENT_BROWSER_VERSION}/${asset.asset}`}function agentBrowserReleaseVersion(asset){return asset?.version??AGENT_BROWSER_VERSION}function linuxFamilyKey(platform,arch2,musl){return platform==="android"?`linux-musl-${arch2}`:platform==="linux"&&musl?`linux-musl-${arch2}`:`${platform}-${arch2}`}function resolveAgentBrowserReleaseAsset(platform=process.platform,arch2=process.arch,musl=!1){
1907
1907
  return RELEASES.get(linuxFamilyKey(platform,arch2,musl))??null}var AGENT_BROWSER_VERSION,RELEASES,init_browser_engine_release=__esm({"server/browser-engine-release.ts"(){"use strict";AGENT_BROWSER_VERSION="0.37.0",RELEASES=new Map([["darwin-arm64",{target:"darwin-arm64",asset:"agent-browser-darwin-arm64",sha256:"da5a2b4ef7be8ba279b1258c542c33877f480b1951d0d94de607fc1528edd380",bytes:12429360}],["darwin-x64",{target:"darwin-x64",asset:"agent-browser-darwin-x64",sha256:"f402c96350ffd2adc68d0e5e4d8\
1908
1908
  3aa49cf7735fef29882a8866be36cc2fc67e9",bytes:13588296}],["linux-arm64",{target:"linux-arm64",asset:"agent-browser-linux-arm64",sha256:"0315a8c4f7bf167cc5fd5eeaea79009b0e6b5d2ae8b3057bf6f96be978483426",bytes:12507840}],["linux-musl-arm64",{target:"linux-musl-arm64",asset:"agent-browser-linux-musl-arm64",sha256:"db67c0e84e0668c052c2cbdca325c57f896e309c3723755dcdd65b700f8a2b52",bytes:12369352}],["linux-musl-x64",{target:"linux-musl-x64",asset:"agent-browser-linux-musl-x64",sha256:"5cff3bc7b2486867a\
1909
1909
  ba2901f92c9ce6029bd2a37951630d9feec1c5b3fee402e",bytes:14092888}],["linux-x64",{target:"linux-x64",asset:"agent-browser-linux-x64",sha256:"78e0c5a14a7fa1f3d1ae2acdbdcc94a047b435b998a8c505fcc49d7fa4935a49",bytes:14253776}],["win32-x64",{target:"win32-x64",version:"0.36.0-omb.1",asset:"agent-browser-win32-x64-0.36.0-omb.1.exe",url:"https://github.com/milind-soni/OpenMausBot/releases/download/browser-engine-v0.36.0-omb.1/agent-browser-win32-x64-0.36.0-omb.1.exe",sha256:"33bee834f6a6072ec8688b091472\
@@ -8696,7 +8696,7 @@ options2.binary,["run","--config",configFile,"--adapter","caddyfile"],{env:{...o
8696
8696
  `);throw new Error(`Caddy stopped right after starting (exit ${settled.code}).
8697
8697
  ${reason}`)}return{configFile,exited,stop:async()=>{child.exitCode!==null||child.signalCode!==null||(child.kill("SIGTERM"),await Promise.race([exited,new Promise(r2=>setTimeout(r2,5e3))]),child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL"))}}}function normalizeDomainOption(raw){let value=raw.trim().toLowerCase().replace(/^https?:\/\//,"").replace(/\/+$/,""),label2=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;return!value||value.length>253||!value.includes(".")||/[\s/:@?#]/.test(value)||
8698
8698
  !value.split(".").every(part=>label2.test(part))?{error:"--domain takes a bare hostname such as maus.example.com"}:/(?:^|\.)(?:localhost|local|internal|invalid)$/.test(value)?{error:"--domain needs a public domain name that resolves to this machine"}:value}import{spawnSync as spawnSync2}from"node:child_process";import{existsSync as existsSync4,mkdirSync as mkdirSync2,readFileSync as readFileSync2,writeFileSync as writeFileSync3}from"node:fs";import{homedir as homedir3}from"node:os";import{dirname as dirname4,join as join7}from"node:path";import{homedir,userInfo}from"node:os";import{posix}from"node:path";var{basename:basename3,dirname:dirname2,join:join5}=posix,SYSTEMD_UNIT_NAME="openmausbot.service",LAUNCHD_LABEL="com.openmausbot.serve";function quoteSystemd(value){return/[\s"\\]/.test(value)?`"${value.replace(/[\\"]/g,"\\$&")}"`:value}function needsStripTypes(script){return script.endsWith(".ts")}function serviceCommand(spec){return[spec.node,...needsStripTypes(spec.script)?["--experimental-strip-types"]:[],spec.script,"serve",
8699
- ...spec.serveArgs]}function systemdUnit(spec){let lines2=["# Written by `openmausbot service install`. Re-run it to change the options.","[Unit]",`Description=OpenMausBot${spec.label?` (${spec.label})`:""}`,"After=network-online.target","Wants=network-online.target","","[Service]","Type=simple",`User=${spec.user}`,`WorkingDirectory=${spec.home}`,`Environment=HOME=${spec.home}`,`Environment=OMB_DATA_DIR=${spec.dataDir}`,...spec.cliPrefix?[`Environment=${quoteSystemd(`OMB_CLI_PREFIX=${spec.cliPrefix}`)}`]:
8699
+ ...spec.serveArgs]}function systemdUnit(spec){let lines2=["# Written by `openmausbot service install`. Re-run it to change the options.","[Unit]",`Description=Limix Bot${spec.label?` (${spec.label})`:""}`,"After=network-online.target","Wants=network-online.target","","[Service]","Type=simple",`User=${spec.user}`,`WorkingDirectory=${spec.home}`,`Environment=HOME=${spec.home}`,`Environment=OMB_DATA_DIR=${spec.dataDir}`,...spec.cliPrefix?[`Environment=${quoteSystemd(`OMB_CLI_PREFIX=${spec.cliPrefix}`)}`]:
8700
8700
  [],`ExecStart=${serviceCommand(spec).map(quoteSystemd).join(" ")}`,"Restart=always","RestartSec=3","KillMode=mixed","TimeoutStopSec=30"];return spec.bindsLowPorts&&(lines2.push("# serve --domain: Caddy binds ports 80 and 443 without running as root."),lines2.push("AmbientCapabilities=CAP_NET_BIND_SERVICE"),lines2.push("CapabilityBoundingSet=CAP_NET_BIND_SERVICE")),lines2.push("","[Install]","WantedBy=multi-user.target",""),lines2.join(`
8701
8701
  `)}function xml(value){return value.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function launchdPlist(spec){let args=serviceCommand(spec).map(arg=>` <string>${xml(arg)}</string>`).join(`
8702
8702
  `);return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>"," <key>Label</key>",` <string>${LAUNCHD_LABEL}</string>`," <key>ProgramArguments</key>"," <array>",args," </array>"," <key>EnvironmentVariables</key>"," <dict>"," <key>HOME</key>",` <string>${xml(spec.home)}</string>`," <key>OMB_DATA_DIR</key>",` <string>${xml(spec.dataDir)}</string>`,...spec.cliPrefix?[" \
@@ -1 +1 @@
1
- {"type":"module","version":"0.2.12"}
1
+ {"type":"module","version":"0.3.1"}
@@ -1880,29 +1880,29 @@ init_mcp_registry();init_connection();init_schema();init_config();init_live_conf
1880
1880
  MIN_MCP_CALL_TIMEOUT_MINUTES=1,MAX_MCP_CALL_TIMEOUT_MINUTES=60,MIN_THREAD_EVENT_LOG_BYTES=256*1024,MAX_THREAD_EVENT_LOG_BYTES=4*1024*1024*1024;vpsConfigSchema=external_exports.object({sshAlias:external_exports.string().refine(value=>value===""||isValidSshAlias(value),{message:"must be a simple SSH config alias"}).optional()}),roomConfigSchema=external_exports.object({turnTimeoutMinutes:external_exports.number().int().min(MIN_ROOM_TURN_TIMEOUT_MINUTES).max(MAX_ROOM_TURN_TIMEOUT_MINUTES)}),mcpConfigSchema=
1881
1881
  external_exports.object({callTimeoutMinutes:external_exports.number().int().min(MIN_MCP_CALL_TIMEOUT_MINUTES).max(MAX_MCP_CALL_TIMEOUT_MINUTES).optional()}).strict(),browserProfileSchema=external_exports.object({id:external_exports.string().regex(BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved"),name:external_exports.string().trim().min(1).max(40),browser:external_exports.literal("chrome").optional()}).strict(),legacyBrowserProfileSchema=external_exports.object({id:external_exports.
1882
1882
  string().regex(LEGACY_BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved"),name:external_exports.string().trim().min(1).max(40),partitionId:external_exports.string().regex(LEGACY_BROWSER_PROFILE_ID).refine(id=>id!=="guest","guest is reserved").optional(),browser:external_exports.literal("chrome").optional()}).strict();legacyBrowserProfilesSchema=external_exports.array(legacyBrowserProfileSchema).max(20),storedBrowserProfilesSchema=legacyBrowserProfilesSchema.transform(profiles=>migrateStoredBrowserProfiles(
1883
- profiles).profiles),browserProfilesSchema=external_exports.array(browserProfileSchema).max(20).superRefine((profiles,ctx)=>{let seen=new Set;profiles.forEach((profile,index2)=>{if(!seen.has(profile.id)){seen.add(profile.id);return}ctx.addIssue({code:"custom",path:[index2,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillReviewSteps:external_exports.
1884
- number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),sharedComputers:external_exports.boolean().optional(),claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().optional(),skillsLibrary:external_exports.boolean().
1885
- optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),parallelRoomJobs:external_exports.boolean().optional(),acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().trim().max(40).optional(),version:external_exports.
1886
- number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kind",[external_exports.object({kind:external_exports.
1887
- literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.string()}).strict().refine(icon2=>providerIconError(icon2)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.boolean().optional(),access:external_exports.
1888
- enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),defaultModelSelectionSchema=external_exports.object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,"invalid model variant").optional()}).
1889
- refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.boolean(),backup:defaultModelSelectionSchema.optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.boolean(),windowMinutes:external_exports.
1890
- number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),eventLogMaxBytes:external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.enum(EFFORT_LEVELS).optional()}).
1891
- strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.shape.maxConcurrentPerBot.optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().optional(),signIn:external_exports.
1892
- object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),defaultModelSelection:defaultModelSelectionSchema.optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.object({access:external_exports.enum(
1893
- ["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.object({key:optionalText2}).optional(),cerebras:external_exports.object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object({key:optionalText2,url:optionalText2}).
1894
- optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,url:optionalText2}).optional(),deepseek:external_exports.object({key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.boolean().optional()}).optional(),
1895
- openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.number().min(0).max(1e6).optional(),warnAtPercent:external_exports.number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().min(1).max(160),external_exports.
1896
- object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).optional()})).optional()}).optional(),openaiCompat:external_exports.object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),box:external_exports.object({token:optionalText2}).
1897
- optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.string()).optional()}).optional(),tts:external_exports.object({key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.string().trim().max(2048).refine(value=>!value||
1898
- /^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).optional(),everyReply:external_exports.boolean().optional()}).optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object({name:optionalText2,email:optionalText2,aboutMe:external_exports.
1899
- string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,computerName:external_exports.string().trim().max(63).optional(),rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).extend(roomContextSettings).extend(replaySettings).optional(),
1900
- memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.
1901
- optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=
1902
- appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.
1903
- optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.record(external_exports.string(),external_exports.json());DEFAULT_CAPTURE_QUIET_MS=2*6e4,DATA_DIR=process.env.OMB_DATA_DIR||join16(dataHome(),".limixbot"),LEGACY_DATA_DIR=join16(dataHome(),".opengrokbot"),EVENTS_DIR=join16(DATA_DIR,"events"),NATIVE_DIR=join16(DATA_DIR,"native"),lastIgnoredConfigWarning="",storedConfig=settledFileCache(()=>join16(DATA_DIR,"config.json"),()=>parseStoredConfig(
1904
- parseJson(readFileSync9(join16(DATA_DIR,"config.json"),"utf8"))));OPENCODE_PROVIDER_KEY_LIMIT=20,OPENCODE_PROVIDER_KEY_NAME=/^[A-Z][A-Z0-9_]{0,59}_(?:API_KEY|KEY|TOKEN)$/,OPENCODE_PROVIDER_KEY_VALUE=/^[\x21-\x7e]{1,4096}$/;configSaveListeners=new Set;CLAUDE_ROUTING_ENV=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY","ANTHROPIC_CUSTOM_HEADERS","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY"];sameUrl=(a2,b3)=>a2.trim().replace(/\/+$/u,"")===b3.trim().replace(
1905
- /\/+$/u,"")}});function agentBrowserReleaseUrl(asset){return asset.url??`https://github.com/vercel-labs/agent-browser/releases/download/v${AGENT_BROWSER_VERSION}/${asset.asset}`}function agentBrowserReleaseVersion(asset){return asset?.version??AGENT_BROWSER_VERSION}function linuxFamilyKey(platform,arch2,musl){return platform==="android"?`linux-musl-${arch2}`:platform==="linux"&&musl?`linux-musl-${arch2}`:`${platform}-${arch2}`}function resolveAgentBrowserReleaseAsset(platform=process.platform,arch2=process.arch,musl=!1){
1883
+ profiles).profiles),browserProfilesSchema=external_exports.array(browserProfileSchema).max(20).superRefine((profiles,ctx)=>{let seen=new Set;profiles.forEach((profile,index2)=>{if(!seen.has(profile.id)){seen.add(profile.id);return}ctx.addIssue({code:"custom",path:[index2,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillAutoApply:external_exports.
1884
+ boolean().optional(),skillReviewSteps:external_exports.number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),sharedComputers:external_exports.boolean().optional(),claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().
1885
+ optional(),skillsLibrary:external_exports.boolean().optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),parallelRoomJobs:external_exports.boolean().optional(),acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().
1886
+ trim().max(40).optional(),version:external_exports.number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kin\
1887
+ d",[external_exports.object({kind:external_exports.literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.string()}).strict().refine(icon2=>providerIconError(icon2)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.
1888
+ boolean().optional(),access:external_exports.enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),defaultModelSelectionSchema=external_exports.object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,
1889
+ "invalid model variant").optional()}).refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.boolean(),backup:defaultModelSelectionSchema.optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.
1890
+ boolean(),windowMinutes:external_exports.number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),eventLogMaxBytes:external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.
1891
+ enum(EFFORT_LEVELS).optional()}).strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.shape.maxConcurrentPerBot.optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().
1892
+ optional(),signIn:external_exports.object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),defaultModelSelection:defaultModelSelectionSchema.optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.
1893
+ object({access:external_exports.enum(["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.object({key:optionalText2}).optional(),cerebras:external_exports.object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object(
1894
+ {key:optionalText2,url:optionalText2}).optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,url:optionalText2}).optional(),deepseek:external_exports.object({key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.
1895
+ boolean().optional()}).optional(),openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.number().min(0).max(1e6).optional(),warnAtPercent:external_exports.number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().
1896
+ min(1).max(160),external_exports.object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).optional()})).optional()}).optional(),openaiCompat:external_exports.object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),
1897
+ box:external_exports.object({token:optionalText2}).optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.string()).optional()}).optional(),tts:external_exports.object({key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.
1898
+ string().trim().max(2048).refine(value=>!value||/^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).optional(),everyReply:external_exports.boolean().optional()}).optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object(
1899
+ {name:optionalText2,email:optionalText2,aboutMe:external_exports.string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,computerName:external_exports.string().trim().max(63).optional(),rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).
1900
+ extend(roomContextSettings).extend(replaySettings).optional(),memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().
1901
+ int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.
1902
+ record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=
1903
+ appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.record(external_exports.string(),external_exports.json());DEFAULT_CAPTURE_QUIET_MS=2*6e4,DATA_DIR=process.env.OMB_DATA_DIR||join16(dataHome(),".limixbot"),LEGACY_DATA_DIR=join16(dataHome(),".opengrokbot"),EVENTS_DIR=join16(DATA_DIR,"events"),NATIVE_DIR=join16(
1904
+ DATA_DIR,"native"),lastIgnoredConfigWarning="",storedConfig=settledFileCache(()=>join16(DATA_DIR,"config.json"),()=>parseStoredConfig(parseJson(readFileSync9(join16(DATA_DIR,"config.json"),"utf8"))));OPENCODE_PROVIDER_KEY_LIMIT=20,OPENCODE_PROVIDER_KEY_NAME=/^[A-Z][A-Z0-9_]{0,59}_(?:API_KEY|KEY|TOKEN)$/,OPENCODE_PROVIDER_KEY_VALUE=/^[\x21-\x7e]{1,4096}$/;configSaveListeners=new Set;CLAUDE_ROUTING_ENV=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_API_KEY","ANTHROPIC_CUSTOM_HEADERS","CLA\
1905
+ UDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY"];sameUrl=(a2,b3)=>a2.trim().replace(/\/+$/u,"")===b3.trim().replace(/\/+$/u,"")}});function agentBrowserReleaseUrl(asset){return asset.url??`https://github.com/vercel-labs/agent-browser/releases/download/v${AGENT_BROWSER_VERSION}/${asset.asset}`}function agentBrowserReleaseVersion(asset){return asset?.version??AGENT_BROWSER_VERSION}function linuxFamilyKey(platform,arch2,musl){return platform==="android"?`linux-musl-${arch2}`:platform==="linux"&&musl?`linux-musl-${arch2}`:`${platform}-${arch2}`}function resolveAgentBrowserReleaseAsset(platform=process.platform,arch2=process.arch,musl=!1){
1906
1906
  return RELEASES.get(linuxFamilyKey(platform,arch2,musl))??null}var AGENT_BROWSER_VERSION,RELEASES,init_browser_engine_release=__esm({"server/browser-engine-release.ts"(){"use strict";AGENT_BROWSER_VERSION="0.37.0",RELEASES=new Map([["darwin-arm64",{target:"darwin-arm64",asset:"agent-browser-darwin-arm64",sha256:"da5a2b4ef7be8ba279b1258c542c33877f480b1951d0d94de607fc1528edd380",bytes:12429360}],["darwin-x64",{target:"darwin-x64",asset:"agent-browser-darwin-x64",sha256:"f402c96350ffd2adc68d0e5e4d8\
1907
1907
  3aa49cf7735fef29882a8866be36cc2fc67e9",bytes:13588296}],["linux-arm64",{target:"linux-arm64",asset:"agent-browser-linux-arm64",sha256:"0315a8c4f7bf167cc5fd5eeaea79009b0e6b5d2ae8b3057bf6f96be978483426",bytes:12507840}],["linux-musl-arm64",{target:"linux-musl-arm64",asset:"agent-browser-linux-musl-arm64",sha256:"db67c0e84e0668c052c2cbdca325c57f896e309c3723755dcdd65b700f8a2b52",bytes:12369352}],["linux-musl-x64",{target:"linux-musl-x64",asset:"agent-browser-linux-musl-x64",sha256:"5cff3bc7b2486867a\
1908
1908
  ba2901f92c9ce6029bd2a37951630d9feec1c5b3fee402e",bytes:14092888}],["linux-x64",{target:"linux-x64",asset:"agent-browser-linux-x64",sha256:"78e0c5a14a7fa1f3d1ae2acdbdcc94a047b435b998a8c505fcc49d7fa4935a49",bytes:14253776}],["win32-x64",{target:"win32-x64",version:"0.36.0-omb.1",asset:"agent-browser-win32-x64-0.36.0-omb.1.exe",url:"https://github.com/milind-soni/OpenMausBot/releases/download/browser-engine-v0.36.0-omb.1/agent-browser-win32-x64-0.36.0-omb.1.exe",sha256:"33bee834f6a6072ec8688b091472\
@@ -8695,7 +8695,7 @@ options2.binary,["run","--config",configFile,"--adapter","caddyfile"],{env:{...o
8695
8695
  `);throw new Error(`Caddy stopped right after starting (exit ${settled.code}).
8696
8696
  ${reason}`)}return{configFile,exited,stop:async()=>{child.exitCode!==null||child.signalCode!==null||(child.kill("SIGTERM"),await Promise.race([exited,new Promise(r2=>setTimeout(r2,5e3))]),child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL"))}}}function normalizeDomainOption(raw){let value=raw.trim().toLowerCase().replace(/^https?:\/\//,"").replace(/\/+$/,""),label2=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;return!value||value.length>253||!value.includes(".")||/[\s/:@?#]/.test(value)||
8697
8697
  !value.split(".").every(part=>label2.test(part))?{error:"--domain takes a bare hostname such as maus.example.com"}:/(?:^|\.)(?:localhost|local|internal|invalid)$/.test(value)?{error:"--domain needs a public domain name that resolves to this machine"}:value}import{spawnSync as spawnSync2}from"node:child_process";import{existsSync as existsSync4,mkdirSync as mkdirSync2,readFileSync as readFileSync2,writeFileSync as writeFileSync3}from"node:fs";import{homedir as homedir3}from"node:os";import{dirname as dirname4,join as join7}from"node:path";import{homedir,userInfo}from"node:os";import{posix}from"node:path";var{basename:basename3,dirname:dirname2,join:join5}=posix,SYSTEMD_UNIT_NAME="openmausbot.service",LAUNCHD_LABEL="com.openmausbot.serve";function quoteSystemd(value){return/[\s"\\]/.test(value)?`"${value.replace(/[\\"]/g,"\\$&")}"`:value}function needsStripTypes(script){return script.endsWith(".ts")}function serviceCommand(spec){return[spec.node,...needsStripTypes(spec.script)?["--experimental-strip-types"]:[],spec.script,"serve",
8698
- ...spec.serveArgs]}function systemdUnit(spec){let lines2=["# Written by `openmausbot service install`. Re-run it to change the options.","[Unit]",`Description=OpenMausBot${spec.label?` (${spec.label})`:""}`,"After=network-online.target","Wants=network-online.target","","[Service]","Type=simple",`User=${spec.user}`,`WorkingDirectory=${spec.home}`,`Environment=HOME=${spec.home}`,`Environment=OMB_DATA_DIR=${spec.dataDir}`,...spec.cliPrefix?[`Environment=${quoteSystemd(`OMB_CLI_PREFIX=${spec.cliPrefix}`)}`]:
8698
+ ...spec.serveArgs]}function systemdUnit(spec){let lines2=["# Written by `openmausbot service install`. Re-run it to change the options.","[Unit]",`Description=Limix Bot${spec.label?` (${spec.label})`:""}`,"After=network-online.target","Wants=network-online.target","","[Service]","Type=simple",`User=${spec.user}`,`WorkingDirectory=${spec.home}`,`Environment=HOME=${spec.home}`,`Environment=OMB_DATA_DIR=${spec.dataDir}`,...spec.cliPrefix?[`Environment=${quoteSystemd(`OMB_CLI_PREFIX=${spec.cliPrefix}`)}`]:
8699
8699
  [],`ExecStart=${serviceCommand(spec).map(quoteSystemd).join(" ")}`,"Restart=always","RestartSec=3","KillMode=mixed","TimeoutStopSec=30"];return spec.bindsLowPorts&&(lines2.push("# serve --domain: Caddy binds ports 80 and 443 without running as root."),lines2.push("AmbientCapabilities=CAP_NET_BIND_SERVICE"),lines2.push("CapabilityBoundingSet=CAP_NET_BIND_SERVICE")),lines2.push("","[Install]","WantedBy=multi-user.target",""),lines2.join(`
8700
8700
  `)}function xml(value){return value.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function launchdPlist(spec){let args=serviceCommand(spec).map(arg=>` <string>${xml(arg)}</string>`).join(`
8701
8701
  `);return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>"," <key>Label</key>",` <string>${LAUNCHD_LABEL}</string>`," <key>ProgramArguments</key>"," <array>",args," </array>"," <key>EnvironmentVariables</key>"," <dict>"," <key>HOME</key>",` <string>${xml(spec.home)}</string>`," <key>OMB_DATA_DIR</key>",` <string>${xml(spec.dataDir)}</string>`,...spec.cliPrefix?[" \
@@ -202,6 +202,8 @@ const featureConfigSchema = z.object({
202
202
  skillAuthoring: z.boolean().optional(),
203
203
  /** The bot's engine reviews long conversations and updates its learned skills. Off unless true; needs skillAuthoring. */
204
204
  skillReview: z.boolean().optional(),
205
+ /** A skill the review learns is added at once. On unless false; off, the owner is asked first. */
206
+ skillAutoApply: z.boolean().optional(),
205
207
  /** Tool steps in one conversation between automatic reviews. */
206
208
  skillReviewSteps: z.number().int().min(3).max(100).optional(),
207
209
  /** Show each tool run in the transcript. Off unless explicitly enabled. */
@@ -502,8 +504,11 @@ export function skillAuthoringEnabled(cfg) {
502
504
  export const DEFAULT_SKILL_REVIEW_STEPS = 10;
503
505
  export const MIN_SKILL_REVIEW_STEPS = 3;
504
506
  export const MAX_SKILL_REVIEW_STEPS = 100;
507
+ export function skillAutoApplyEnabled(cfg) {
508
+ return cfg.features?.skillAutoApply !== false;
509
+ }
505
510
  export function skillReviewEnabled(cfg) {
506
- return skillAuthoringEnabled(cfg) && cfg.features?.skillReview === true;
511
+ return skillAuthoringEnabled(cfg) && cfg.features?.skillReview !== false;
507
512
  }
508
513
  export function skillReviewSteps(cfg) {
509
514
  const raw = cfg.features?.skillReviewSteps;
@@ -21,8 +21,8 @@ export const BASE_IMAGE_DIGEST = "sha256:274eb636f5cf3fc58f705916ee72b7a701270b3
21
21
  export const BASE_IMAGE = `${BASE_IMAGE_REPOSITORY}@${BASE_IMAGE_DIGEST}`;
22
22
  // localhost/ is explicit: Podman prepends it to unqualified build tags and may then resolve the name on Docker Hub.
23
23
  // Image and container labels, not this mutable tag, decide compatibility.
24
- export const IMAGE_REPOSITORY = "localhost/openmausbot/cua-local-vm";
25
- export const IMAGE_LAYER_VERSION = "8";
24
+ export const IMAGE_REPOSITORY = "localhost/limixbot/cua-local-vm";
25
+ export const IMAGE_LAYER_VERSION = "9";
26
26
  export const IMAGE_LAYER_LABEL = "com.openmausbot.image-layer";
27
27
  export const IMAGE = `${IMAGE_REPOSITORY}:driver-${CUA_DRIVER_VERSION}-v${IMAGE_LAYER_VERSION}`;
28
28
  export const CONTAINER = "openmausbot-computer";
@@ -34,8 +34,8 @@ export const TARGET_LABEL = "com.openmausbot.local-vm-target";
34
34
  export const VM_WORKSPACE_DIR = join(DATA_DIR, "vm-home");
35
35
  export const VM_WORKSPACE_GUEST = "/home/cua/workspace";
36
36
  export const DISPLAY = ":1";
37
- export const CUA_SOCKET = "/run/user/1000/openmausbot-cua.sock";
38
- export const CUA_EXECUTABLE = "/usr/local/libexec/openmausbot/cua-driver";
37
+ export const CUA_SOCKET = "/run/user/1000/limixbot-cua.sock";
38
+ export const CUA_EXECUTABLE = "/usr/local/libexec/limixbot/cua-driver";
39
39
  const RUNTIMES = ["docker", "podman", "container"];
40
40
  const INTERNAL_VIEWER_PORT = 6901;
41
41
  const HOST_VIEWER_PORT = 6080;
@@ -322,7 +322,7 @@ export function createTeamConnectionsHost(deps) {
322
322
  const these = `${list(names)} ${names.length === 1 ? "is" : "are"} each person's own in ${team.name}`;
323
323
  return hasOwn(acting)
324
324
  ? ` ${these}, used only in a chat that is theirs alone. Others read this chat, so ${who}'s own aren't here: what they bring back would be read here. If the task needs one, don't try it another way (the browser or another tool). ${handOnHow(who)}`
325
- : ` ${these}, and ${who} hasn't connected any yet. If the task needs one, don't try it another way (the browser or another tool): reply with one plain line and nothing more about it: "Connect your <name> here: ${ownPage(acting) ?? "your team's page in MausBot Cloud"}".`;
325
+ : ` ${these}, and ${who} hasn't connected any yet. If the task needs one, don't try it another way (the browser or another tool): reply with one plain line and nothing more about it: "Connect your <name> here: ${ownPage(acting) ?? "your team's page in Limix Bot Cloud"}".`;
326
326
  }
327
327
  if (!person) {
328
328
  const where = appsPage();
@@ -339,7 +339,7 @@ export function createTeamConnectionsHost(deps) {
339
339
  return (ownApps.length ? ` ${list(ownApps.map(appLabel))} ${ownApps.length === 1 ? "is" : "are"} ${whose} own: use ${ownApps.length === 1 ? "it" : "them"} through the ${OWN_APPS_SERVER} tools, which act as their own accounts; ${team.name}'s shared apps stay under composio.` : "")
340
340
  + (ownServers.length ? ` The MCP ${ownServers.length === 1 ? "server" : "servers"} ${list(ownServers)} act${ownServers.length === 1 ? "s" : ""} as ${whose} own account.` : "")
341
341
  + (ownApps.length || ownServers.length ? ` ${only}` : "")
342
- + (missing.length ? ` Each person connects these for themselves, and ${who} hasn't connected ${missing.length === 1 ? "it" : "them"} yet, or their sign-in ended: ${list(missing)}. If the task needs one, don't try it another way (the browser or another tool): reply with one plain line and nothing more about it: "Connect your <name> here: ${where ?? "your team's page in MausBot Cloud"}".` : "");
342
+ + (missing.length ? ` Each person connects these for themselves, and ${who} hasn't connected ${missing.length === 1 ? "it" : "them"} yet, or their sign-in ended: ${list(missing)}. If the task needs one, don't try it another way (the browser or another tool): reply with one plain line and nothing more about it: "Connect your <name> here: ${where ?? "your team's page in Limix Bot Cloud"}".` : "");
343
343
  },
344
344
  /** Whose own account a tool call uses, for its step ("using Ada's Notion"): a `person` app through their own bridge,
345
345
  * or a `person` MCP server, in a turn that acts for them. Empty for anything else. */
@@ -158,7 +158,7 @@ import { roomPostRefusal, sharedNamesNote, unreachedMentionLines } from "./same-
158
158
  import { containerComputerAction, containerComputerFrame, containerComputerStatus, containerExec, containerRuntimeStatus, localVmWakeAction, perBotLocalVmTarget, poolLocalVmTarget, SHARED_LOCAL_VM_TARGET, setupCommands, VM_WORKSPACE_GUEST, } from "./container-computer.js";
159
159
  import { containerComputerMcp } from "./local-vm-box.js";
160
160
  import { attachForTurn, saveBotAttachment } from "./bot-attachment.js";
161
- import { cacheUntilConfigChanges, ensureDirs, instanceConfigs, loadConfig, changedInstanceIds, engineLaunches, localVmIdleTimeoutMinutes, localVmMaxInstances, localVmMode, localVmPreservesInstalledApps, localVmResources, roomTurnTimeoutMinutes, mcpCallTimeoutMinutes, cacheKeepWarmSettings, threadEventLogMaxBytes, threadEventLogRetentionDays, saveConfig, showToolCallsEnabled, claudeUserMcpEnabled, skillAuthoringEnabled, skillReviewEnabled, skillReviewSteps, autoRecallEnabled, captureQuietMs, roomMemoryCaptureEnabled, tidyHour, sharedComputersEnabled, ownerLendingEnabled, builtInBrowserEnabled, persistableInstanceConfigs, vpsSshAlias, DATA_DIR, EVENTS_DIR, onConfigSaved, CLAUDE_API_INSTANCE, openCodeProviderKeys, } from "./config.js";
161
+ import { cacheUntilConfigChanges, ensureDirs, instanceConfigs, loadConfig, changedInstanceIds, engineLaunches, localVmIdleTimeoutMinutes, localVmMaxInstances, localVmMode, localVmPreservesInstalledApps, localVmResources, roomTurnTimeoutMinutes, mcpCallTimeoutMinutes, cacheKeepWarmSettings, threadEventLogMaxBytes, threadEventLogRetentionDays, saveConfig, showToolCallsEnabled, claudeUserMcpEnabled, skillAuthoringEnabled, skillAutoApplyEnabled, skillReviewEnabled, skillReviewSteps, autoRecallEnabled, captureQuietMs, roomMemoryCaptureEnabled, tidyHour, sharedComputersEnabled, ownerLendingEnabled, builtInBrowserEnabled, persistableInstanceConfigs, vpsSshAlias, DATA_DIR, EVENTS_DIR, onConfigSaved, CLAUDE_API_INSTANCE, openCodeProviderKeys, } from "./config.js";
162
162
  import { serveStatic } from "./static-files.js";
163
163
  import { startUpkeep } from "./host/start-upkeep.js";
164
164
  import { ComputerControl } from "./computer-control.js";
@@ -5431,8 +5431,12 @@ const skillReview = createSkillReview({
5431
5431
  const direct = appliesDirectly(botId, threadId);
5432
5432
  if (!direct)
5433
5433
  return { ok: false, error: "this conversation cannot apply skill changes without review" };
5434
- if (change.action === "update" && skillsHost.editable(botId, change.name))
5434
+ const askFirst = !skillAutoApplyEnabled(cfg); // Limix Bot: owner asked first
5435
+ if (change.action === "update" && skillsHost.editable(botId, change.name)) {
5436
+ if (askFirst)
5437
+ return { ok: false, error: "a team-shared skill is not changed while learning asks first" };
5435
5438
  return skillsHost.applyReviewUpdate(bot, threadId, change, direct);
5439
+ }
5436
5440
  const staged = stageSkillWrite(botId, {
5437
5441
  action: change.action,
5438
5442
  targetName: change.action === "update" ? change.name : undefined,
@@ -5442,6 +5446,18 @@ const skillReview = createSkillReview({
5442
5446
  });
5443
5447
  if ("error" in staged)
5444
5448
  return { ok: false, error: staged.error };
5449
+ if (askFirst) {
5450
+ try {
5451
+ const card = appendSkillRequestCard({ botId, threadId, staged });
5452
+ appendDecision(DATA_DIR, { threadId, requestId: card.requestId, botId, botName: bot.name, tool: "stage_skill",
5453
+ summary: card.summary, decision: "card-shown", source: "skill" });
5454
+ return { ok: true };
5455
+ }
5456
+ catch (error) {
5457
+ rejectStagedSkillWrite(botId, staged.id);
5458
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
5459
+ }
5460
+ }
5445
5461
  const applied = applyOwnStagedSkill(bot, threadId, staged, direct);
5446
5462
  return "error" in applied ? { ok: false, error: applied.error } : { ok: true };
5447
5463
  },
@@ -11939,7 +11955,8 @@ function configStatus() {
11939
11955
  },
11940
11956
  features: {
11941
11957
  skillAuthoring: skillAuthoringEnabled(cfg),
11942
- skillReview: cfg.features?.skillReview === true,
11958
+ skillReview: cfg.features?.skillReview !== false,
11959
+ skillAutoApply: skillAutoApplyEnabled(cfg),
11943
11960
  skillReviewSteps: skillReviewSteps(cfg),
11944
11961
  skillsLibrary: skillsLibraryEnabled(cfg),
11945
11962
  shareLearnedSkills: skillsHost.mode(),
@@ -58,8 +58,8 @@ function environmentEntryError(name, value) {
58
58
  return `Environment variable “${name}” is not valid.`;
59
59
  if (isReservedMcpEnvEntry(name, value)) {
60
60
  return name === "ELECTRON_RUN_AS_NODE"
61
- ? `Environment variable “${name}” is reserved by OpenMausBot; a custom server may set it to “1” only.`
62
- : `Environment variable “${name}” is reserved by OpenMausBot.`;
61
+ ? `Environment variable “${name}” is reserved by Limix Bot; a custom server may set it to “1” only.`
62
+ : `Environment variable “${name}” is reserved by Limix Bot.`;
63
63
  }
64
64
  return null;
65
65
  }
@@ -18,7 +18,7 @@ export function systemdUnit(spec) {
18
18
  const lines = [
19
19
  "# Written by `openmausbot service install`. Re-run it to change the options.",
20
20
  "[Unit]",
21
- `Description=OpenMausBot${spec.label ? ` (${spec.label})` : ""}`,
21
+ `Description=Limix Bot${spec.label ? ` (${spec.label})` : ""}`,
22
22
  "After=network-online.target",
23
23
  "Wants=network-online.target",
24
24
  "",
@@ -10,7 +10,7 @@ import { githubSkillOriginSchema, skillFolderDigest, skillFolderRecordSchema, wr
10
10
  import { entryExistsWithoutFollowing } from "./skill-storage.js";
11
11
  import { isSkillName, parseSkillMd, SKILL_FILE_MAX_BYTES } from "../shared/skill-md.js";
12
12
  export function skillsLibraryEnabled(cfg) {
13
- return cfg.features?.skillsLibrary === true;
13
+ return cfg.features?.skillsLibrary !== false;
14
14
  }
15
15
  const SAFE_ID = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
16
16
  function strings(value) {
@@ -2,8 +2,8 @@ import { parseJson } from "./schema.js";
2
2
  import { isBotPackage, parseBotPackage, parsePackageDocument, upgradeV1 } from "./bot-package.js";
3
3
  import { PACKAGE_V1_VERSION } from "../shared/package-format.js";
4
4
  import { parseTeamManifest } from "./team-manifest.js";
5
- export const TEAM_LIBRARY_REPOSITORY = "https://github.com/milind-soni/openmausbot-teams";
6
- export const TEAM_LIBRARY_RAW_ROOT = "https://raw.githubusercontent.com/milind-soni/openmausbot-teams/main";
5
+ export const TEAM_LIBRARY_REPOSITORY = "https://github.com/leomieo/limix-bot-teams";
6
+ export const TEAM_LIBRARY_RAW_ROOT = "https://raw.githubusercontent.com/leomieo/limix-bot-teams/main";
7
7
  export const TEAM_LIBRARY_CATALOG_URL = `${TEAM_LIBRARY_RAW_ROOT}/catalog.json`;
8
8
  const MAX_CATALOG_BYTES = 256_000;
9
9
  const MAX_MANIFEST_BYTES = 1_000_000;
@@ -489,7 +489,7 @@ export function grokMovePlan(bot, options = {}) {
489
489
  category: "Imported",
490
490
  author: { name: "Grok Bot" },
491
491
  license: "See source",
492
- outcomes: [clip(`${name} runs in OpenMausBot with your own engine and apps.`, 240)],
492
+ outcomes: [clip(`${name} runs in Limix Bot with your own engine and apps.`, 240)],
493
493
  setupMinutes: 5,
494
494
  requirements: { apps: [], capabilities: [] },
495
495
  team: { name: clip(name, 60) },
@@ -771,14 +771,14 @@ export function downgradeToV1(document) {
771
771
  const referenced = new Set(pkg.agents.flatMap((agent) => agent.skills ?? []));
772
772
  const skills = (pkg.skills?.entries ?? []).filter((skill) => referenced.has(skill.name));
773
773
  if (skills.length > PACKAGE_V1_MAX_SKILLS) {
774
- return { error: `Older versions of OpenMausBot accept at most ${PACKAGE_V1_MAX_SKILLS} skills in a package.` };
774
+ return { error: `Older versions of Limix Bot accept at most ${PACKAGE_V1_MAX_SKILLS} skills in a package.` };
775
775
  }
776
776
  const crowded = pkg.agents.find((agent) => (agent.skills?.length ?? 0) > PACKAGE_V1_MAX_SKILLS);
777
777
  if (crowded)
778
- return { error: `Older versions of OpenMausBot accept at most ${PACKAGE_V1_MAX_SKILLS} skills per bot (${crowded.key} has more).` };
778
+ return { error: `Older versions of Limix Bot accept at most ${PACKAGE_V1_MAX_SKILLS} skills per bot (${crowded.key} has more).` };
779
779
  const outOfRange = (pkg.routines ?? []).find((routine) => routine.timeoutMinutes !== undefined && (routine.timeoutMinutes < 5 || routine.timeoutMinutes > 240));
780
780
  if (outOfRange)
781
- return { error: `Older versions of OpenMausBot accept run limits from 5 to 240 minutes (${outOfRange.key} has ${outOfRange.timeoutMinutes}).` };
781
+ return { error: `Older versions of Limix Bot accept run limits from 5 to 240 minutes (${outOfRange.key} has ${outOfRange.timeoutMinutes}).` };
782
782
  const dropped = [];
783
783
  if (pkg.publisher)
784
784
  dropped.push("package.publisher");
@@ -1481,30 +1481,31 @@ toLowerCase())]);rawBases.forEach((base,index)=>{if(canonicalIds[index]!==void 0
1481
1481
  set(folded,index)});let effectivePartitions=requestedPartitions.map((partitionId,index)=>partitionWinner.get(partitionId.toLowerCase())===index?partitionId:canonicalIds[index]),conflictingIdOwners=new Set;canonicalIds.forEach((id,owner)=>{effectivePartitions.forEach((partitionId,partitionOwner)=>{partitionOwner!==owner&&partitionId.toLowerCase()===id&&conflictingIdOwners.add(owner)})});let unavailable=new Set([...reserved,...used]);for(let owner of conflictingIdOwners){let id=suffixedBrowserProfileId(
1482
1482
  rawBases[owner],unavailable);canonicalIds[owner]=id,unavailable.add(id)}conflictingIdOwners.size>0&&(effectivePartitions=requestedPartitions.map((partitionId,index)=>partitionWinner.get(partitionId.toLowerCase())===index?partitionId:canonicalIds[index]));let aliases=new Map;return{profiles:profiles.map((profile,index)=>{let id=canonicalIds[index],partitionId=effectivePartitions[index],migrated={id,name:profile.name};return profile.browser&&(migrated.browser=profile.browser),partitionId!==id&&(migrated.
1483
1483
  partitionId=partitionId),aliases.has(profile.id)||aliases.set(profile.id,id),migrated}),aliases}}var legacyBrowserProfilesSchema=external_exports.array(legacyBrowserProfileSchema).max(20),storedBrowserProfilesSchema=legacyBrowserProfilesSchema.transform(profiles=>migrateStoredBrowserProfiles(profiles).profiles),browserProfilesSchema=external_exports.array(browserProfileSchema).max(20).superRefine((profiles,ctx)=>{let seen=new Set;profiles.forEach((profile,index)=>{if(!seen.has(profile.id)){seen.
1484
- add(profile.id);return}ctx.addIssue({code:"custom",path:[index,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillReviewSteps:external_exports.number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),sharedComputers:external_exports.boolean().optional(),
1485
- claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().optional(),skillsLibrary:external_exports.boolean().optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),parallelRoomJobs:external_exports.boolean().optional(),
1486
- acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().trim().max(40).optional(),version:external_exports.number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.
1487
- string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kind",[external_exports.object({kind:external_exports.literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.string()}).strict().refine(icon=>providerIconError(
1488
- icon)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.boolean().optional(),access:external_exports.enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),defaultModelSelectionSchema=external_exports.
1489
- object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,"invalid model variant").optional()}).refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.boolean(),backup:defaultModelSelectionSchema.
1490
- optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.boolean(),windowMinutes:external_exports.number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),eventLogMaxBytes:external_exports.
1491
- number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.enum(EFFORT_LEVELS).optional()}).strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.shape.maxConcurrentPerBot.
1492
- optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().optional(),signIn:external_exports.object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),defaultModelSelection:defaultModelSelectionSchema.
1493
- optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.object({access:external_exports.enum(["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.object({key:optionalText2}).optional(),cerebras:external_exports.
1494
- object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object({key:optionalText2,url:optionalText2}).optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,url:optionalText2}).optional(),deepseek:external_exports.object(
1495
- {key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.boolean().optional()}).optional(),openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.number().min(0).max(1e6).optional(),warnAtPercent:external_exports.
1496
- number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().min(1).max(160),external_exports.object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).optional()})).optional()}).optional(),openaiCompat:external_exports.
1497
- object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),box:external_exports.object({token:optionalText2}).optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.string()).optional()}).optional(),tts:external_exports.object(
1498
- {key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.string().trim().max(2048).refine(value=>!value||/^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).optional(),everyReply:external_exports.boolean().optional()}).
1499
- optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object({name:optionalText2,email:optionalText2,aboutMe:external_exports.string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,computerName:external_exports.string().trim().max(63).optional(),
1500
- rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).extend(roomContextSettings).extend(replaySettings).optional(),memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.
1501
- optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.
1502
- optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),
1503
- external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.record(external_exports.string(),external_exports.json());function parseStoredConfig(value){let parsed=storedAppConfigSchema.safeParse(value);if(!parsed.success)throw new Error(schemaIssue(parsed.error,"Invalid stored configuration"));return parsed.data}var DEFAULT_CAPTURE_QUIET_MS=2*6e4;var DATA_DIR=process.env.OMB_DATA_DIR||join5(dataHome(),".limixbot"),LEGACY_DATA_DIR=join5(dataHome(),".opengrokbot"),EVENTS_DIR=join5(DATA_DIR,"events"),NATIVE_DIR=join5(DATA_DIR,"native");var storedConfig=settledFileCache(()=>join5(DATA_DIR,"config.json"),()=>parseStoredConfig(parseJson(readFileSync3(join5(DATA_DIR,"config.json"),"utf8"))));var GIB=1024*1024*1024;var SUPERVISOR_CAPS=["SETGID","SETUID"],PACKAGE_INSTALL_CAPS=["CHOWN","DAC_OVERRIDE","FOWNER","FSETID",...SUPERVISOR_CAPS];var SUPERVISORD="/usr/bin/supervisord -c /etc/supervisor/supervisord.conf",GUEST_IDS_SCRIPT=["set -eu",'uid="$1"; gid="$2"; old_uid="$(id -u cua)"; old_gid="$(id -g cua)"','if [ "$old_uid:$old_gid" != "$uid:$gid" ]; then',' find / -xdev -uid "$old_uid" -exec chown -h "$uid" {} +',' find / -xdev -gid "$old_gid" -exec chgrp -h "$gid" {} +',' sed -i "s/^cua:x:$old_uid:$old_gid:/cua:x:$uid:$gid:/" /etc/passwd',' sed -i "s/^cua:x:$old_gid:/cua:x:$gid:/" /etc/group',' [ "$(id -u cua):$(id -g cua)\
1484
+ add(profile.id);return}ctx.addIssue({code:"custom",path:[index,"id"],message:`browser profile id ${profile.id} is duplicated`})})}),featureConfigSchema=external_exports.object({skillAuthoring:external_exports.boolean().optional(),skillReview:external_exports.boolean().optional(),skillAutoApply:external_exports.boolean().optional(),skillReviewSteps:external_exports.number().int().min(3).max(100).optional(),showToolCalls:external_exports.boolean().optional(),browser:external_exports.boolean().optional(),
1485
+ sharedComputers:external_exports.boolean().optional(),claudeUserMcp:external_exports.boolean().optional(),claudeUserSkills:external_exports.boolean().optional(),llmThreadTitles:external_exports.boolean().optional(),smartSetupChoices:external_exports.boolean().optional(),autoRecall:external_exports.boolean().optional(),skillsLibrary:external_exports.boolean().optional(),shareLearnedSkills:external_exports.enum(["off","ask","auto"]).optional(),roomMemoryCapture:external_exports.boolean().optional(),
1486
+ parallelRoomJobs:external_exports.boolean().optional(),acpPlanLines:external_exports.boolean().optional()}).extend({agentsToolBridge:external_exports.boolean().optional(),savedSteps:external_exports.boolean().optional()}),onboardingConfigSchema=external_exports.object({completedAt:external_exports.string().trim().max(40).optional(),version:external_exports.number().int().min(0).max(1e3).optional(),reelSeen:external_exports.boolean().optional(),hintsSeen:external_exports.array(external_exports.string().
1487
+ trim().min(1).max(60)).max(100).optional(),firstTurnAt:external_exports.string().trim().max(40).optional()}).strict(),instanceConfigSchema=external_exports.object({driver:external_exports.string().min(1),displayName:optionalText2,accentColor:optionalText2,icon:external_exports.discriminatedUnion("kind",[external_exports.object({kind:external_exports.literal("preset"),preset:external_exports.enum(PROVIDER_ICON_PRESETS)}).strict(),external_exports.object({kind:external_exports.literal("custom"),dataUrl:external_exports.
1488
+ string()}).strict().refine(icon=>providerIconError(icon)===null,{message:"Invalid provider icon"})]).optional(),environment:external_exports.record(external_exports.string(),external_exports.string()).optional(),enabled:external_exports.boolean().optional(),hidden:external_exports.boolean().optional(),access:external_exports.enum(["subscription","custom","api"]).optional(),config:external_exports.json().optional()}),instanceConfigMapSchema=external_exports.record(external_exports.string(),instanceConfigSchema),
1489
+ defaultModelSelectionSchema=external_exports.object({instanceId:external_exports.string().trim().min(1).max(200),model:external_exports.string().trim().min(1).max(500),effort:external_exports.enum(EFFORT_LEVELS).optional(),variant:external_exports.string().refine(isModelVariant,"invalid model variant").optional()}).refine(selection=>selection.variant===void 0||selection.effort===void 0,"choose either a model variant or an effort level"),automaticRecoverySchema=external_exports.object({enabled:external_exports.
1490
+ boolean(),backup:defaultModelSelectionSchema.optional()}).strict().refine(recovery=>!recovery.enabled||recovery.backup!==void 0,{message:"Choose a backup model before enabling automatic recovery",path:["backup"]}),cacheKeepWarmSchema=external_exports.object({enabled:external_exports.boolean(),windowMinutes:external_exports.number().int().min(15).max(1440).optional()}).strict(),threadsConfigSchema=external_exports.object({maxConcurrentPerBot:external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),
1491
+ eventLogMaxBytes:external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),eventLogRetentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict(),newBotsConfigSchema=external_exports.object({effort:external_exports.enum(EFFORT_LEVELS).optional()}).strict(),newBotsPatchSchema=external_exports.object({effort:newBotsConfigSchema.shape.effort.nullable()}).strict(),threadsPatchSchema=threadsConfigSchema.extend({maxConcurrentPerBot:threadsConfigSchema.
1492
+ shape.maxConcurrentPerBot.optional(),eventLogMaxBytes:threadsConfigSchema.shape.eventLogMaxBytes.nullable(),eventLogRetentionDays:threadsConfigSchema.shape.eventLogRetentionDays.nullable()}),appConfigSchema=external_exports.object({customDomain:external_exports.string().optional(),signIn:external_exports.object({admins:external_exports.array(external_exports.string().max(320)).max(500).optional(),members:external_exports.array(external_exports.string().max(320)).max(5e3).optional()}).optional(),
1493
+ defaultModelSelection:defaultModelSelectionSchema.optional(),automaticRecovery:automaticRecoverySchema.optional(),cacheKeepWarm:cacheKeepWarmSchema.optional(),newBotDefaults:newBotDefaultsSchema.optional(),newBots:newBotsConfigSchema.optional(),cliStartup:external_exports.object({access:external_exports.enum(["local","tunnel","tailscale","public-url"]),publicUrl:external_exports.string().url().optional(),phone:external_exports.enum(["ios","android"]).optional()}).optional(),mistral:external_exports.
1494
+ object({key:optionalText2}).optional(),cerebras:external_exports.object({key:optionalText2}).optional(),treg:external_exports.object({key:optionalText2}).optional(),postiz:external_exports.object({key:optionalText2,url:optionalText2}).optional(),groq:external_exports.object({key:optionalText2,url:optionalText2}).optional(),greenference:external_exports.object({key:optionalText2}).optional(),modelgo:external_exports.object({key:optionalText2}).optional(),meta:external_exports.object({key:optionalText2,
1495
+ url:optionalText2}).optional(),deepseek:external_exports.object({key:optionalText2}).optional(),xai:external_exports.object({key:optionalText2,url:optionalText2}).optional(),anthropic:external_exports.object({key:optionalText2,url:optionalText2,everyClaudeBot:external_exports.boolean().optional()}).optional(),openai:external_exports.object({key:optionalText2}).optional(),openrouter:external_exports.object({key:optionalText2}).optional(),budgets:external_exports.object({monthlyUsd:external_exports.
1496
+ number().min(0).max(1e6).optional(),warnAtPercent:external_exports.number().int().min(1).max(100).optional()}).optional(),billing:external_exports.object({currency:external_exports.string().regex(/^[A-Z]{3}$/).optional(),prices:external_exports.record(external_exports.string().min(1).max(160),external_exports.object({inputPerMillion:external_exports.number().min(0).max(1e6),outputPerMillion:external_exports.number().min(0).max(1e6),cachedInputPerMillion:external_exports.number().min(0).max(1e6).
1497
+ optional()})).optional()}).optional(),openaiCompat:external_exports.object({key:optionalText2,url:optionalText2,model:optionalText2,provider:optionalText2}).optional(),composio:external_exports.object({apiKey:optionalText2,userId:optionalText2,sessionId:optionalText2}).optional(),box:external_exports.object({token:optionalText2}).optional(),vps:vpsConfigSchema.optional(),opencodeGo:external_exports.object({apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.
1498
+ string()).optional()}).optional(),tts:external_exports.object({key:optionalText2,fishKey:optionalText2,geminiKey:optionalText2,voice:optionalText2,provider:external_exports.enum(["elevenlabs","fish","system","chatterbox","xai","gemini","openai"]).optional(),baseUrl:external_exports.string().trim().max(2048).refine(value=>!value||/^https?:\/\//i.test(value),"the Chatterbox server address must start with http:// or https://").optional(),model:optionalText2,fishModel:external_exports.enum(FISH_TTS_MODELS).
1499
+ optional(),everyReply:external_exports.boolean().optional()}).optional(),decider:deciderConfigSchema.optional(),live:liveConfigSchema.optional(),imageGen:imageGenConfigSchema.optional(),everyBotRules:external_exports.string().max(24e3).optional(),profile:external_exports.object({name:optionalText2,email:optionalText2,aboutMe:external_exports.string().max(24e3).optional(),avatarUrl:external_exports.union([external_exports.literal(""),botAvatarUrlSchema]).optional()}).optional(),language:optionalText2,
1500
+ computerName:external_exports.string().trim().max(63).optional(),rooms:roomConfigSchema.optional(),mcp:mcpConfigSchema.optional(),context:external_exports.object({compactAt:external_exports.number().positive().max(1e7).optional(),autoCompact:external_exports.boolean().optional()}).extend(roomContextSettings).extend(replaySettings).optional(),memory:external_exports.object({captureQuietMs:external_exports.number().int().min(1e3).max(1440*6e4).optional(),tidyHour:external_exports.number().int().min(
1501
+ 0).max(23).optional()}).strict().optional(),threads:threadsConfigSchema.optional(),burst:external_exports.object({maxParallel:external_exports.number().int().min(1).max(100).optional()}).strict().optional(),decisions:external_exports.object({retentionDays:external_exports.number().int().min(1).max(3650).optional()}).strict().optional(),loopGuard:loopGuardConfigSchema.optional(),safetyFloor:external_exports.object({enabled:external_exports.boolean().optional()}).strict().optional(),localVm:localVmConfigSchema.
1502
+ optional(),features:featureConfigSchema.optional(),onboarding:onboardingConfigSchema.optional(),browserEngine:browserEngineConfigSchema.optional(),browserProfiles:browserProfilesSchema.optional(),instances:instanceConfigMapSchema.optional(),mcpServers:external_exports.record(external_exports.string(),external_exports.unknown()).optional()}),storedAppConfigSchema=appConfigSchema.extend(helperStoredShape).extend({browserProfiles:storedBrowserProfilesSchema.optional(),opencodeGo:external_exports.object(
1503
+ {apiKey:optionalText2,providerKeys:external_exports.record(external_exports.string(),external_exports.unknown()).catch({}).transform(keys=>Object.fromEntries(Object.entries(keys).filter(entry=>typeof entry[1]=="string"))).optional()}).optional()}),appConfigPatchSchema=appConfigSchema.omit({instances:!0,mcpServers:!0,cliStartup:!0,customDomain:!0}).extend({threads:threadsPatchSchema.optional(),newBots:newBotsPatchSchema.optional(),imageGen:imageGenPatchSchema.optional()}),jsonObjectSchema2=external_exports.
1504
+ record(external_exports.string(),external_exports.json());function parseStoredConfig(value){let parsed=storedAppConfigSchema.safeParse(value);if(!parsed.success)throw new Error(schemaIssue(parsed.error,"Invalid stored configuration"));return parsed.data}var DEFAULT_CAPTURE_QUIET_MS=2*6e4;var DATA_DIR=process.env.OMB_DATA_DIR||join5(dataHome(),".limixbot"),LEGACY_DATA_DIR=join5(dataHome(),".opengrokbot"),EVENTS_DIR=join5(DATA_DIR,"events"),NATIVE_DIR=join5(DATA_DIR,"native");var storedConfig=settledFileCache(()=>join5(DATA_DIR,"config.json"),()=>parseStoredConfig(parseJson(readFileSync3(join5(DATA_DIR,"config.json"),"utf8"))));var GIB=1024*1024*1024;var SUPERVISOR_CAPS=["SETGID","SETUID"],PACKAGE_INSTALL_CAPS=["CHOWN","DAC_OVERRIDE","FOWNER","FSETID",...SUPERVISOR_CAPS];var SUPERVISORD="/usr/bin/supervisord -c /etc/supervisor/supervisord.conf",GUEST_IDS_SCRIPT=["set -eu",'uid="$1"; gid="$2"; old_uid="$(id -u cua)"; old_gid="$(id -g cua)"','if [ "$old_uid:$old_gid" != "$uid:$gid" ]; then',' find / -xdev -uid "$old_uid" -exec chown -h "$uid" {} +',' find / -xdev -gid "$old_gid" -exec chgrp -h "$gid" {} +',' sed -i "s/^cua:x:$old_uid:$old_gid:/cua:x:$uid:$gid:/" /etc/passwd',' sed -i "s/^cua:x:$old_gid:/cua:x:$gid:/" /etc/group',' [ "$(id -u cua):$(id -g cua)\
1504
1505
  " = "$uid:$gid" ] || { echo "cua did not take uid $uid gid $gid" >&2; exit 1; }',"fi",`exec ${SUPERVISORD}`].join(`
1505
1506
  `);import{existsSync as existsSync4}from"node:fs";import{dirname as dirname3,join as join6}from"node:path";import{fileURLToPath}from"node:url";var SERVER_ROOT=dirname3(fileURLToPath(import.meta.url));function resolveProxy(relative5){let source=join6(SERVER_ROOT,`${relative5}.ts`);return existsSync4(source)?source:join6(SERVER_ROOT,`${relative5}.js`)}var SPAWNED_PROXIES={harnessMcp:resolveProxy("harness-mcp-proxy"),localComputer:resolveProxy("local-computer-proxy"),permission:resolveProxy("permissio\
1506
1507
  n-proxy"),containerMcp:resolveProxy("container-mcp"),vpsContainerMcp:resolveProxy("vps-container-mcp"),agents:resolveProxy("drivers/agents-proxy"),dweb:resolveProxy("drivers/dweb-proxy"),connectors:resolveProxy("connector-proxy"),mcpGate:resolveProxy("mcp-gate"),mcpRemote:resolveProxy("mcp-remote-proxy"),phone:resolveProxy("drivers/phone-proxy"),chatgptPlanToken:resolveProxy("drivers/chatgpt-plan-token-command"),hook:resolveProxy("hooks/omb-hook"),piMcpExtension:resolveProxy("drivers/pi-mcp-exte\
1507
- nsion")};var run=promisify(execFile2);var CUA_DRIVER_VERSION="0.37.0",BASE_IMAGE_REPOSITORY="docker.io/trycua/xfce-cua",BASE_IMAGE_DIGEST="sha256:274eb636f5cf3fc58f705916ee72b7a701270b3877369d08533a385c5325be9b",BASE_IMAGE=`${BASE_IMAGE_REPOSITORY}@${BASE_IMAGE_DIGEST}`,IMAGE_REPOSITORY="localhost/openmausbot/cua-local-vm",IMAGE_LAYER_VERSION="8";var IMAGE=`${IMAGE_REPOSITORY}:driver-${CUA_DRIVER_VERSION}-v${IMAGE_LAYER_VERSION}`,CONTAINER="openmausbot-computer";var VM_WORKSPACE_DIR=join7(DATA_DIR,"vm-home");var DISPLAY=":1",CUA_SOCKET="/run/user/1000/openmausbot-cua.sock",CUA_EXECUTABLE="/usr/local/libexec/openmausbot/cua-driver";function cuaExecArgs(args2,options={}){return["exec",...options.interactive?["-i"]:[],"-u","cua","-e","HOME=/home/cua","-e",`DISPLAY=${DISPLAY}`,"-e","CUA_DRIVER_INSTALL_CHANNEL=python_package","-e","CUA_DRIVER_RS_TELEMETRY_ENABLED=0",options.container??CONTAINER,CUA_EXECUTABLE,...args2]}var containerMcpPath=SPAWNED_PROXIES.containerMcp;import{randomBytes as randomBytes2}from"node:crypto";import{closeSync as closeSync2,existsSync as existsSync6,mkdirSync as mkdirSync2,openSync as openSync2,rmSync as rmSync2,statSync as statSync4,writeFileSync}from"node:fs";import{dirname as dirname4,join as join10,resolve as resolve5}from"node:path";import{join as join8}from"node:path";function npmEnginesPrefix(dataDir){return join8(dataDir,"tools","npm")}function antigravityRuntimesRoot(dataDir){return join8(dataDir,"tools","antigravity-acp")}function standaloneEnginesRoot(dataDir){return join8(dataDir,"tools","standalone")}function engineInstallRoots(dataDir){return[npmEnginesPrefix(dataDir),antigravityRuntimesRoot(dataDir),standaloneEnginesRoot(dataDir)]}function bridgedCommand(tools,bridges,command,args2,relay){if(!bridges.length&&!relay)return{command,args:[...args2]};if(tools.socat&&!relay){let lines=bridges.map(bridge=>`${shellWord(tools.socat)} TCP4-LISTEN:${bridge.port},bind=127.0.0.1,reuseaddr,fork UNIX-CONNECT:${shellWord(inBoxSocket(bridge.name))} </dev/null >/dev/null 2>&1 &`),first=bridges[0],wait=`n=0; until ${shellWord(tools.socat)} -u OPEN:/dev/null TCP4:127.0.0.1:${first.port},connect-timeout=0.2 2>/dev/null || [ "$n" -ge 100 ]; d\
1508
+ nsion")};var run=promisify(execFile2);var CUA_DRIVER_VERSION="0.37.0",BASE_IMAGE_REPOSITORY="docker.io/trycua/xfce-cua",BASE_IMAGE_DIGEST="sha256:274eb636f5cf3fc58f705916ee72b7a701270b3877369d08533a385c5325be9b",BASE_IMAGE=`${BASE_IMAGE_REPOSITORY}@${BASE_IMAGE_DIGEST}`,IMAGE_REPOSITORY="localhost/limixbot/cua-local-vm",IMAGE_LAYER_VERSION="9";var IMAGE=`${IMAGE_REPOSITORY}:driver-${CUA_DRIVER_VERSION}-v${IMAGE_LAYER_VERSION}`,CONTAINER="openmausbot-computer";var VM_WORKSPACE_DIR=join7(DATA_DIR,"vm-home");var DISPLAY=":1",CUA_SOCKET="/run/user/1000/limixbot-cua.sock",CUA_EXECUTABLE="/usr/local/libexec/limixbot/cua-driver";function cuaExecArgs(args2,options={}){return["exec",...options.interactive?["-i"]:[],"-u","cua","-e","HOME=/home/cua","-e",`DISPLAY=${DISPLAY}`,"-e","CUA_DRIVER_INSTALL_CHANNEL=python_package","-e","CUA_DRIVER_RS_TELEMETRY_ENABLED=0",options.container??CONTAINER,CUA_EXECUTABLE,...args2]}var containerMcpPath=SPAWNED_PROXIES.containerMcp;import{randomBytes as randomBytes2}from"node:crypto";import{closeSync as closeSync2,existsSync as existsSync6,mkdirSync as mkdirSync2,openSync as openSync2,rmSync as rmSync2,statSync as statSync4,writeFileSync}from"node:fs";import{dirname as dirname4,join as join10,resolve as resolve5}from"node:path";import{join as join8}from"node:path";function npmEnginesPrefix(dataDir){return join8(dataDir,"tools","npm")}function antigravityRuntimesRoot(dataDir){return join8(dataDir,"tools","antigravity-acp")}function standaloneEnginesRoot(dataDir){return join8(dataDir,"tools","standalone")}function engineInstallRoots(dataDir){return[npmEnginesPrefix(dataDir),antigravityRuntimesRoot(dataDir),standaloneEnginesRoot(dataDir)]}function bridgedCommand(tools,bridges,command,args2,relay){if(!bridges.length&&!relay)return{command,args:[...args2]};if(tools.socat&&!relay){let lines=bridges.map(bridge=>`${shellWord(tools.socat)} TCP4-LISTEN:${bridge.port},bind=127.0.0.1,reuseaddr,fork UNIX-CONNECT:${shellWord(inBoxSocket(bridge.name))} </dev/null >/dev/null 2>&1 &`),first=bridges[0],wait=`n=0; until ${shellWord(tools.socat)} -u OPEN:/dev/null TCP4:127.0.0.1:${first.port},connect-timeout=0.2 2>/dev/null || [ "$n" -ge 100 ]; d\
1508
1509
  o n=$((n+1)); sleep 0.01; done`;return{command:"/bin/sh",args:["-c",[...lines,wait,'exec "$0" "$@"'].join(`
1509
1510
  `),command,...args2]}}return{command:tools.node,args:[tools.bridgeScript,...bridges.map(bridge=>`--bridge=${bridge.port}=${inBoxSocket(bridge.name)}`),...relay?[`--relay=${relay}`]:[],"--",command,...args2]}}function shellWord(value){return`'${value.replaceAll("'","'\\''")}'`}import{createHash,randomBytes,timingSafeEqual}from"node:crypto";import{createServer,request as httpRequest}from"node:http";import{request as httpsRequest}from"node:https";function refusedCallAnswer(server,sentCredentials,body){let frame;try{frame=JSON.parse(body)}catch{return null}let{id,method}=frame&&typeof frame=="object"&&!Array.isArray(frame)?frame:{};if(method!=="tools/call"||typeof id!="string"&&typeof id!="number")return null;let text=sentCredentials?`The MCP server "${server}" refused the sign-in or key it was sent (HTTP 401), so nothing ran. Don't retry. If it signs in, call mcp_server with action sign_in and name ${server}, then end your turn; otherwis\
1510
1511
  e tell the person to update its key in Apps, MCP servers.`:`The MCP server "${server}" needs a sign-in before its tools work, and nobody has signed in (HTTP 401), so nothing ran. Don't retry. Call mcp_server with action sign_in and name ${server}, then end your turn; if you can't, tell the person to sign in to ${server} in Apps, MCP servers.`;return JSON.stringify({jsonrpc:"2.0",id,result:{content:[{type:"text",text}],isError:!0}})}var BROKER_TOKEN_PREFIX="omb_t0_",BROKER_PROCESS_TTL_MS=1440*6e4,BROKER_THREAD_TTL_MS=1440*6e4,MAX_TOKENS=1e4,CREDENTIAL_HEADERS=new Set(["authorization","x-api-key","x-goog-api-key","proxy-authorization","cookie"]),HOP_BY_HOP=new Set(["connection","keep-alive","transfer-encoding","te","trailer","upgrade","proxy-connection","host"]),TOKEN=/^omb_t0_[a-f0-9]{48}$/,GRANT=/^[a-z][a-z0-9_-]{0,63}$/;function brokerUrl(port,token,grant){return`http://127.0.0.1:${port}/b/${token}/${grant}`}function upstreamUrl(upstream,path,query){