limixbot 0.2.13 → 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.
- package/dist/assets/{ActivityPanel-Crvi6UFN.js → ActivityPanel-O6Su2c-u.js} +1 -1
- package/dist/assets/{App-DBQxC6tF.js → App-Bcey1qup.js} +108 -108
- package/dist/assets/{AppEventEditor-BKkrL3lm.js → AppEventEditor-BlJGPJ3Z.js} +1 -1
- package/dist/assets/{BotSettingsDialog-BVTAiGvS.js → BotSettingsDialog-PiCk9us7.js} +4 -4
- package/dist/assets/{BrowserPanel-CXiPysF8.js → BrowserPanel-BWcb5CXi.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-B5ZQeFJ9.js → BrowserProfilesManager-dKHyQotG.js} +1 -1
- package/dist/assets/{CloudAddDialog-CjSOW3Ui.js → CloudAddDialog-D1ZSbkxV.js} +1 -1
- package/dist/assets/{ComputerFilesPane-VwEQWopG.js → ComputerFilesPane-wgtikCgi.js} +1 -1
- package/dist/assets/{ComputerPanel-C4y6Mvwd.js → ComputerPanel-Cyj53a7W.js} +2 -2
- package/dist/assets/{DataPanel-CeaLVEeb.js → DataPanel-BlBidswi.js} +1 -1
- package/dist/assets/{DesktopViewer-CfxFVwdn.js → DesktopViewer-D7JeLJbi.js} +1 -1
- package/dist/assets/{FilesView-B9X_qlkn.js → FilesView-CNkEKeZB.js} +1 -1
- package/dist/assets/{GrokMoveDialog-CuC9v4Fd.js → GrokMoveDialog-fyBulzXL.js} +2 -2
- package/dist/assets/{InspectorPanel-B6ZAVTyD.js → InspectorPanel-Cut2OqiB.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal-DkoOxF2t.js → KeyboardShortcutsModal-DnxUB4cd.js} +1 -1
- package/dist/assets/{LiveDesktop-BsPQ6sGB.js → LiveDesktop-CnbyXW61.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-U6rVY7_g.js → LocalVmWorkspace-D9xFPGF0.js} +1 -1
- package/dist/assets/{MacLocalControl-CC-lKazM.js → MacLocalControl-CpswtfCI.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-D0maDIQ1.js → MarkdownFilePreview-V-y-0ksi.js} +1 -1
- package/dist/assets/{MenuMotion-CLF0GByT.js → MenuMotion-VeZ_fZ8M.js} +1 -1
- package/dist/assets/NewBotDialog-rBjsSV0e.js +1 -0
- package/dist/assets/{PhoneAppDialog-CTPZwJnL.js → PhoneAppDialog-DAW1N-hM.js} +1 -1
- package/dist/assets/{PlacesRail-D510vk5R.js → PlacesRail-C_3Mh4C8.js} +1 -1
- package/dist/assets/{PluginsPanel-BC0YDZ8h.js → PluginsPanel-CMsgWSNg.js} +1 -1
- package/dist/assets/{ProIntroduction-BIiaveWm.js → ProIntroduction-6ByF2_US.js} +1 -1
- package/dist/assets/{RemoteAgentSettingsPanel-OVWheJHu.js → RemoteAgentSettingsPanel-D4X4rHMQ.js} +1 -1
- package/dist/assets/{RoomPanel-mDRTZ2vs.js → RoomPanel-mg6M04wy.js} +1 -1
- package/dist/assets/{RoutinesPage-9VDuovqw.js → RoutinesPage-DomuZMUT.js} +2 -2
- package/dist/assets/{SettingsModal-BHJvNrwz.js → SettingsModal-Dd9l0b2C.js} +1 -1
- package/dist/assets/{ShareTeamDialog-C4go2USY.js → ShareTeamDialog-B_0Gr8Mq.js} +1 -1
- package/dist/assets/{SignedInSites-Cm_X_p_X.js → SignedInSites-C-eqeBxT.js} +1 -1
- package/dist/assets/TeamLibraryPanel-DpXOFOQr.js +1 -0
- package/dist/assets/{TeamMapPage-CkYOrZ7X.js → TeamMapPage-CIQPYaxL.js} +1 -1
- package/dist/assets/{TriggersPage-_qYPJ97Z.js → TriggersPage-D7RDjrjV.js} +1 -1
- package/dist/assets/{VisibilitySection-CpwyInUL.js → VisibilitySection-Bimhk6c5.js} +1 -1
- package/dist/assets/{WebhookTrigger-CfspvK5m.js → WebhookTrigger-D5c2bPJu.js} +1 -1
- package/dist/assets/{WorksOnGrid-BtfeNPO2.js → WorksOnGrid-PZ-caKHg.js} +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-qTIn3JJ1.js → abnfDiagram-YUKMZFIV-D7az-C1J.js} +1 -1
- package/dist/assets/{activity-CEhxqMcq.js → activity-W_ia4q-Y.js} +1 -1
- package/dist/assets/{architectureDiagram-47P4ROYG-BQls0L4i.js → architectureDiagram-47P4ROYG-B2IC9169.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-DMD6noIL.js → blockDiagram-E7TT5TSB-FnweBzU4.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-CIp2zuwT.js → c4Diagram-CRA5TL53-rxgwSaAP.js} +1 -1
- package/dist/assets/{calendar-days-Di_J-dvc.js → calendar-days-wM1DS-Cu.js} +1 -1
- package/dist/assets/channel-BQyC_QMX.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BBkqbpZ4.js → chunk-2Q5K7J3B-B7yhqEe8.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-JdwNE0CO.js → chunk-5VM5RSS4-Sw6phnaf.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-D_Zh7_1M.js → chunk-7TKQ45FW-CheglUSd.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-BvSbOQeA.js → chunk-AW2ZBBNX-CswkqPkf.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-CXYsdaIb.js → chunk-FVRAUYC3-DeN53o4S.js} +2 -2
- package/dist/assets/{chunk-HTAEGDNF-CO93FKYG.js → chunk-HTAEGDNF-CCZ_Udf0.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Ko0D98Sv.js → chunk-JWPE2WC7-nG1rfC9P.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-DBGMbUnJ.js → chunk-KQW6MTUR-Bh_TxL0e.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-PVMPph1f.js → chunk-XXDRQBXY-CLIJBS-V.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-Z-SRrzrQ.js → classDiagram-v2-K4WV4PDN-B04FntQx.js} +1 -1
- package/dist/assets/{coins-QIRjm19F.js → coins-81htcDNx.js} +1 -1
- package/dist/assets/{core-Cb-3LQeb.js → core-BLAzrox0.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-DcOhjasx.js → cose-bilkent-JH36ORCC-D9PAieWF.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-D9Pv76Si.js → cynefin-EF2NZ3EQ-BAC2DRg5.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-1Nlm6fT4.js → cynefinDiagram-3GCD6N5R-Cc3k_C-5.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-CW-TdWBz.js → dagre-W4DXFKR2-CpbzxBGo.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-DJYwBSWN.js → diagram-2UJZ2QOL-d22NGVzG.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-ZajDgMU2.js → diagram-OVF4WLC6-BFTJTNpN.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-D03UoQDq.js → diagram-PFPMY2P6-CA_YgAo3.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-B9gI6La0.js → diagram-UMYRVEAY-CCsuWndY.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-Dxzg_fDQ.js → diagram-YEKJPTXX-Bcwhmpgl.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-Cv6eTFZE.js → diagram-ZIFT7M5P-Bs1iIjhq.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-BCUklW6x.js → ebnfDiagram-VR2GEFS7-CFr96fLM.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-VcZs96wT.js → elk-IJKZMXRS-DSdTG_hW.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-CJ61fO-Z.js → erDiagram-O2IAPWRE-BGdMdwi1.js} +1 -1
- package/dist/assets/{file-up-BObBqrEg.js → file-up-DvGMRF5I.js} +1 -1
- package/dist/assets/{flowDiagram-OXPTDLAJ-CQMoLXxB.js → flowDiagram-OXPTDLAJ-DL25A20O.js} +1 -1
- package/dist/assets/{ganttDiagram-R7TSEDQI-ev5i74AH.js → ganttDiagram-R7TSEDQI-DQaNIRGv.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-B8MGdCiz.js → gitGraphDiagram-XJZIOB7I-B6ypA1ZF.js} +1 -1
- package/dist/assets/{import-name-6aD0J6QH.js → import-name-Cdh9ZlkK.js} +1 -1
- package/dist/assets/{index-Dpov1WyC.js → index-BaW02tJl.js} +1 -1
- package/dist/assets/{index-CRF26t5P.js → index-CxcnLo81.js} +1 -1
- package/dist/assets/{index-DgGTgaCO.js → index-oVds-_Vz.js} +2 -2
- package/dist/assets/{infoDiagram-5W2HQ5XZ-CoqaIohe.js → infoDiagram-5W2HQ5XZ-8YbtI4S4.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-BMzA3Pkb.js → ishikawaDiagram-K3B6WC7H-DYpDWk2K.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-DLNIN037.js → journeyDiagram-COXZFDF6-BUd8Vnbq.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-savLUzO8.js → kanban-definition-P3RFRI5V-AywqsEBB.js} +1 -1
- package/dist/assets/{mcp-servers-D2hHUxUp.js → mcp-servers-Bu5RuYBT.js} +1 -1
- package/dist/assets/{mermaid.core-1h5EGl1v.js → mermaid.core-B5yiNmEY.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-hMbAYcVv.js → mindmap-definition-LZFPQGKD-DRALSCg6.js} +1 -1
- package/dist/assets/{minimize-63hYzV5y.js → minimize-CWsi9mRL.js} +1 -1
- package/dist/assets/{monitor-DOeLdhQc.js → monitor-c1mf38zt.js} +1 -1
- package/dist/assets/{new-bot-DkcWCdL_.js → new-bot-mp2gi3ed.js} +1 -1
- package/dist/assets/{org-library-C-rnQ1YG.js → org-library-Bi3EieNo.js} +1 -1
- package/dist/assets/{package-format-CMpBgycc.js → package-format-CaPiTXn3.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-BIY55aib.js → pegDiagram-BGZESJAR-Drj_UJz5.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-DR8o8piD.js → pieDiagram-CAPJLFHJ-CL7MryRt.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-Dqb1703W.js → quadrantDiagram-GDMTTRAM-BvWxqPJn.js} +1 -1
- package/dist/assets/{rail-Ok1gt1lN.js → rail-DApFzTxo.js} +1 -1
- package/dist/assets/{railroadDiagram-SM67HX2B-ZWJ9xWQY.js → railroadDiagram-SM67HX2B-CGfR0UsO.js} +1 -1
- package/dist/assets/{remote-desktop-panel-ganxVzJo.js → remote-desktop-panel-B4uIIoh3.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-Cjv_VLZj.js → requirementDiagram-X7JNWC4A-CJq96anP.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-ChHoiXzB.js → sankeyDiagram-UM26HJRW-BdZSA65i.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-B67gwOH0.js → sequenceDiagram-ZO4K6R2Y-B5W6udgn.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-DOr4ZALb.js → sizeCapture-INFHLROL-CuKCNVLn.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-DnoBtm-E.js → stateDiagram-v2-TBUQTH76-C7mAgpvB.js} +1 -1
- package/dist/assets/{styles-BcVNrxGE.js → styles-C_rlkDrt.js} +2 -2
- package/dist/assets/styles-bUbK33f1.css +1 -0
- package/dist/assets/{swimlanes-N4OXWK64-2TFXb7MH.js → swimlanes-N4OXWK64-D-mimAU7.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-Dn31PG7h.js +8 -0
- package/dist/assets/{team-share-C9qIusMs.js → team-share-wuAG66b7.js} +1 -1
- package/dist/assets/{timeline-definition-YOQAKGHF-4zjxAMyG.js → timeline-definition-YOQAKGHF-C5prnOXi.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-CCfZ1eoO.js → usecaseDiagram-VIAY4XPW-BC-9KKSF.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-h7rTFRTN.js → vennDiagram-BLWOH2XV-LCNTQN9e.js} +1 -1
- package/dist/assets/{vi-KgT8L8Qj.js → vi-NX09tr5q.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-CXwA22zv.js → wardleyDiagram-YMQ3BMBF-CtWGEzVU.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-d4qol5BJ.js → xychartDiagram-TAQBALBS-DadPRdBp.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/rail.html +5 -5
- package/dist-server/container-mcp.js +22 -21
- package/dist-server/index.js +106 -105
- package/dist-server/openmausbot.js +24 -24
- package/dist-server/package.json +1 -1
- package/dist-server/pair-cli.js +24 -24
- package/dist-server/server/config.js +6 -1
- package/dist-server/server/container-computer.js +4 -4
- package/dist-server/server/host/team-connections-host.js +2 -2
- package/dist-server/server/index.js +20 -3
- package/dist-server/server/mcp-registry.js +2 -2
- package/dist-server/server/service-unit.js +1 -1
- package/dist-server/server/skill-library.js +1 -1
- package/dist-server/server/team-library.js +2 -2
- package/dist-server/shared/grok-import.js +1 -1
- package/dist-server/shared/package-format.js +3 -3
- package/dist-server/vps-container-mcp.js +22 -21
- package/dist-server/workspace-backup.worker.js +20 -20
- package/package.json +1 -1
- package/dist/assets/NewBotDialog-D9e-ED-j.js +0 -1
- package/dist/assets/TeamLibraryPanel-B-R6YFK-.js +0 -1
- package/dist/assets/channel-DRGNbeY-.js +0 -1
- package/dist/assets/styles-D-yh7Z23.css +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-C_836Lnu.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(),
|
|
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().
|
|
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().
|
|
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("
|
|
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.
|
|
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,
|
|
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.
|
|
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.
|
|
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().
|
|
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.
|
|
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(
|
|
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.
|
|
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().
|
|
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(),
|
|
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.
|
|
1899
|
-
|
|
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()}).
|
|
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().
|
|
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.
|
|
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=
|
|
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(
|
|
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","
|
|
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=
|
|
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,"&").replace(/</g,"<").replace(/>/g,">")}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?[" \
|
package/dist-server/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"0.
|
|
1
|
+
{"type":"module","version":"0.3.1"}
|
package/dist-server/pair-cli.js
CHANGED
|
@@ -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(),
|
|
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().
|
|
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().
|
|
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("
|
|
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.
|
|
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,
|
|
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.
|
|
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.
|
|
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().
|
|
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.
|
|
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(
|
|
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.
|
|
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().
|
|
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(),
|
|
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.
|
|
1898
|
-
|
|
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()}).
|
|
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().
|
|
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.
|
|
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=
|
|
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(
|
|
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","
|
|
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=
|
|
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,"&").replace(/</g,"<").replace(/>/g,">")}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
|
|
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/
|
|
25
|
-
export const IMAGE_LAYER_VERSION = "
|
|
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/
|
|
38
|
-
export const CUA_EXECUTABLE = "/usr/local/libexec/
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
62
|
-
: `Environment variable “${name}” is reserved by
|
|
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=
|
|
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
|
|
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/
|
|
6
|
-
export const TEAM_LIBRARY_RAW_ROOT = "https://raw.githubusercontent.com/
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(),
|
|
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(),
|
|
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().
|
|
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.
|
|
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),
|
|
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.
|
|
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),
|
|
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.
|
|
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(),
|
|
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.
|
|
1494
|
-
object({key:optionalText2}).optional(),
|
|
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.
|
|
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).
|
|
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.
|
|
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).
|
|
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,
|
|
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(
|
|
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.
|
|
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(
|
|
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.
|
|
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/
|
|
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){
|