limixbot 0.3.21 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/assets/{ActivityPanel-Mm1AdBsr.js → ActivityPanel-BkpnvFMV.js} +1 -1
  2. package/dist/assets/App-5fWd2qWI.js +242 -0
  3. package/dist/assets/{AppEventEditor-Cgwtkp8X.js → AppEventEditor-4U6g9rYH.js} +1 -1
  4. package/dist/assets/{BotSettingsDialog-9DJvaJyA.js → BotSettingsDialog-DBAjMChc.js} +1 -1
  5. package/dist/assets/{BrowserPanel-Bf3wrH1-.js → BrowserPanel-DKxFFmVF.js} +1 -1
  6. package/dist/assets/{BrowserProfilesManager-CV3LMXnH.js → BrowserProfilesManager-DbsOGGoV.js} +1 -1
  7. package/dist/assets/{CloudAddDialog-B6_ctBlp.js → CloudAddDialog-I2EDWXA8.js} +1 -1
  8. package/dist/assets/{ComputerFilesPane-DUKJxzPV.js → ComputerFilesPane-DA4Txmh9.js} +1 -1
  9. package/dist/assets/{ComputerPanel-DQLD56ji.js → ComputerPanel-B3EgKF7M.js} +2 -2
  10. package/dist/assets/{DataPanel-CqPvkhZs.js → DataPanel-DALLlVzz.js} +1 -1
  11. package/dist/assets/{DesktopViewer-DTBmRKHz.js → DesktopViewer-BTFnhvej.js} +1 -1
  12. package/dist/assets/{FilesView-BTIH8GhL.js → FilesView-DfvDhNdO.js} +1 -1
  13. package/dist/assets/{GrokMoveDialog-ipjhCMdt.js → GrokMoveDialog-CVgxiDZG.js} +1 -1
  14. package/dist/assets/{InspectorPanel-CYJ3PKQE.js → InspectorPanel-B8d5f_Z7.js} +1 -1
  15. package/dist/assets/{KeyboardShortcutsModal-DbroQplB.js → KeyboardShortcutsModal-C4Sy1Y5Q.js} +1 -1
  16. package/dist/assets/{LiveDesktop-CjcPYyQC.js → LiveDesktop-BdLw7_qb.js} +1 -1
  17. package/dist/assets/{LocalVmWorkspace-DLOgAgD1.js → LocalVmWorkspace-Dd8v6HSb.js} +1 -1
  18. package/dist/assets/{MacLocalControl-BKOo9Q9t.js → MacLocalControl-DBItoJQX.js} +1 -1
  19. package/dist/assets/{MarkdownFilePreview-Ck90v9JO.js → MarkdownFilePreview-tXLtgk1m.js} +1 -1
  20. package/dist/assets/{MenuMotion-CobYpP7L.js → MenuMotion-DnbwlBMa.js} +1 -1
  21. package/dist/assets/{NewBotDialog-CPh_4jgn.js → NewBotDialog-sfd-FzAz.js} +1 -1
  22. package/dist/assets/{PhoneAppDialog-C8LY6ZYR.js → PhoneAppDialog-D4klvpz5.js} +1 -1
  23. package/dist/assets/{PlacesRail-CUntVv3u.js → PlacesRail-BYBRFGDz.js} +1 -1
  24. package/dist/assets/{PluginsPanel-CPNu9R4X.js → PluginsPanel-DUOw0nhP.js} +1 -1
  25. package/dist/assets/{ProIntroduction-mmdyWV6u.js → ProIntroduction-B1eqbu20.js} +1 -1
  26. package/dist/assets/{RemoteAgentSettingsPanel-D_-DQsXX.js → RemoteAgentSettingsPanel-B46lWStL.js} +1 -1
  27. package/dist/assets/{RoomPanel-Bl074tib.js → RoomPanel-DBKyhryu.js} +1 -1
  28. package/dist/assets/{RoutinesPage-BBqOFUgN.js → RoutinesPage-CCSHgNRs.js} +1 -1
  29. package/dist/assets/SettingsModal-CwXiblca.js +15 -0
  30. package/dist/assets/{ShareTeamDialog-lWV9SoFf.js → ShareTeamDialog-DuSs1saG.js} +1 -1
  31. package/dist/assets/{SignedInSites-BtB_gJc5.js → SignedInSites-BdxFX6Wt.js} +1 -1
  32. package/dist/assets/{TeamLibraryPanel-CicCxQWY.js → TeamLibraryPanel-Djaf5q_z.js} +1 -1
  33. package/dist/assets/{TeamMapPage-DC2UVHtD.js → TeamMapPage-PW3Ots-y.js} +1 -1
  34. package/dist/assets/{TriggersPage-DV-VkZxS.js → TriggersPage-D5jH7bR3.js} +1 -1
  35. package/dist/assets/{VisibilitySection-DxS0LSuh.js → VisibilitySection-yE3ZIXKk.js} +1 -1
  36. package/dist/assets/{WebhookTrigger-CbjFXdP6.js → WebhookTrigger-doGyrUZA.js} +1 -1
  37. package/dist/assets/{WorksOnGrid-DwzG9r3j.js → WorksOnGrid-DWvjM4aV.js} +1 -1
  38. package/dist/assets/{abnfDiagram-YUKMZFIV-DEyDkr0Q.js → abnfDiagram-YUKMZFIV-Bs9i-eLj.js} +1 -1
  39. package/dist/assets/{activity-CbpNb0MQ.js → activity-DIhOTAmd.js} +1 -1
  40. package/dist/assets/{architectureDiagram-47P4ROYG-CGTtcA9N.js → architectureDiagram-47P4ROYG-CR-7WHVu.js} +1 -1
  41. package/dist/assets/{blockDiagram-E7TT5TSB-DT9DFOL_.js → blockDiagram-E7TT5TSB-Cx9qUsrY.js} +1 -1
  42. package/dist/assets/{c4Diagram-CRA5TL53-DpERK75F.js → c4Diagram-CRA5TL53-CtuUaTlE.js} +1 -1
  43. package/dist/assets/{calendar-days-DE6WL-x2.js → calendar-days-DyyECwZf.js} +1 -1
  44. package/dist/assets/channel-DXuqtdcQ.js +1 -0
  45. package/dist/assets/{chunk-2Q5K7J3B-wHwpVFi3.js → chunk-2Q5K7J3B-DIvFRpG0.js} +1 -1
  46. package/dist/assets/{chunk-5VM5RSS4-CfqwqtdU.js → chunk-5VM5RSS4-Cxp3RKyR.js} +1 -1
  47. package/dist/assets/{chunk-7TKQ45FW-BRxQFxT-.js → chunk-7TKQ45FW-DSOW_9p2.js} +1 -1
  48. package/dist/assets/{chunk-AW2ZBBNX-Ca3w_5Wz.js → chunk-AW2ZBBNX-zV216OhN.js} +1 -1
  49. package/dist/assets/{chunk-FVRAUYC3-CO8Syt2Z.js → chunk-FVRAUYC3-BOtXkSrZ.js} +2 -2
  50. package/dist/assets/{chunk-HTAEGDNF-Cnx9DnWv.js → chunk-HTAEGDNF-DiV1eG2w.js} +1 -1
  51. package/dist/assets/{chunk-JWPE2WC7-DefKEriK.js → chunk-JWPE2WC7-BZJyqcw-.js} +1 -1
  52. package/dist/assets/{chunk-KQW6MTUR-B6WWWz_R.js → chunk-KQW6MTUR-DabkPo_d.js} +1 -1
  53. package/dist/assets/{chunk-XXDRQBXY-BFU1-B3X.js → chunk-XXDRQBXY-CcZGTVYy.js} +1 -1
  54. package/dist/assets/{classDiagram-v2-K4WV4PDN-BePCpZI3.js → classDiagram-v2-K4WV4PDN-DfOdVcjL.js} +1 -1
  55. package/dist/assets/{coins-D1fhjgas.js → coins-s4HyWHyQ.js} +1 -1
  56. package/dist/assets/{core-zyskLUd7.js → core-D7M03RiE.js} +1 -1
  57. package/dist/assets/{cose-bilkent-JH36ORCC-D8emtvin.js → cose-bilkent-JH36ORCC-CqrD5E-Q.js} +1 -1
  58. package/dist/assets/{cynefin-EF2NZ3EQ-DUEsfFVq.js → cynefin-EF2NZ3EQ-fcIOWtrM.js} +1 -1
  59. package/dist/assets/{cynefinDiagram-3GCD6N5R-duonepNA.js → cynefinDiagram-3GCD6N5R-Cx2XYJ57.js} +1 -1
  60. package/dist/assets/{dagre-W4DXFKR2-D4NywFNB.js → dagre-W4DXFKR2-D6f_32GP.js} +1 -1
  61. package/dist/assets/{diagram-2UJZ2QOL-cjiJTdiH.js → diagram-2UJZ2QOL-IxXxA3zr.js} +1 -1
  62. package/dist/assets/{diagram-OVF4WLC6-D6M8A9DS.js → diagram-OVF4WLC6-DzRS9og-.js} +1 -1
  63. package/dist/assets/{diagram-PFPMY2P6-CVAzAz2N.js → diagram-PFPMY2P6-CA4cF9TP.js} +1 -1
  64. package/dist/assets/{diagram-UMYRVEAY-DLvfYJwO.js → diagram-UMYRVEAY-B5YdB3mN.js} +1 -1
  65. package/dist/assets/{diagram-YEKJPTXX-D8qCH--0.js → diagram-YEKJPTXX-D8jMUZQ7.js} +1 -1
  66. package/dist/assets/{diagram-ZIFT7M5P-s55SHvTR.js → diagram-ZIFT7M5P-D9FKtuee.js} +1 -1
  67. package/dist/assets/{ebnfDiagram-VR2GEFS7-B93cNJNn.js → ebnfDiagram-VR2GEFS7-BipEfLA3.js} +1 -1
  68. package/dist/assets/{elk-IJKZMXRS-BsJqO8aU.js → elk-IJKZMXRS-ByA43ZYx.js} +1 -1
  69. package/dist/assets/{erDiagram-O2IAPWRE-BXF1G3Js.js → erDiagram-O2IAPWRE-hlDRgJN-.js} +1 -1
  70. package/dist/assets/{file-up-Cg2kYQkd.js → file-up-DXcOpz8w.js} +1 -1
  71. package/dist/assets/{flowDiagram-OXPTDLAJ-BKjjYwz9.js → flowDiagram-OXPTDLAJ-BuCuOW1m.js} +1 -1
  72. package/dist/assets/{ganttDiagram-R7TSEDQI-DhtZJtPm.js → ganttDiagram-R7TSEDQI-Bk16Ilgi.js} +1 -1
  73. package/dist/assets/{gitGraphDiagram-XJZIOB7I-BfRlcF5z.js → gitGraphDiagram-XJZIOB7I-CN3BXWBF.js} +1 -1
  74. package/dist/assets/{import-name-DT6x8SH1.js → import-name-wz0BNJ-d.js} +1 -1
  75. package/dist/assets/{index--etc8Lh7.js → index-BJo4IICg.js} +2 -2
  76. package/dist/assets/{index-BK27ZkYf.js → index-BR_1_bou.js} +1 -1
  77. package/dist/assets/{infoDiagram-5W2HQ5XZ-CywmYwco.js → infoDiagram-5W2HQ5XZ-DSUAydoj.js} +1 -1
  78. package/dist/assets/{ishikawaDiagram-K3B6WC7H-DpXXqau5.js → ishikawaDiagram-K3B6WC7H-C1_ZiQE2.js} +1 -1
  79. package/dist/assets/{journeyDiagram-COXZFDF6-D1uMWGbz.js → journeyDiagram-COXZFDF6-CAGOqBTO.js} +1 -1
  80. package/dist/assets/{kanban-definition-P3RFRI5V-Bz0zjqQs.js → kanban-definition-P3RFRI5V-Dj3_9GgV.js} +1 -1
  81. package/dist/assets/{mcp-servers-DyW90x_D.js → mcp-servers-qzidl6IU.js} +1 -1
  82. package/dist/assets/{mermaid.core-Dnv6mcJ4.js → mermaid.core-CcbkAG9m.js} +4 -4
  83. package/dist/assets/{mindmap-definition-LZFPQGKD-CFEkTgom.js → mindmap-definition-LZFPQGKD-C_gFeuC9.js} +1 -1
  84. package/dist/assets/{minimize-o-OFVasg.js → minimize-DixQTKye.js} +1 -1
  85. package/dist/assets/{monitor-7oLB-7rZ.js → monitor-IwDx0ohO.js} +1 -1
  86. package/dist/assets/{new-bot-vTUVmgdn.js → new-bot-COptZjiW.js} +1 -1
  87. package/dist/assets/{org-library-DZclNfAa.js → org-library-97Cfj4XD.js} +1 -1
  88. package/dist/assets/{package-format-Bf1YgVUD.js → package-format-MbGfBQ0g.js} +1 -1
  89. package/dist/assets/{pegDiagram-BGZESJAR-DKt4SMwc.js → pegDiagram-BGZESJAR-CYa91QJf.js} +1 -1
  90. package/dist/assets/{pieDiagram-CAPJLFHJ-B9taKUge.js → pieDiagram-CAPJLFHJ-H4g7rmhD.js} +1 -1
  91. package/dist/assets/{quadrantDiagram-GDMTTRAM-DQjB7Jbz.js → quadrantDiagram-GDMTTRAM-CkHV6SSw.js} +1 -1
  92. package/dist/assets/{rail-BBdJiVR1.js → rail-SzaGJCSZ.js} +1 -1
  93. package/dist/assets/{railroadDiagram-SM67HX2B-DQOivC56.js → railroadDiagram-SM67HX2B-Kx3ccbrH.js} +1 -1
  94. package/dist/assets/{remote-desktop-panel-AqU9h8PU.js → remote-desktop-panel-CVuN83Ny.js} +1 -1
  95. package/dist/assets/{requirementDiagram-X7JNWC4A-BLgwXDEl.js → requirementDiagram-X7JNWC4A-BcNRqLgf.js} +1 -1
  96. package/dist/assets/{sankeyDiagram-UM26HJRW-g2GlJNjj.js → sankeyDiagram-UM26HJRW-CQP982o-.js} +1 -1
  97. package/dist/assets/{sequenceDiagram-ZO4K6R2Y-_08U7Ixl.js → sequenceDiagram-ZO4K6R2Y-BXkOAwlC.js} +1 -1
  98. package/dist/assets/{sizeCapture-INFHLROL-DZPfU3_U.js → sizeCapture-INFHLROL-BtuN-EAh.js} +1 -1
  99. package/dist/assets/{stateDiagram-v2-TBUQTH76-PXBjCkxd.js → stateDiagram-v2-TBUQTH76-CmlsJGhT.js} +1 -1
  100. package/dist/assets/styles-Di_mG4l3.css +1 -0
  101. package/dist/assets/{swimlanes-N4OXWK64-q1MhehBF.js → swimlanes-N4OXWK64-GH4PBeGD.js} +1 -1
  102. package/dist/assets/swimlanesDiagram-K3J5GTZL-VqQY3wNh.js +8 -0
  103. package/dist/assets/{team-share-xt--eeM_.js → team-share-B2cRBtNk.js} +1 -1
  104. package/dist/assets/{timeline-definition-YOQAKGHF-UBKh0GG-.js → timeline-definition-YOQAKGHF-j8Q7uetA.js} +1 -1
  105. package/dist/assets/{usecaseDiagram-VIAY4XPW-CccLioTT.js → usecaseDiagram-VIAY4XPW-Cz4ej3SQ.js} +1 -1
  106. package/dist/assets/{vennDiagram-BLWOH2XV-3Q39wQgE.js → vennDiagram-BLWOH2XV-BZ3IAGpt.js} +1 -1
  107. package/dist/assets/{wardleyDiagram-YMQ3BMBF-DtgEYK7j.js → wardleyDiagram-YMQ3BMBF-Bc32JfGA.js} +1 -1
  108. package/dist/assets/{xychartDiagram-TAQBALBS-DLTmsflK.js → xychartDiagram-TAQBALBS-s5XbB-l2.js} +1 -1
  109. package/dist/index.html +3 -3
  110. package/dist/rail.html +5 -5
  111. package/dist-server/index.js +24 -22
  112. package/dist-server/openmausbot.js +13 -12
  113. package/dist-server/package.json +1 -1
  114. package/dist-server/pair-cli.js +13 -12
  115. package/dist-server/server/drivers/antigravity.js +27 -1
  116. package/dist-server/server/limix-skill-hub.js +6 -8
  117. package/package.json +1 -1
  118. package/dist/assets/App-BgFOjdcx.js +0 -242
  119. package/dist/assets/SettingsModal-CZC8Y2Ps.js +0 -11
  120. package/dist/assets/channel-CETDvzTH.js +0 -1
  121. package/dist/assets/styles-B9SGxFnK.css +0 -1
  122. package/dist/assets/swimlanesDiagram-K3J5GTZL-pLYSpGVX.js +0 -8
  123. /package/dist/assets/{styles-BHtUK2qB.js → styles-ElM5u1od.js} +0 -0
