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.
- package/dist/assets/{ActivityPanel-Mm1AdBsr.js → ActivityPanel-BkpnvFMV.js} +1 -1
- package/dist/assets/App-5fWd2qWI.js +242 -0
- package/dist/assets/{AppEventEditor-Cgwtkp8X.js → AppEventEditor-4U6g9rYH.js} +1 -1
- package/dist/assets/{BotSettingsDialog-9DJvaJyA.js → BotSettingsDialog-DBAjMChc.js} +1 -1
- package/dist/assets/{BrowserPanel-Bf3wrH1-.js → BrowserPanel-DKxFFmVF.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-CV3LMXnH.js → BrowserProfilesManager-DbsOGGoV.js} +1 -1
- package/dist/assets/{CloudAddDialog-B6_ctBlp.js → CloudAddDialog-I2EDWXA8.js} +1 -1
- package/dist/assets/{ComputerFilesPane-DUKJxzPV.js → ComputerFilesPane-DA4Txmh9.js} +1 -1
- package/dist/assets/{ComputerPanel-DQLD56ji.js → ComputerPanel-B3EgKF7M.js} +2 -2
- package/dist/assets/{DataPanel-CqPvkhZs.js → DataPanel-DALLlVzz.js} +1 -1
- package/dist/assets/{DesktopViewer-DTBmRKHz.js → DesktopViewer-BTFnhvej.js} +1 -1
- package/dist/assets/{FilesView-BTIH8GhL.js → FilesView-DfvDhNdO.js} +1 -1
- package/dist/assets/{GrokMoveDialog-ipjhCMdt.js → GrokMoveDialog-CVgxiDZG.js} +1 -1
- package/dist/assets/{InspectorPanel-CYJ3PKQE.js → InspectorPanel-B8d5f_Z7.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal-DbroQplB.js → KeyboardShortcutsModal-C4Sy1Y5Q.js} +1 -1
- package/dist/assets/{LiveDesktop-CjcPYyQC.js → LiveDesktop-BdLw7_qb.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-DLOgAgD1.js → LocalVmWorkspace-Dd8v6HSb.js} +1 -1
- package/dist/assets/{MacLocalControl-BKOo9Q9t.js → MacLocalControl-DBItoJQX.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-Ck90v9JO.js → MarkdownFilePreview-tXLtgk1m.js} +1 -1
- package/dist/assets/{MenuMotion-CobYpP7L.js → MenuMotion-DnbwlBMa.js} +1 -1
- package/dist/assets/{NewBotDialog-CPh_4jgn.js → NewBotDialog-sfd-FzAz.js} +1 -1
- package/dist/assets/{PhoneAppDialog-C8LY6ZYR.js → PhoneAppDialog-D4klvpz5.js} +1 -1
- package/dist/assets/{PlacesRail-CUntVv3u.js → PlacesRail-BYBRFGDz.js} +1 -1
- package/dist/assets/{PluginsPanel-CPNu9R4X.js → PluginsPanel-DUOw0nhP.js} +1 -1
- package/dist/assets/{ProIntroduction-mmdyWV6u.js → ProIntroduction-B1eqbu20.js} +1 -1
- package/dist/assets/{RemoteAgentSettingsPanel-D_-DQsXX.js → RemoteAgentSettingsPanel-B46lWStL.js} +1 -1
- package/dist/assets/{RoomPanel-Bl074tib.js → RoomPanel-DBKyhryu.js} +1 -1
- package/dist/assets/{RoutinesPage-BBqOFUgN.js → RoutinesPage-CCSHgNRs.js} +1 -1
- package/dist/assets/SettingsModal-CwXiblca.js +15 -0
- package/dist/assets/{ShareTeamDialog-lWV9SoFf.js → ShareTeamDialog-DuSs1saG.js} +1 -1
- package/dist/assets/{SignedInSites-BtB_gJc5.js → SignedInSites-BdxFX6Wt.js} +1 -1
- package/dist/assets/{TeamLibraryPanel-CicCxQWY.js → TeamLibraryPanel-Djaf5q_z.js} +1 -1
- package/dist/assets/{TeamMapPage-DC2UVHtD.js → TeamMapPage-PW3Ots-y.js} +1 -1
- package/dist/assets/{TriggersPage-DV-VkZxS.js → TriggersPage-D5jH7bR3.js} +1 -1
- package/dist/assets/{VisibilitySection-DxS0LSuh.js → VisibilitySection-yE3ZIXKk.js} +1 -1
- package/dist/assets/{WebhookTrigger-CbjFXdP6.js → WebhookTrigger-doGyrUZA.js} +1 -1
- package/dist/assets/{WorksOnGrid-DwzG9r3j.js → WorksOnGrid-DWvjM4aV.js} +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-DEyDkr0Q.js → abnfDiagram-YUKMZFIV-Bs9i-eLj.js} +1 -1
- package/dist/assets/{activity-CbpNb0MQ.js → activity-DIhOTAmd.js} +1 -1
- package/dist/assets/{architectureDiagram-47P4ROYG-CGTtcA9N.js → architectureDiagram-47P4ROYG-CR-7WHVu.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-DT9DFOL_.js → blockDiagram-E7TT5TSB-Cx9qUsrY.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-DpERK75F.js → c4Diagram-CRA5TL53-CtuUaTlE.js} +1 -1
- package/dist/assets/{calendar-days-DE6WL-x2.js → calendar-days-DyyECwZf.js} +1 -1
- package/dist/assets/channel-DXuqtdcQ.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-wHwpVFi3.js → chunk-2Q5K7J3B-DIvFRpG0.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-CfqwqtdU.js → chunk-5VM5RSS4-Cxp3RKyR.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-BRxQFxT-.js → chunk-7TKQ45FW-DSOW_9p2.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-Ca3w_5Wz.js → chunk-AW2ZBBNX-zV216OhN.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-CO8Syt2Z.js → chunk-FVRAUYC3-BOtXkSrZ.js} +2 -2
- package/dist/assets/{chunk-HTAEGDNF-Cnx9DnWv.js → chunk-HTAEGDNF-DiV1eG2w.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-DefKEriK.js → chunk-JWPE2WC7-BZJyqcw-.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-B6WWWz_R.js → chunk-KQW6MTUR-DabkPo_d.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-BFU1-B3X.js → chunk-XXDRQBXY-CcZGTVYy.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-BePCpZI3.js → classDiagram-v2-K4WV4PDN-DfOdVcjL.js} +1 -1
- package/dist/assets/{coins-D1fhjgas.js → coins-s4HyWHyQ.js} +1 -1
- package/dist/assets/{core-zyskLUd7.js → core-D7M03RiE.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-D8emtvin.js → cose-bilkent-JH36ORCC-CqrD5E-Q.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-DUEsfFVq.js → cynefin-EF2NZ3EQ-fcIOWtrM.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-duonepNA.js → cynefinDiagram-3GCD6N5R-Cx2XYJ57.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-D4NywFNB.js → dagre-W4DXFKR2-D6f_32GP.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-cjiJTdiH.js → diagram-2UJZ2QOL-IxXxA3zr.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-D6M8A9DS.js → diagram-OVF4WLC6-DzRS9og-.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-CVAzAz2N.js → diagram-PFPMY2P6-CA4cF9TP.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-DLvfYJwO.js → diagram-UMYRVEAY-B5YdB3mN.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-D8qCH--0.js → diagram-YEKJPTXX-D8jMUZQ7.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-s55SHvTR.js → diagram-ZIFT7M5P-D9FKtuee.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-B93cNJNn.js → ebnfDiagram-VR2GEFS7-BipEfLA3.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-BsJqO8aU.js → elk-IJKZMXRS-ByA43ZYx.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-BXF1G3Js.js → erDiagram-O2IAPWRE-hlDRgJN-.js} +1 -1
- package/dist/assets/{file-up-Cg2kYQkd.js → file-up-DXcOpz8w.js} +1 -1
- package/dist/assets/{flowDiagram-OXPTDLAJ-BKjjYwz9.js → flowDiagram-OXPTDLAJ-BuCuOW1m.js} +1 -1
- package/dist/assets/{ganttDiagram-R7TSEDQI-DhtZJtPm.js → ganttDiagram-R7TSEDQI-Bk16Ilgi.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-BfRlcF5z.js → gitGraphDiagram-XJZIOB7I-CN3BXWBF.js} +1 -1
- package/dist/assets/{import-name-DT6x8SH1.js → import-name-wz0BNJ-d.js} +1 -1
- package/dist/assets/{index--etc8Lh7.js → index-BJo4IICg.js} +2 -2
- package/dist/assets/{index-BK27ZkYf.js → index-BR_1_bou.js} +1 -1
- package/dist/assets/{infoDiagram-5W2HQ5XZ-CywmYwco.js → infoDiagram-5W2HQ5XZ-DSUAydoj.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-DpXXqau5.js → ishikawaDiagram-K3B6WC7H-C1_ZiQE2.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-D1uMWGbz.js → journeyDiagram-COXZFDF6-CAGOqBTO.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-Bz0zjqQs.js → kanban-definition-P3RFRI5V-Dj3_9GgV.js} +1 -1
- package/dist/assets/{mcp-servers-DyW90x_D.js → mcp-servers-qzidl6IU.js} +1 -1
- package/dist/assets/{mermaid.core-Dnv6mcJ4.js → mermaid.core-CcbkAG9m.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-CFEkTgom.js → mindmap-definition-LZFPQGKD-C_gFeuC9.js} +1 -1
- package/dist/assets/{minimize-o-OFVasg.js → minimize-DixQTKye.js} +1 -1
- package/dist/assets/{monitor-7oLB-7rZ.js → monitor-IwDx0ohO.js} +1 -1
- package/dist/assets/{new-bot-vTUVmgdn.js → new-bot-COptZjiW.js} +1 -1
- package/dist/assets/{org-library-DZclNfAa.js → org-library-97Cfj4XD.js} +1 -1
- package/dist/assets/{package-format-Bf1YgVUD.js → package-format-MbGfBQ0g.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-DKt4SMwc.js → pegDiagram-BGZESJAR-CYa91QJf.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-B9taKUge.js → pieDiagram-CAPJLFHJ-H4g7rmhD.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-DQjB7Jbz.js → quadrantDiagram-GDMTTRAM-CkHV6SSw.js} +1 -1
- package/dist/assets/{rail-BBdJiVR1.js → rail-SzaGJCSZ.js} +1 -1
- package/dist/assets/{railroadDiagram-SM67HX2B-DQOivC56.js → railroadDiagram-SM67HX2B-Kx3ccbrH.js} +1 -1
- package/dist/assets/{remote-desktop-panel-AqU9h8PU.js → remote-desktop-panel-CVuN83Ny.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-BLgwXDEl.js → requirementDiagram-X7JNWC4A-BcNRqLgf.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-g2GlJNjj.js → sankeyDiagram-UM26HJRW-CQP982o-.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-_08U7Ixl.js → sequenceDiagram-ZO4K6R2Y-BXkOAwlC.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-DZPfU3_U.js → sizeCapture-INFHLROL-BtuN-EAh.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-PXBjCkxd.js → stateDiagram-v2-TBUQTH76-CmlsJGhT.js} +1 -1
- package/dist/assets/styles-Di_mG4l3.css +1 -0
- package/dist/assets/{swimlanes-N4OXWK64-q1MhehBF.js → swimlanes-N4OXWK64-GH4PBeGD.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-VqQY3wNh.js +8 -0
- package/dist/assets/{team-share-xt--eeM_.js → team-share-B2cRBtNk.js} +1 -1
- package/dist/assets/{timeline-definition-YOQAKGHF-UBKh0GG-.js → timeline-definition-YOQAKGHF-j8Q7uetA.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-CccLioTT.js → usecaseDiagram-VIAY4XPW-Cz4ej3SQ.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-3Q39wQgE.js → vennDiagram-BLWOH2XV-BZ3IAGpt.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-DtgEYK7j.js → wardleyDiagram-YMQ3BMBF-Bc32JfGA.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-DLTmsflK.js → xychartDiagram-TAQBALBS-s5XbB-l2.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/rail.html +5 -5
- package/dist-server/index.js +24 -22
- package/dist-server/openmausbot.js +13 -12
- package/dist-server/package.json +1 -1
- package/dist-server/pair-cli.js +13 -12
- package/dist-server/server/drivers/antigravity.js +27 -1
- package/dist-server/server/limix-skill-hub.js +6 -8
- package/package.json +1 -1
- package/dist/assets/App-BgFOjdcx.js +0 -242
- package/dist/assets/SettingsModal-CZC8Y2Ps.js +0 -11
- package/dist/assets/channel-CETDvzTH.js +0 -1
- package/dist/assets/styles-B9SGxFnK.css +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-pLYSpGVX.js +0 -8
- /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"}
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
env)
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
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({
|
package/dist-server/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"0.3.
|
|
1
|
+
{"type":"module","version":"0.3.23"}
|
package/dist-server/pair-cli.js
CHANGED
|
@@ -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"}
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
env)
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
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:
|
|
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(
|
|
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") {
|