limixbot 0.3.18 → 0.3.19
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-CiVMRvA-.js → ActivityPanel-D0V5shGd.js} +1 -1
- package/dist/assets/{App-B612vSUv.js → App-DXv-5ZTc.js} +8 -8
- package/dist/assets/{AppEventEditor-Id4kTgLa.js → AppEventEditor-mJOa46It.js} +1 -1
- package/dist/assets/{BotSettingsDialog-DdTKCtEA.js → BotSettingsDialog-DOF82zFt.js} +1 -1
- package/dist/assets/{BrowserPanel-thqBHOQl.js → BrowserPanel-Cbp7LssC.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-J8hqmwv5.js → BrowserProfilesManager-LC4INRs7.js} +1 -1
- package/dist/assets/{CloudAddDialog-BNroQCqt.js → CloudAddDialog-DywJ4txo.js} +1 -1
- package/dist/assets/{ComputerFilesPane-BXUVfqmc.js → ComputerFilesPane-BjzS9ZTa.js} +1 -1
- package/dist/assets/{ComputerPanel-BGE1fw6l.js → ComputerPanel-DGPKl9mx.js} +2 -2
- package/dist/assets/{DataPanel-CQWnhToC.js → DataPanel-CowhAHcc.js} +1 -1
- package/dist/assets/{FilesView-CYEcHPlb.js → FilesView-Di6bZ56Z.js} +1 -1
- package/dist/assets/{GrokMoveDialog-GD3YuWYi.js → GrokMoveDialog-BXwNEoZf.js} +1 -1
- package/dist/assets/{InspectorPanel-B_-Xse3K.js → InspectorPanel-gvViZQrp.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal-BAsXL39B.js → KeyboardShortcutsModal-C6gDEGpK.js} +1 -1
- package/dist/assets/{LiveDesktop-CLu-oUdB.js → LiveDesktop-BklBBcgn.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-CrRurzrY.js → LocalVmWorkspace-D1xWHo1G.js} +1 -1
- package/dist/assets/{MacLocalControl-Jp0LjT_C.js → MacLocalControl-BfwVFZRa.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-ceD2tKz1.js → MarkdownFilePreview-Cy-DECsV.js} +1 -1
- package/dist/assets/{NewBotDialog-C_M8t6Ri.js → NewBotDialog-CRCIYvfv.js} +1 -1
- package/dist/assets/{PhoneAppDialog-VezYkaXY.js → PhoneAppDialog-CmcHLaYr.js} +1 -1
- package/dist/assets/{PluginsPanel-Bcsv8kad.js → PluginsPanel-C46LU5EJ.js} +1 -1
- package/dist/assets/{ProIntroduction-BeqDgqS2.js → ProIntroduction-DuPsMUld.js} +1 -1
- package/dist/assets/{RemoteAgentSettingsPanel-Gc-vYBxb.js → RemoteAgentSettingsPanel-BauS0Y0t.js} +1 -1
- package/dist/assets/{RoomPanel-DBJbvMf1.js → RoomPanel-BiaRLuVx.js} +1 -1
- package/dist/assets/{RoutinesPage-C8O6H_m9.js → RoutinesPage-BeldL46G.js} +1 -1
- package/dist/assets/{SettingsModal-C28PTR8i.js → SettingsModal-DBLLYSR2.js} +1 -1
- package/dist/assets/{ShareTeamDialog-CSfZehTH.js → ShareTeamDialog-uEP_ILfa.js} +1 -1
- package/dist/assets/{SignedInSites-BaywJMFM.js → SignedInSites-BgqjFXnz.js} +1 -1
- package/dist/assets/{TeamLibraryPanel-DNEOuAa6.js → TeamLibraryPanel-Bd7HFgTR.js} +1 -1
- package/dist/assets/{TeamMapPage-CRIOLuDD.js → TeamMapPage-DslnWFG2.js} +1 -1
- package/dist/assets/{TriggersPage-D_HBWqEe.js → TriggersPage-BK73CwJR.js} +1 -1
- package/dist/assets/{VisibilitySection-C_Lg0Sxb.js → VisibilitySection-CZVuYCfP.js} +1 -1
- package/dist/assets/{WebhookTrigger-Cpp-PlPP.js → WebhookTrigger-DXr8EYFe.js} +1 -1
- package/dist/assets/{WorksOnGrid-DxsV4-UT.js → WorksOnGrid-DJJIaPGa.js} +1 -1
- package/dist/assets/{core-DUBJa6se.js → core-DIFUUeI5.js} +1 -1
- package/dist/assets/{import-name-w5H0_aIa.js → import-name-CFjzsLGq.js} +1 -1
- package/dist/assets/{index-CJ71uySw.js → index-BBObcTo5.js} +2 -2
- package/dist/assets/{index-B6hNR0We.js → index-D2Hr2dxf.js} +1 -1
- package/dist/assets/{mcp-servers-DT3QTM7h.js → mcp-servers-5_CMZE0a.js} +1 -1
- package/dist/assets/{new-bot-Wr7msRe_.js → new-bot-BNUINkXW.js} +1 -1
- package/dist/assets/{org-library-BTDDXkLR.js → org-library-D71rjidw.js} +1 -1
- package/dist/assets/{package-format-ByePhvES.js → package-format-Bc1BWLbR.js} +1 -1
- package/dist/assets/{remote-desktop-panel-CMGlHR7t.js → remote-desktop-panel-CG1BY1IR.js} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/index.js +675 -673
- package/dist-server/openmausbot.js +240 -236
- package/dist-server/package.json +1 -1
- package/dist-server/pair-cli.js +240 -236
- package/dist-server/server/drivers/antigravity.js +11 -0
- package/dist-server/server/limix-agy-cli.js +65 -0
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { antigravityManagedInstallAvailable, installAntigravityRuntime, resolveA
|
|
|
5
5
|
import { resolveAntigravityReleaseAsset } from "./antigravity-release.js";
|
|
6
6
|
import { VERIFICATION_TEMP_KEY, scheduleAntigravityTempSweep } from "./antigravity-temp.js";
|
|
7
7
|
import { augmentedPath } from "../env-path.js";
|
|
8
|
+
import { agyCliFor, releaseAgyCli } from "../limix-agy-cli.js";
|
|
8
9
|
import { bundledEngineCatalog } from "../model-manifest/bundled.js";
|
|
9
10
|
import { currentEngineCatalog } from "../model-manifest/manifest.js";
|
|
10
11
|
export const STATIC_ANTIGRAVITY_MODELS = bundledEngineCatalog("antigravity");
|
|
@@ -53,6 +54,9 @@ const support = {
|
|
|
53
54
|
clientFileSystem: true,
|
|
54
55
|
sanitizeToolPayload: true,
|
|
55
56
|
resolveCommand: async (env, config, instanceId) => {
|
|
57
|
+
const agyCli = agyCliFor(instanceId, env);
|
|
58
|
+
if (agyCli)
|
|
59
|
+
return { command: agyCli, args: ["acp"] };
|
|
56
60
|
const runtime = await resolveAntigravityRuntime(config.cli, env);
|
|
57
61
|
const profile = await prepareAntigravityProfile({ instanceId, runtime, baseEnv: env });
|
|
58
62
|
if (profile.tempDirectory)
|
|
@@ -64,6 +68,8 @@ const support = {
|
|
|
64
68
|
};
|
|
65
69
|
},
|
|
66
70
|
resolveModels: async (env, config, instanceId) => {
|
|
71
|
+
if (agyCliFor(instanceId, env))
|
|
72
|
+
return currentEngineCatalog("antigravity");
|
|
67
73
|
const runtime = await resolveAntigravityRuntime(config.cli, env);
|
|
68
74
|
const profile = await prepareAntigravityProfile({ instanceId, runtime, baseEnv: env });
|
|
69
75
|
if (!(await antigravityProfileAuthenticated(profile)))
|
|
@@ -80,6 +86,8 @@ const support = {
|
|
|
80
86
|
authFailure: "fail",
|
|
81
87
|
requireAuthenticationBeforeSpawn: true,
|
|
82
88
|
isAuthenticated: async (env, config, instanceId) => {
|
|
89
|
+
if (agyCliFor(instanceId, env))
|
|
90
|
+
return true;
|
|
83
91
|
try {
|
|
84
92
|
const runtime = await resolveAntigravityRuntime(config.cli, env);
|
|
85
93
|
const profile = await prepareAntigravityProfile({ instanceId, runtime, baseEnv: env });
|
|
@@ -90,6 +98,8 @@ const support = {
|
|
|
90
98
|
}
|
|
91
99
|
},
|
|
92
100
|
snapshot: async (env, config, instanceId) => {
|
|
101
|
+
if (agyCliFor(instanceId, env))
|
|
102
|
+
return { state: "available", version: "Antigravity CLI", authenticated: true };
|
|
93
103
|
try {
|
|
94
104
|
const runtime = await resolveAntigravityRuntime(config.cli, env);
|
|
95
105
|
const profile = await prepareAntigravityProfile({ instanceId, runtime, baseEnv: env });
|
|
@@ -180,6 +190,7 @@ export const AntigravityDriver = {
|
|
|
180
190
|
signOut: async () => {
|
|
181
191
|
auth.cancel();
|
|
182
192
|
await removeAntigravitySignIn(input.instanceId);
|
|
193
|
+
releaseAgyCli(input.instanceId);
|
|
183
194
|
},
|
|
184
195
|
dispose: async () => {
|
|
185
196
|
auth.cancel();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Limix: the fast lane for Google Antigravity. The managed runtime (agy_acp_server, a PyInstaller one-file build)
|
|
2
|
+
// unpacks 0.3-1.3 GB into a temp folder on every launch. Google's Antigravity CLI (`agy`, default install
|
|
3
|
+
// %LOCALAPPDATA%\agy\bin\agy.exe) starts at once and serves the same protocol with `agy acp`. Its Google sign-in
|
|
4
|
+
// lives in the OS keyring, so one computer has ONE such account: the first Antigravity AI that asks gets the CLI
|
|
5
|
+
// lane; every other one keeps the managed runtime with its own profile. LIMIX_AGY_CLI=0 turns the lane off.
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { delimiter, join } from "node:path";
|
|
9
|
+
import { DATA_DIR } from "./config.js";
|
|
10
|
+
const claimFile = () => join(DATA_DIR, "limix-agy-cli.json");
|
|
11
|
+
export function findAgyCli(env = process.env) {
|
|
12
|
+
if (env.LIMIX_AGY_CLI === "0")
|
|
13
|
+
return null;
|
|
14
|
+
const win = process.platform === "win32";
|
|
15
|
+
const name = win ? "agy.exe" : "agy";
|
|
16
|
+
const candidates = [];
|
|
17
|
+
const localAppData = env.LOCALAPPDATA ?? process.env.LOCALAPPDATA;
|
|
18
|
+
if (win && localAppData)
|
|
19
|
+
candidates.push(join(localAppData, "agy", "bin", name));
|
|
20
|
+
if (!win)
|
|
21
|
+
candidates.push(join(homedir(), ".local", "bin", name));
|
|
22
|
+
for (const dir of (env.PATH ?? env.Path ?? process.env.PATH ?? "").split(delimiter))
|
|
23
|
+
if (dir)
|
|
24
|
+
candidates.push(join(dir, name));
|
|
25
|
+
return candidates.find((candidate) => existsSync(candidate)) ?? null;
|
|
26
|
+
}
|
|
27
|
+
function claimedBy() {
|
|
28
|
+
try {
|
|
29
|
+
const value = JSON.parse(readFileSync(claimFile(), "utf8"));
|
|
30
|
+
return typeof value.instanceId === "string" ? value.instanceId : null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** The CLI path when `instanceId` owns the CLI lane (claiming it when free), else null. */
|
|
37
|
+
export function agyCliFor(instanceId, env = process.env) {
|
|
38
|
+
const cli = findAgyCli(env);
|
|
39
|
+
if (!cli)
|
|
40
|
+
return null;
|
|
41
|
+
const owner = claimedBy();
|
|
42
|
+
if (owner && owner !== instanceId)
|
|
43
|
+
return null;
|
|
44
|
+
if (!owner) {
|
|
45
|
+
try {
|
|
46
|
+
mkdirSync(DATA_DIR, { recursive: true });
|
|
47
|
+
writeFileSync(claimFile(), JSON.stringify({ instanceId, cli, at: new Date().toISOString() }));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return cli;
|
|
54
|
+
}
|
|
55
|
+
/** Signing out of the AI that owns the lane frees it for the next one. */
|
|
56
|
+
export function releaseAgyCli(instanceId) {
|
|
57
|
+
if (claimedBy() !== instanceId)
|
|
58
|
+
return;
|
|
59
|
+
try {
|
|
60
|
+
writeFileSync(claimFile(), JSON.stringify({ instanceId: null }));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// a stale claim only keeps this AI on the CLI lane
|
|
64
|
+
}
|
|
65
|
+
}
|