@@ -4054,18 +4054,19 @@ null}var FREE_SPACE_MARGIN,DOWNLOAD_TIMEOUT_MS4,STAGING_PREFIX2,wait,INSTALL_REC
4054
4054
  class extends Error{status=409;constructor(message5){super(message5),this.name="AntigravitySetupError"}},installs2=new Map}});import{existsSync as existsSync28,mkdirSync as mkdirSync24,readFileSync as readFileSync29,writeFileSync as writeFileSync13}from"node:fs";import{homedir as homedir15}from"node:os";import{delimiter as delimiter10,join as join56}from"node:path";function findAgyCli(env=process.env){if(env.LIMIX_AGY_CLI==="0")return null;let win=process.platform==="win32",name=win?"agy.exe":"agy",candidates=[],localAppData=env.LOCALAPPDATA??process.env.LOCALAPPDATA;win&&localAppData&&candidates.push(join56(localAppData,
4055
4055
  "agy","bin",name)),win||candidates.push(join56(homedir15(),".local","bin",name));for(let dir of(env.PATH??env.Path??process.env.PATH??"").split(delimiter10))dir&&candidates.push(join56(dir,name));return candidates.find(candidate=>existsSync28(candidate))??null}function claimedBy(){try{let value=JSON.parse(readFileSync29(claimFile(),"utf8"));return typeof value.instanceId=="string"?value.instanceId:null}catch{return null}}function agyCliFor(instanceId,env=process.env){let cli=findAgyCli(env);if(!cli)
4056
4056
  return null;let owner=claimedBy();if(owner&&owner!==instanceId)return null;if(!owner)try{mkdirSync24(DATA_DIR,{recursive:!0}),writeFileSync13(claimFile(),JSON.stringify({instanceId,cli,at:new Date().toISOString()}))}catch{return null}return cli}function releaseAgyCli(instanceId){if(claimedBy()===instanceId)try{writeFileSync13(claimFile(),JSON.stringify({instanceId:null}))}catch{}}var claimFile,init_limix_agy_cli=__esm({"server/limix-agy-cli.ts"(){"use strict";init_config3();claimFile=()=>join56(
4057
- DATA_DIR,"limix-agy-cli.json")}});function normalizeAntigravityTurn(turn,offeredModels2){if(turn.variant!==void 0)return turn;let match=turn.model?.match(/^(.+)-(low|medium|high)$/u);return match&&offeredModels2.includes(match[1])&&!offeredModels2.includes(match[0])?{...turn,model:match[1],variant:match[2]}:turn}function antigravityPermissionMode(fullAuto,approvalMode){return fullAuto||approvalMode==="full"?"yolo":approvalMode==="edits"?"auto_edit":"default"}var STATIC_ANTIGRAVITY_MODELS,managedAsset,support,AcpAntigravityDriver,
4058
- AntigravityDriver,init_antigravity=__esm({"server/drivers/antigravity.ts"(){"use strict";init_antigravity_account();init_core3();init_antigravity_acp();init_antigravity_runtime();init_antigravity_release();init_antigravity_temp();init_env_path();init_limix_agy_cli();init_bundled();init_manifest();STATIC_ANTIGRAVITY_MODELS=bundledEngineCatalog("antigravity");managedAsset=resolveAntigravityReleaseAsset(),support={driverKind:"antigravityAgent",displayName:"Google Gemini (Antigravity)",get models(){
4059
- return currentEngineCatalog("antigravity")},defaultCli:"agy",nativeSource:"antigravity.acp",loginNote:"Antigravity needs a Google account \u2014 choose Sign in with Google in engine setup",install:{docsUrl:"https://github.com/agentclientprotocol/registry/tree/main/antigravity-acp",...managedAsset?{managed:{label:"Install official Antigravity",downloadBytes:managedAsset.archiveBytes}}:{}},images:!0,spawnArgs:()=>[],selectModel:{configId:"model"},modelVariants:!0,normalizeSessionSelection:normalizeAntigravityTurn,
4060
- sessionModelEnv:"AGY_ACP_DEFAULT_MODEL",sessionScopedApproval:!0,resumeMethod:"resume",clientFileSystem:!0,sanitizeToolPayload:!0,resolveCommand:async(env,config3,instanceId)=>{let agyCli=agyCliFor(instanceId,env);if(agyCli)return{command:agyCli,args:["acp"]};let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return profile.tempDirectory&&scheduleAntigravityTempSweep(instanceId),{command:runtime.executablePath,args:process.
4061
- platform==="linux"?["--uid="]:[],env:profile.environment}},resolveModels:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return currentEngineCatalog("antigravity");let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});if(!await antigravityProfileAuthenticated(profile))throw new Error(support.loginNote);return probeAntigravityModels({runtime,profile,fallbackDefault:currentEngineCatalog("antigravity").default})},
4062
- pickAuthMethod:methods=>methods.some(method=>method.id==="oauth-personal")?"oauth-personal":null,authFailure:"fail",requireAuthenticationBeforeSpawn:!0,isAuthenticated:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return!0;try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return antigravityProfileAuthenticated(profile)}catch{return!1}},snapshot:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,
4063
- env))return{state:"available",version:"Antigravity CLI",authenticated:!0};try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return{state:"available",version:runtime.version,authenticated:await antigravityProfileAuthenticated(profile),account:await antigravityAccount(profile.tokenPath)}}catch(error62){return{state:"unavailable",reason:error62 instanceof Error?error62.message:String(error62)}}},configureSession:async({
4064
- request:request2,sessionId,config:config3,turn,configOptions:configOptions2})=>{if(!Array.isArray(configOptions2)||!configOptions2.some(option=>option?.id==="mode"))return;let wanted=antigravityPermissionMode(config3.fullAuto,turn.approvalMode),result2=await request2("session/set_config_option",{sessionId,configId:"mode",value:wanted});if((Array.isArray(result2?.configOptions)?result2.configOptions.find(option=>option?.id==="mode")?.currentValue:void 0)!==wanted)throw new Error(`Antigravity did \
4065
- not apply ${wanted} permission mode.`)}},AcpAntigravityDriver=createAcpDriver(support),AntigravityDriver={...AcpAntigravityDriver,async create(input2){let base2=await AcpAntigravityDriver.create(input2);scheduleAntigravityTempSweep(input2.instanceId),scheduleAntigravityTempSweep(VERIFICATION_TEMP_KEY);let auth=new AntigravityAuthController(()=>{base2.refreshModels?.()}),installFailure,runtimeAndProfile=async()=>{let environment={...process.env,...input2.environment,PATH:augmentedPath()},runtime=await resolveAntigravityRuntime(
4066
- input2.config.cli,environment),profile=await prepareAntigravityProfile({instanceId:input2.instanceId,runtime,baseEnv:environment});return{runtime,profile}};return{...base2,get models(){return base2.models},get modelsUnconfirmed(){return base2.modelsUnconfirmed},snapshot:async()=>{let snapshot=await base2.snapshot();return snapshot.state==="available"&&(installFailure=void 0),snapshot.state==="unavailable"&&installFailure?{...snapshot,reason:installFailure}:snapshot},...antigravityManagedInstallAvailable()?
4067
- {installRuntime:async()=>{installFailure=void 0;try{await installAntigravityRuntime({validate:validateAntigravityRuntime})}catch(error62){throw installFailure=error62 instanceof Error?error62.message:String(error62),error62}}}:{},startAuthentication:async()=>{let{runtime,profile}=await runtimeAndProfile();return auth.start(runtime,profile)},completeAuthentication:async(flowId,callbackUrl)=>auth.complete(flowId,callbackUrl),cancelAuthentication:async()=>auth.cancel(),signOut:async()=>{auth.cancel(),
4068
- await removeAntigravitySignIn(input2.instanceId),releaseAgyCli(input2.instanceId)},dispose:async()=>{auth.cancel(),await base2.dispose()}}}}}});function cliVersionProbe(cli,run6=execCli){let read2=cliVersionReader(cli),pending;return env=>{if(pending)return pending;let deadline=Date.now()+CLI_VERSION_TIMEOUT_MS,attempt=()=>new Promise(resolve35=>{run6(cli,["--version"],{timeout:Math.max(1,deadline-Date.now()),env},(error62,stdout2)=>resolve35({error:error62,stdout:stdout2}))});return pending=(async()=>{let result2=await attempt();return!result2.error&&!result2.stdout.trim()&&Date.now()<deadline&&(result2=await attempt()),read2(result2.error,
4057
+ DATA_DIR,"limix-agy-cli.json")}});function normalizeAntigravityTurn(turn,offeredModels2){if(turn.variant!==void 0)return turn;let match=turn.model?.match(/^(.+)-(low|medium|high)$/u);return match&&offeredModels2.includes(match[1])&&!offeredModels2.includes(match[0])?{...turn,model:match[1],variant:match[2]}:turn}function antigravityPermissionMode(fullAuto,approvalMode){return fullAuto||approvalMode==="full"?"yolo":approvalMode==="edits"?"auto_edit":"default"}function limixModeFor(wanted,option){let offered=[],collect=list5=>{if(Array.
4058
+ isArray(list5))for(let item of list5){item&&typeof item=="object"&&Array.isArray(item.options)&&collect(item.options);let value=item&&typeof item=="object"?item.value??item.id:item;typeof value=="string"&&offered.push(value)}};return collect(option?.options),offered.length===0?wanted:(LIMIX_MODE_ALIASES[wanted]??[wanted]).find(value=>offered.includes(value))??null}var STATIC_ANTIGRAVITY_MODELS,managedAsset,LIMIX_MODE_ALIASES,support,AcpAntigravityDriver,AntigravityDriver,init_antigravity=__esm({
4059
+ "server/drivers/antigravity.ts"(){"use strict";init_antigravity_account();init_core3();init_antigravity_acp();init_antigravity_runtime();init_antigravity_release();init_antigravity_temp();init_env_path();init_limix_agy_cli();init_bundled();init_manifest();STATIC_ANTIGRAVITY_MODELS=bundledEngineCatalog("antigravity");managedAsset=resolveAntigravityReleaseAsset(),LIMIX_MODE_ALIASES={yolo:["yolo","bypassPermissions","bypass_permissions","full","auto","autoEdit","auto_edit","acceptEdits"],auto_edit:[
4060
+ "auto_edit","autoEdit","acceptEdits","accept_edits"],default:["default","ask","normal"]};support={driverKind:"antigravityAgent",displayName:"Google Gemini (Antigravity)",get models(){return currentEngineCatalog("antigravity")},defaultCli:"agy",nativeSource:"antigravity.acp",loginNote:"Antigravity needs a Google account \u2014 choose Sign in with Google in engine setup",install:{docsUrl:"https://github.com/agentclientprotocol/registry/tree/main/antigravity-acp",...managedAsset?{managed:{label:"In\
4061
+ stall official Antigravity",downloadBytes:managedAsset.archiveBytes}}:{}},images:!0,spawnArgs:()=>[],selectModel:{configId:"model"},modelVariants:!0,normalizeSessionSelection:normalizeAntigravityTurn,sessionModelEnv:"AGY_ACP_DEFAULT_MODEL",sessionScopedApproval:!0,resumeMethod:"resume",clientFileSystem:!0,sanitizeToolPayload:!0,resolveCommand:async(env,config3,instanceId)=>{let agyCli=agyCliFor(instanceId,env);if(agyCli)return{command:agyCli,args:["acp"]};let runtime=await resolveAntigravityRuntime(
4062
+ config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return profile.tempDirectory&&scheduleAntigravityTempSweep(instanceId),{command:runtime.executablePath,args:process.platform==="linux"?["--uid="]:[],env:profile.environment}},resolveModels:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return currentEngineCatalog("antigravity");let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,
4063
+ baseEnv:env});if(!await antigravityProfileAuthenticated(profile))throw new Error(support.loginNote);return probeAntigravityModels({runtime,profile,fallbackDefault:currentEngineCatalog("antigravity").default})},pickAuthMethod:methods=>methods.some(method=>method.id==="oauth-personal")?"oauth-personal":null,authFailure:"fail",requireAuthenticationBeforeSpawn:!0,isAuthenticated:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return!0;try{let runtime=await resolveAntigravityRuntime(config3.
4064
+ cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return antigravityProfileAuthenticated(profile)}catch{return!1}},snapshot:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return{state:"available",version:"Antigravity CLI",authenticated:!0};try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return{state:"available",version:runtime.version,authenticated:await antigravityProfileAuthenticated(
4065
+ profile),account:await antigravityAccount(profile.tokenPath)}}catch(error62){return{state:"unavailable",reason:error62 instanceof Error?error62.message:String(error62)}}},configureSession:async({request:request2,sessionId,config:config3,turn,configOptions:configOptions2})=>{if(!Array.isArray(configOptions2)||!configOptions2.some(option=>option?.id==="mode"))return;let wanted=limixModeFor(antigravityPermissionMode(config3.fullAuto,turn.approvalMode),configOptions2.find(option=>option?.id==="mode"));
4066
+ if(!wanted)return;let result2=await request2("session/set_config_option",{sessionId,configId:"mode",value:wanted});if((Array.isArray(result2?.configOptions)?result2.configOptions.find(option=>option?.id==="mode")?.currentValue:void 0)!==wanted)throw new Error(`Antigravity did not apply ${wanted} permission mode.`)}},AcpAntigravityDriver=createAcpDriver(support),AntigravityDriver={...AcpAntigravityDriver,async create(input2){let base2=await AcpAntigravityDriver.create(input2);scheduleAntigravityTempSweep(
4067
+ input2.instanceId),scheduleAntigravityTempSweep(VERIFICATION_TEMP_KEY);let auth=new AntigravityAuthController(()=>{base2.refreshModels?.()}),installFailure,runtimeAndProfile=async()=>{let environment={...process.env,...input2.environment,PATH:augmentedPath()},runtime=await resolveAntigravityRuntime(input2.config.cli,environment),profile=await prepareAntigravityProfile({instanceId:input2.instanceId,runtime,baseEnv:environment});return{runtime,profile}};return{...base2,get models(){return base2.models},
4068
+ get modelsUnconfirmed(){return base2.modelsUnconfirmed},snapshot:async()=>{let snapshot=await base2.snapshot();return snapshot.state==="available"&&(installFailure=void 0),snapshot.state==="unavailable"&&installFailure?{...snapshot,reason:installFailure}:snapshot},...antigravityManagedInstallAvailable()?{installRuntime:async()=>{installFailure=void 0;try{await installAntigravityRuntime({validate:validateAntigravityRuntime})}catch(error62){throw installFailure=error62 instanceof Error?error62.message:
4069
+ String(error62),error62}}}:{},startAuthentication:async()=>{let{runtime,profile}=await runtimeAndProfile();return auth.start(runtime,profile)},completeAuthentication:async(flowId,callbackUrl)=>auth.complete(flowId,callbackUrl),cancelAuthentication:async()=>auth.cancel(),signOut:async()=>{auth.cancel(),await removeAntigravitySignIn(input2.instanceId),releaseAgyCli(input2.instanceId)},dispose:async()=>{auth.cancel(),await base2.dispose()}}}}}});function cliVersionProbe(cli,run6=execCli){let read2=cliVersionReader(cli),pending;return env=>{if(pending)return pending;let deadline=Date.now()+CLI_VERSION_TIMEOUT_MS,attempt=()=>new Promise(resolve35=>{run6(cli,["--version"],{timeout:Math.max(1,deadline-Date.now()),env},(error62,stdout2)=>resolve35({error:error62,stdout:stdout2}))});return pending=(async()=>{let result2=await attempt();return!result2.error&&!result2.stdout.trim()&&Date.now()<deadline&&(result2=await attempt()),read2(result2.error,
4069
4070
  result2.stdout)})().finally(()=>{pending=void 0}),pending}}var init_cli_version_probe=__esm({"server/cli-version-probe.ts"(){"use strict";init_procs()}});function claudeAuthStatus(cli,env,run6=execCli){return new Promise(resolve35=>{run6(cli,["auth","status","--json"],{timeout:8e3,maxBuffer:65536,env},(error62,stdout2)=>{if(error62?.killed)return resolve35({});try{let status2=JSON.parse(stdout2),loggedIn=status2&&typeof status2=="object"&&"loggedIn"in status2?status2.loggedIn:void 0;if(loggedIn!==!0)return resolve35(loggedIn===!1?{authenticated:!1}:{});let identity=status2,boundedText2=(value,max)=>typeof value=="string"&&value.trim().length>0&&value.
4070
4071
  length<=max&&!/[\p{Cc}\p{Cf}]/u.test(value)?value.trim():void 0,candidateEmail=boundedText2(identity.email,254),email3=candidateEmail&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(candidateEmail)?candidateEmail:void 0,organization=boundedText2(identity.orgName,160),account2={...email3?{email:email3}:{},...organization?{organization}:{},...identity.authMethod==="api_key"?{method:"api-key"}:{}};resolve35({authenticated:!0,...Object.keys(account2).length?{account:account2}:{}})}catch{resolve35({})}})})}var init_claude_auth_status=__esm(
4071
4072
  {"server/drivers/claude-auth-status.ts"(){"use strict";init_procs()}});import{readFileSync as readFileSync30}from"node:fs";import{join as join57}from"node:path";function projectMcpServers(cwd){let parsed;try{parsed=JSON.parse(readFileSync30(join57(cwd,".mcp.json"),"utf8"))}catch{return{}}let servers=parsed?.mcpServers;if(!servers||typeof servers!="object"||Array.isArray(servers))return{};let out={};for(let[name,server]of Object.entries(servers))server&&typeof server=="object"&&!Array.isArray(server)&&(out[name]=server);return out}var init_claude_project_mcp=__esm({
@@ -1 +1 @@
1
- {"type":"module","version":"0.3.21"}
1
+ {"type":"module","version":"0.3.23"}
@@ -4053,18 +4053,19 @@ null}var FREE_SPACE_MARGIN,DOWNLOAD_TIMEOUT_MS4,STAGING_PREFIX2,wait,INSTALL_REC
4053
4053
  class extends Error{status=409;constructor(message5){super(message5),this.name="AntigravitySetupError"}},installs2=new Map}});import{existsSync as existsSync28,mkdirSync as mkdirSync24,readFileSync as readFileSync29,writeFileSync as writeFileSync13}from"node:fs";import{homedir as homedir15}from"node:os";import{delimiter as delimiter10,join as join56}from"node:path";function findAgyCli(env=process.env){if(env.LIMIX_AGY_CLI==="0")return null;let win=process.platform==="win32",name=win?"agy.exe":"agy",candidates=[],localAppData=env.LOCALAPPDATA??process.env.LOCALAPPDATA;win&&localAppData&&candidates.push(join56(localAppData,
4054
4054
  "agy","bin",name)),win||candidates.push(join56(homedir15(),".local","bin",name));for(let dir of(env.PATH??env.Path??process.env.PATH??"").split(delimiter10))dir&&candidates.push(join56(dir,name));return candidates.find(candidate=>existsSync28(candidate))??null}function claimedBy(){try{let value=JSON.parse(readFileSync29(claimFile(),"utf8"));return typeof value.instanceId=="string"?value.instanceId:null}catch{return null}}function agyCliFor(instanceId,env=process.env){let cli=findAgyCli(env);if(!cli)
4055
4055
  return null;let owner=claimedBy();if(owner&&owner!==instanceId)return null;if(!owner)try{mkdirSync24(DATA_DIR,{recursive:!0}),writeFileSync13(claimFile(),JSON.stringify({instanceId,cli,at:new Date().toISOString()}))}catch{return null}return cli}function releaseAgyCli(instanceId){if(claimedBy()===instanceId)try{writeFileSync13(claimFile(),JSON.stringify({instanceId:null}))}catch{}}var claimFile,init_limix_agy_cli=__esm({"server/limix-agy-cli.ts"(){"use strict";init_config3();claimFile=()=>join56(
4056
- DATA_DIR,"limix-agy-cli.json")}});function normalizeAntigravityTurn(turn,offeredModels2){if(turn.variant!==void 0)return turn;let match=turn.model?.match(/^(.+)-(low|medium|high)$/u);return match&&offeredModels2.includes(match[1])&&!offeredModels2.includes(match[0])?{...turn,model:match[1],variant:match[2]}:turn}function antigravityPermissionMode(fullAuto,approvalMode){return fullAuto||approvalMode==="full"?"yolo":approvalMode==="edits"?"auto_edit":"default"}var STATIC_ANTIGRAVITY_MODELS,managedAsset,support,AcpAntigravityDriver,
4057
- AntigravityDriver,init_antigravity=__esm({"server/drivers/antigravity.ts"(){"use strict";init_antigravity_account();init_core3();init_antigravity_acp();init_antigravity_runtime();init_antigravity_release();init_antigravity_temp();init_env_path();init_limix_agy_cli();init_bundled();init_manifest();STATIC_ANTIGRAVITY_MODELS=bundledEngineCatalog("antigravity");managedAsset=resolveAntigravityReleaseAsset(),support={driverKind:"antigravityAgent",displayName:"Google Gemini (Antigravity)",get models(){
4058
- return currentEngineCatalog("antigravity")},defaultCli:"agy",nativeSource:"antigravity.acp",loginNote:"Antigravity needs a Google account \u2014 choose Sign in with Google in engine setup",install:{docsUrl:"https://github.com/agentclientprotocol/registry/tree/main/antigravity-acp",...managedAsset?{managed:{label:"Install official Antigravity",downloadBytes:managedAsset.archiveBytes}}:{}},images:!0,spawnArgs:()=>[],selectModel:{configId:"model"},modelVariants:!0,normalizeSessionSelection:normalizeAntigravityTurn,
4059
- sessionModelEnv:"AGY_ACP_DEFAULT_MODEL",sessionScopedApproval:!0,resumeMethod:"resume",clientFileSystem:!0,sanitizeToolPayload:!0,resolveCommand:async(env,config3,instanceId)=>{let agyCli=agyCliFor(instanceId,env);if(agyCli)return{command:agyCli,args:["acp"]};let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return profile.tempDirectory&&scheduleAntigravityTempSweep(instanceId),{command:runtime.executablePath,args:process.
4060
- platform==="linux"?["--uid="]:[],env:profile.environment}},resolveModels:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return currentEngineCatalog("antigravity");let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});if(!await antigravityProfileAuthenticated(profile))throw new Error(support.loginNote);return probeAntigravityModels({runtime,profile,fallbackDefault:currentEngineCatalog("antigravity").default})},
4061
- pickAuthMethod:methods=>methods.some(method=>method.id==="oauth-personal")?"oauth-personal":null,authFailure:"fail",requireAuthenticationBeforeSpawn:!0,isAuthenticated:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return!0;try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return antigravityProfileAuthenticated(profile)}catch{return!1}},snapshot:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,
4062
- env))return{state:"available",version:"Antigravity CLI",authenticated:!0};try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return{state:"available",version:runtime.version,authenticated:await antigravityProfileAuthenticated(profile),account:await antigravityAccount(profile.tokenPath)}}catch(error62){return{state:"unavailable",reason:error62 instanceof Error?error62.message:String(error62)}}},configureSession:async({
4063
- request:request2,sessionId,config:config3,turn,configOptions:configOptions2})=>{if(!Array.isArray(configOptions2)||!configOptions2.some(option=>option?.id==="mode"))return;let wanted=antigravityPermissionMode(config3.fullAuto,turn.approvalMode),result2=await request2("session/set_config_option",{sessionId,configId:"mode",value:wanted});if((Array.isArray(result2?.configOptions)?result2.configOptions.find(option=>option?.id==="mode")?.currentValue:void 0)!==wanted)throw new Error(`Antigravity did \
4064
- not apply ${wanted} permission mode.`)}},AcpAntigravityDriver=createAcpDriver(support),AntigravityDriver={...AcpAntigravityDriver,async create(input2){let base2=await AcpAntigravityDriver.create(input2);scheduleAntigravityTempSweep(input2.instanceId),scheduleAntigravityTempSweep(VERIFICATION_TEMP_KEY);let auth=new AntigravityAuthController(()=>{base2.refreshModels?.()}),installFailure,runtimeAndProfile=async()=>{let environment={...process.env,...input2.environment,PATH:augmentedPath()},runtime=await resolveAntigravityRuntime(
4065
- input2.config.cli,environment),profile=await prepareAntigravityProfile({instanceId:input2.instanceId,runtime,baseEnv:environment});return{runtime,profile}};return{...base2,get models(){return base2.models},get modelsUnconfirmed(){return base2.modelsUnconfirmed},snapshot:async()=>{let snapshot=await base2.snapshot();return snapshot.state==="available"&&(installFailure=void 0),snapshot.state==="unavailable"&&installFailure?{...snapshot,reason:installFailure}:snapshot},...antigravityManagedInstallAvailable()?
4066
- {installRuntime:async()=>{installFailure=void 0;try{await installAntigravityRuntime({validate:validateAntigravityRuntime})}catch(error62){throw installFailure=error62 instanceof Error?error62.message:String(error62),error62}}}:{},startAuthentication:async()=>{let{runtime,profile}=await runtimeAndProfile();return auth.start(runtime,profile)},completeAuthentication:async(flowId,callbackUrl)=>auth.complete(flowId,callbackUrl),cancelAuthentication:async()=>auth.cancel(),signOut:async()=>{auth.cancel(),
4067
- await removeAntigravitySignIn(input2.instanceId),releaseAgyCli(input2.instanceId)},dispose:async()=>{auth.cancel(),await base2.dispose()}}}}}});function cliVersionProbe(cli,run6=execCli){let read2=cliVersionReader(cli),pending;return env=>{if(pending)return pending;let deadline=Date.now()+CLI_VERSION_TIMEOUT_MS,attempt=()=>new Promise(resolve35=>{run6(cli,["--version"],{timeout:Math.max(1,deadline-Date.now()),env},(error62,stdout2)=>resolve35({error:error62,stdout:stdout2}))});return pending=(async()=>{let result2=await attempt();return!result2.error&&!result2.stdout.trim()&&Date.now()<deadline&&(result2=await attempt()),read2(result2.error,
4056
+ DATA_DIR,"limix-agy-cli.json")}});function normalizeAntigravityTurn(turn,offeredModels2){if(turn.variant!==void 0)return turn;let match=turn.model?.match(/^(.+)-(low|medium|high)$/u);return match&&offeredModels2.includes(match[1])&&!offeredModels2.includes(match[0])?{...turn,model:match[1],variant:match[2]}:turn}function antigravityPermissionMode(fullAuto,approvalMode){return fullAuto||approvalMode==="full"?"yolo":approvalMode==="edits"?"auto_edit":"default"}function limixModeFor(wanted,option){let offered=[],collect=list5=>{if(Array.
4057
+ isArray(list5))for(let item of list5){item&&typeof item=="object"&&Array.isArray(item.options)&&collect(item.options);let value=item&&typeof item=="object"?item.value??item.id:item;typeof value=="string"&&offered.push(value)}};return collect(option?.options),offered.length===0?wanted:(LIMIX_MODE_ALIASES[wanted]??[wanted]).find(value=>offered.includes(value))??null}var STATIC_ANTIGRAVITY_MODELS,managedAsset,LIMIX_MODE_ALIASES,support,AcpAntigravityDriver,AntigravityDriver,init_antigravity=__esm({
4058
+ "server/drivers/antigravity.ts"(){"use strict";init_antigravity_account();init_core3();init_antigravity_acp();init_antigravity_runtime();init_antigravity_release();init_antigravity_temp();init_env_path();init_limix_agy_cli();init_bundled();init_manifest();STATIC_ANTIGRAVITY_MODELS=bundledEngineCatalog("antigravity");managedAsset=resolveAntigravityReleaseAsset(),LIMIX_MODE_ALIASES={yolo:["yolo","bypassPermissions","bypass_permissions","full","auto","autoEdit","auto_edit","acceptEdits"],auto_edit:[
4059
+ "auto_edit","autoEdit","acceptEdits","accept_edits"],default:["default","ask","normal"]};support={driverKind:"antigravityAgent",displayName:"Google Gemini (Antigravity)",get models(){return currentEngineCatalog("antigravity")},defaultCli:"agy",nativeSource:"antigravity.acp",loginNote:"Antigravity needs a Google account \u2014 choose Sign in with Google in engine setup",install:{docsUrl:"https://github.com/agentclientprotocol/registry/tree/main/antigravity-acp",...managedAsset?{managed:{label:"In\
4060
+ stall official Antigravity",downloadBytes:managedAsset.archiveBytes}}:{}},images:!0,spawnArgs:()=>[],selectModel:{configId:"model"},modelVariants:!0,normalizeSessionSelection:normalizeAntigravityTurn,sessionModelEnv:"AGY_ACP_DEFAULT_MODEL",sessionScopedApproval:!0,resumeMethod:"resume",clientFileSystem:!0,sanitizeToolPayload:!0,resolveCommand:async(env,config3,instanceId)=>{let agyCli=agyCliFor(instanceId,env);if(agyCli)return{command:agyCli,args:["acp"]};let runtime=await resolveAntigravityRuntime(
4061
+ config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return profile.tempDirectory&&scheduleAntigravityTempSweep(instanceId),{command:runtime.executablePath,args:process.platform==="linux"?["--uid="]:[],env:profile.environment}},resolveModels:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return currentEngineCatalog("antigravity");let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,
4062
+ baseEnv:env});if(!await antigravityProfileAuthenticated(profile))throw new Error(support.loginNote);return probeAntigravityModels({runtime,profile,fallbackDefault:currentEngineCatalog("antigravity").default})},pickAuthMethod:methods=>methods.some(method=>method.id==="oauth-personal")?"oauth-personal":null,authFailure:"fail",requireAuthenticationBeforeSpawn:!0,isAuthenticated:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return!0;try{let runtime=await resolveAntigravityRuntime(config3.
4063
+ cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return antigravityProfileAuthenticated(profile)}catch{return!1}},snapshot:async(env,config3,instanceId)=>{if(agyCliFor(instanceId,env))return{state:"available",version:"Antigravity CLI",authenticated:!0};try{let runtime=await resolveAntigravityRuntime(config3.cli,env),profile=await prepareAntigravityProfile({instanceId,runtime,baseEnv:env});return{state:"available",version:runtime.version,authenticated:await antigravityProfileAuthenticated(
4064
+ profile),account:await antigravityAccount(profile.tokenPath)}}catch(error62){return{state:"unavailable",reason:error62 instanceof Error?error62.message:String(error62)}}},configureSession:async({request:request2,sessionId,config:config3,turn,configOptions:configOptions2})=>{if(!Array.isArray(configOptions2)||!configOptions2.some(option=>option?.id==="mode"))return;let wanted=limixModeFor(antigravityPermissionMode(config3.fullAuto,turn.approvalMode),configOptions2.find(option=>option?.id==="mode"));
4065
+ if(!wanted)return;let result2=await request2("session/set_config_option",{sessionId,configId:"mode",value:wanted});if((Array.isArray(result2?.configOptions)?result2.configOptions.find(option=>option?.id==="mode")?.currentValue:void 0)!==wanted)throw new Error(`Antigravity did not apply ${wanted} permission mode.`)}},AcpAntigravityDriver=createAcpDriver(support),AntigravityDriver={...AcpAntigravityDriver,async create(input2){let base2=await AcpAntigravityDriver.create(input2);scheduleAntigravityTempSweep(
4066
+ input2.instanceId),scheduleAntigravityTempSweep(VERIFICATION_TEMP_KEY);let auth=new AntigravityAuthController(()=>{base2.refreshModels?.()}),installFailure,runtimeAndProfile=async()=>{let environment={...process.env,...input2.environment,PATH:augmentedPath()},runtime=await resolveAntigravityRuntime(input2.config.cli,environment),profile=await prepareAntigravityProfile({instanceId:input2.instanceId,runtime,baseEnv:environment});return{runtime,profile}};return{...base2,get models(){return base2.models},
4067
+ get modelsUnconfirmed(){return base2.modelsUnconfirmed},snapshot:async()=>{let snapshot=await base2.snapshot();return snapshot.state==="available"&&(installFailure=void 0),snapshot.state==="unavailable"&&installFailure?{...snapshot,reason:installFailure}:snapshot},...antigravityManagedInstallAvailable()?{installRuntime:async()=>{installFailure=void 0;try{await installAntigravityRuntime({validate:validateAntigravityRuntime})}catch(error62){throw installFailure=error62 instanceof Error?error62.message:
4068
+ String(error62),error62}}}:{},startAuthentication:async()=>{let{runtime,profile}=await runtimeAndProfile();return auth.start(runtime,profile)},completeAuthentication:async(flowId,callbackUrl)=>auth.complete(flowId,callbackUrl),cancelAuthentication:async()=>auth.cancel(),signOut:async()=>{auth.cancel(),await removeAntigravitySignIn(input2.instanceId),releaseAgyCli(input2.instanceId)},dispose:async()=>{auth.cancel(),await base2.dispose()}}}}}});function cliVersionProbe(cli,run6=execCli){let read2=cliVersionReader(cli),pending;return env=>{if(pending)return pending;let deadline=Date.now()+CLI_VERSION_TIMEOUT_MS,attempt=()=>new Promise(resolve35=>{run6(cli,["--version"],{timeout:Math.max(1,deadline-Date.now()),env},(error62,stdout2)=>resolve35({error:error62,stdout:stdout2}))});return pending=(async()=>{let result2=await attempt();return!result2.error&&!result2.stdout.trim()&&Date.now()<deadline&&(result2=await attempt()),read2(result2.error,
4068
4069
  result2.stdout)})().finally(()=>{pending=void 0}),pending}}var init_cli_version_probe=__esm({"server/cli-version-probe.ts"(){"use strict";init_procs()}});function claudeAuthStatus(cli,env,run6=execCli){return new Promise(resolve35=>{run6(cli,["auth","status","--json"],{timeout:8e3,maxBuffer:65536,env},(error62,stdout2)=>{if(error62?.killed)return resolve35({});try{let status2=JSON.parse(stdout2),loggedIn=status2&&typeof status2=="object"&&"loggedIn"in status2?status2.loggedIn:void 0;if(loggedIn!==!0)return resolve35(loggedIn===!1?{authenticated:!1}:{});let identity=status2,boundedText2=(value,max)=>typeof value=="string"&&value.trim().length>0&&value.
4069
4070
  length<=max&&!/[\p{Cc}\p{Cf}]/u.test(value)?value.trim():void 0,candidateEmail=boundedText2(identity.email,254),email3=candidateEmail&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(candidateEmail)?candidateEmail:void 0,organization=boundedText2(identity.orgName,160),account2={...email3?{email:email3}:{},...organization?{organization}:{},...identity.authMethod==="api_key"?{method:"api-key"}:{}};resolve35({authenticated:!0,...Object.keys(account2).length?{account:account2}:{}})}catch{resolve35({})}})})}var init_claude_auth_status=__esm(
4070
4071
  {"server/drivers/claude-auth-status.ts"(){"use strict";init_procs()}});import{readFileSync as readFileSync30}from"node:fs";import{join as join57}from"node:path";function projectMcpServers(cwd){let parsed;try{parsed=JSON.parse(readFileSync30(join57(cwd,".mcp.json"),"utf8"))}catch{return{}}let servers=parsed?.mcpServers;if(!servers||typeof servers!="object"||Array.isArray(servers))return{};let out={};for(let[name,server]of Object.entries(servers))server&&typeof server=="object"&&!Array.isArray(server)&&(out[name]=server);return out}var init_claude_project_mcp=__esm({
@@ -27,6 +27,30 @@ export function antigravityPermissionMode(fullAuto, approvalMode) {
27
27
  return approvalMode === "edits" ? "auto_edit" : "default";
28
28
  }
29
29
  const managedAsset = resolveAntigravityReleaseAsset();
30
+ const LIMIX_MODE_ALIASES = {
31
+ yolo: ["yolo", "bypassPermissions", "bypass_permissions", "full", "auto", "autoEdit", "auto_edit", "acceptEdits"],
32
+ auto_edit: ["auto_edit", "autoEdit", "acceptEdits", "accept_edits"],
33
+ default: ["default", "ask", "normal"],
34
+ };
35
+ /** The mode value this session offers for `wanted`; null when it offers none (the session keeps its own). */
36
+ function limixModeFor(wanted, option) {
37
+ const offered = [];
38
+ const collect = (list) => {
39
+ if (!Array.isArray(list))
40
+ return;
41
+ for (const item of list) {
42
+ if (item && typeof item === "object" && Array.isArray(item.options))
43
+ collect(item.options);
44
+ const value = item && typeof item === "object" ? item.value ?? item.id : item;
45
+ if (typeof value === "string")
46
+ offered.push(value);
47
+ }
48
+ };
49
+ collect(option?.options);
50
+ if (offered.length === 0)
51
+ return wanted;
52
+ return (LIMIX_MODE_ALIASES[wanted] ?? [wanted]).find((value) => offered.includes(value)) ?? null;
53
+ }
30
54
  const support = {
31
55
  driverKind: "antigravityAgent",
32
56
  // Named for what people look for: Google moved personal Gemini subscriptions (free, AI Pro, AI Ultra) from Gemini CLI to Antigravity on 2026-06-18.
@@ -118,7 +142,9 @@ const support = {
118
142
  if (!Array.isArray(configOptions) || !configOptions.some(option => option?.id === "mode")) {
119
143
  return;
120
144
  }
121
- const wanted = antigravityPermissionMode(config.fullAuto, turn.approvalMode);
145
+ const wanted = limixModeFor(antigravityPermissionMode(config.fullAuto, turn.approvalMode), configOptions.find((option) => option?.id === "mode"));
146
+ if (!wanted)
147
+ return;
122
148
  const result = await request("session/set_config_option", {
123
149
  sessionId,
124
150
  configId: "mode",
@@ -109,7 +109,8 @@ export function hubSkills() {
109
109
  // A same-named skill the owner imported by hand is not the hub's: never touched by sync.
110
110
  enabled: have?.reviewState === "approved",
111
111
  updateAvailable: Boolean(have && have.checksum !== entry.checksum),
112
- blocked: hubSkillBlocked(entry) ?? (!have && library[entry.id] ? "Thư viện đã có kỹ năng cùng tên không đến từ Hub." : null),
112
+ blocked: !have && library[entry.id] ? "Thư viện đã có kỹ năng cùng tên không đến từ Hub." : null,
113
+ risky: hubSkillBlocked(entry),
113
114
  };
114
115
  });
115
116
  }
@@ -120,7 +121,7 @@ export async function installHubSkill(id, options = {}) {
120
121
  if (!entry)
121
122
  return { error: "Không thấy kỹ năng này trong danh mục Hub. Hãy đồng bộ lại." };
122
123
  const blocked = hubSkillBlocked(entry);
123
- if (blocked)
124
+ if (blocked && !options.allowRisky)
124
125
  return { error: blocked };
125
126
  const installed = installedFromHub().get(id);
126
127
  const existing = readSkillLibraryIndex()[id];
@@ -136,7 +137,7 @@ export async function installHubSkill(id, options = {}) {
136
137
  return { error: `Danh mục thiếu mã kiểm tra cho ${path}` };
137
138
  let response;
138
139
  try {
139
- response = await fetchText(rawUrl(`skills/${id}/${path}`));
140
+ response = await fetchText(rawUrl(`${entry.area === "quarantine" ? "quarantine" : "skills"}/${id}/${path}`));
140
141
  }
141
142
  catch (cause) {
142
143
  return { error: `Không tải được ${path}: ${cause instanceof Error ? cause.message : String(cause)}` };
@@ -180,9 +181,6 @@ export async function installHubSkill(id, options = {}) {
180
181
  export function setHubSkillEnabled(id, enabled) {
181
182
  if (!installedFromHub().has(id))
182
183
  return { error: "Kỹ năng này chưa cài từ Hub" };
183
- const entry = hubCatalog().find((e) => e.id === id);
184
- if (enabled && entry && hubSkillBlocked(entry))
185
- return { error: hubSkillBlocked(entry) };
186
184
  const result = setLibrarySkillReviewState(id, enabled ? "approved" : "disabled");
187
185
  return "error" in result ? { error: result.error } : { ok: true };
188
186
  }
@@ -203,7 +201,7 @@ async function autoInstallEligible() {
203
201
  for (const skill of hubSkills()) {
204
202
  if (budget <= 0)
205
203
  return;
206
- const eligible = !skill.blocked && skill.kind === "instructions-only" && skill.approval_status === "approved" && (skill.grade === "excellent" || skill.grade === "recommended");
204
+ const eligible = !skill.blocked && !skill.risky && skill.kind === "instructions-only" && skill.approval_status === "approved" && (skill.grade === "excellent" || skill.grade === "recommended");
207
205
  if (!eligible || (skill.installed && !skill.updateAvailable))
208
206
  continue;
209
207
  budget -= 1;
@@ -232,7 +230,7 @@ export async function handleLimixHub(method, path, body) {
232
230
  }
233
231
  const id = typeof record.id === "string" ? record.id : "";
234
232
  if (method === "POST" && (path === "/api/limix/hub/install" || path === "/api/limix/hub/update")) {
235
- const result = await installHubSkill(id, { allowTools: record.allowTools === true });
233
+ const result = await installHubSkill(id, { allowTools: record.allowTools === true, allowRisky: record.allowRisky === true });
236
234
  return "error" in result ? { status: 422, body: result } : { status: 200, body: result };
237
235
  }
238
236
  if (method === "POST" && path === "/api/limix/hub/enable") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "limixbot",
3
- "version": "0.3.21",
3
+ "version": "0.3.23",
4
4
  "description": "Run the Limix Bot server anywhere and pair your devices to it (Leox ৹ Limix AI)",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",