@tarcisiopgs/lisa 1.41.0 → 1.42.0
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/README.md +2 -2
- package/dist/{chunk-H2ATCMBI.js → chunk-6ZWVYPR5.js} +1 -1
- package/dist/{chunk-MC4SAOF2.js → chunk-JALGARX3.js} +11 -0
- package/dist/{chunk-4TXH7PTM.js → chunk-VVYGYOPG.js} +3 -2
- package/dist/{chunk-LTVASWBM.js → chunk-YSFHP3A3.js} +30 -2
- package/dist/{detection-2Z6TXYHU.js → detection-TGAZED6Q.js} +3 -1
- package/dist/index.js +15 -9
- package/dist/{loop-VITV7WGU.js → loop-3OBNPSYF.js} +2 -2
- package/dist/{tui-bridge-EFC4OZZU.js → tui-bridge-HVSZNVDO.js} +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ If something fails — pre-push hooks, quota limits, stuck processes — Lisa ha
|
|
|
38
38
|
## Features
|
|
39
39
|
|
|
40
40
|
- **7 issue trackers** — Linear, GitHub Issues, GitLab Issues, Jira, Trello, Plane, Shortcut
|
|
41
|
-
- **
|
|
41
|
+
- **10 AI agents** — Claude Code, Gemini CLI, GitHub Copilot CLI, Cursor Agent, Aider, Goose, OpenCode, Codex, Kilo Code, MiMo Code
|
|
42
42
|
- **AI planning** — describe a goal, the AI brainstorms with you, decomposes it into issues with dependencies, created in your tracker
|
|
43
43
|
- **Language-aware** — responds in the same language you write your goal in
|
|
44
44
|
- **Spec compliance** — LLM-verified acceptance criteria check before PR creation, with auto-retry
|
|
@@ -67,7 +67,7 @@ If something fails — pre-push hooks, quota limits, stuck processes — Lisa ha
|
|
|
67
67
|
| Gemini CLI | `gemini` | Goose | `goose` |
|
|
68
68
|
| GitHub Copilot CLI | `copilot` | Aider | `aider` |
|
|
69
69
|
| OpenCode | `opencode` | OpenAI Codex | `codex` |
|
|
70
|
-
| Kilo Code | `kilo` | | |
|
|
70
|
+
| Kilo Code | `kilo` | MiMo Code | `mimo` |
|
|
71
71
|
|
|
72
72
|
Configure models and provider-specific options:
|
|
73
73
|
|
|
@@ -111,6 +111,16 @@ function fetchOpenCodeModels() {
|
|
|
111
111
|
return [];
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
+
function fetchMimoModels() {
|
|
115
|
+
try {
|
|
116
|
+
const raw = execSync("mimo models", { encoding: "utf-8", timeout: 1e4 });
|
|
117
|
+
const clean = raw.replace(/\x1b\[[0-9;]*[mGKHFA-Z]/g, "");
|
|
118
|
+
return clean.split("\n").map((l) => l.trim()).filter((m) => /^[a-z0-9][\w.-]*\/.+/i.test(m));
|
|
119
|
+
} catch (err) {
|
|
120
|
+
verbose(`Failed to fetch MiMo models: ${formatError(err)}`);
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
114
124
|
function detectPlatformFromRemoteUrl(remoteUrl) {
|
|
115
125
|
if (/github\.com/.test(remoteUrl)) return "cli";
|
|
116
126
|
if (/gitlab\./.test(remoteUrl)) return "gitlab";
|
|
@@ -267,6 +277,7 @@ export {
|
|
|
267
277
|
fetchCursorModels,
|
|
268
278
|
fetchCopilotModels,
|
|
269
279
|
fetchOpenCodeModels,
|
|
280
|
+
fetchMimoModels,
|
|
270
281
|
detectPlatformFromRemoteUrl,
|
|
271
282
|
detectPlatform,
|
|
272
283
|
verifyPlatformCredential,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
readContext,
|
|
20
20
|
resolveModels,
|
|
21
21
|
runWithFallback
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-YSFHP3A3.js";
|
|
23
23
|
import {
|
|
24
24
|
kanbanEmitter
|
|
25
25
|
} from "./chunk-ZHB4S7SP.js";
|
|
@@ -91,7 +91,8 @@ var VALID_PROVIDERS = [
|
|
|
91
91
|
"goose",
|
|
92
92
|
"aider",
|
|
93
93
|
"codex",
|
|
94
|
-
"kilo"
|
|
94
|
+
"kilo",
|
|
95
|
+
"mimo"
|
|
95
96
|
];
|
|
96
97
|
var VALID_SOURCES = [
|
|
97
98
|
"linear",
|
|
@@ -2105,6 +2105,32 @@ var KiloProvider = class {
|
|
|
2105
2105
|
}
|
|
2106
2106
|
};
|
|
2107
2107
|
|
|
2108
|
+
// src/providers/mimo.ts
|
|
2109
|
+
var MIMO_ERROR_PATTERN = /^Error /;
|
|
2110
|
+
var MimoProvider = class {
|
|
2111
|
+
name = "mimo";
|
|
2112
|
+
async isAvailable() {
|
|
2113
|
+
return isCommandAvailable("mimo");
|
|
2114
|
+
}
|
|
2115
|
+
async run(prompt, opts) {
|
|
2116
|
+
try {
|
|
2117
|
+
if (opts.model) validateShellArg(opts.model, "model");
|
|
2118
|
+
const modelFlag = opts.model ? `--model ${opts.model}` : "";
|
|
2119
|
+
const config = {
|
|
2120
|
+
name: "mimo",
|
|
2121
|
+
buildCommand: (promptCatExpr) => `mimo run --dangerously-skip-permissions ${modelFlag} ${promptCatExpr}`,
|
|
2122
|
+
logLine: `mimo run --dangerously-skip-permissions ${modelFlag || "(default model)"}`,
|
|
2123
|
+
kanbanLine: `$ mimo run --dangerously-skip-permissions ${modelFlag || "(default model)"} <prompt: ${prompt.length} chars>
|
|
2124
|
+
`,
|
|
2125
|
+
errorPattern: MIMO_ERROR_PATTERN
|
|
2126
|
+
};
|
|
2127
|
+
return await runProviderProcess(config, prompt, opts);
|
|
2128
|
+
} catch (err) {
|
|
2129
|
+
return { success: false, output: formatError(err), duration: 0 };
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2132
|
+
};
|
|
2133
|
+
|
|
2108
2134
|
// src/providers/opencode.ts
|
|
2109
2135
|
var OpenCodeProvider = class {
|
|
2110
2136
|
name = "opencode";
|
|
@@ -2140,7 +2166,8 @@ var providers = {
|
|
|
2140
2166
|
goose: () => new GooseProvider(),
|
|
2141
2167
|
aider: () => new AiderProvider(),
|
|
2142
2168
|
codex: () => new CodexProvider(),
|
|
2143
|
-
kilo: () => new KiloProvider()
|
|
2169
|
+
kilo: () => new KiloProvider(),
|
|
2170
|
+
mimo: () => new MimoProvider()
|
|
2144
2171
|
};
|
|
2145
2172
|
async function getAllProvidersWithAvailability() {
|
|
2146
2173
|
const all = Object.values(providers).map((f) => f());
|
|
@@ -4146,7 +4173,8 @@ function resolveModels(config) {
|
|
|
4146
4173
|
"goose",
|
|
4147
4174
|
"aider",
|
|
4148
4175
|
"codex",
|
|
4149
|
-
"kilo"
|
|
4176
|
+
"kilo",
|
|
4177
|
+
"mimo"
|
|
4150
4178
|
]);
|
|
4151
4179
|
for (const m of providerModels) {
|
|
4152
4180
|
if (knownProviders.has(m) && m !== config.provider) {
|
|
@@ -6,13 +6,14 @@ import {
|
|
|
6
6
|
detectPlatformFromRemoteUrl,
|
|
7
7
|
fetchCopilotModels,
|
|
8
8
|
fetchCursorModels,
|
|
9
|
+
fetchMimoModels,
|
|
9
10
|
fetchOpenCodeModels,
|
|
10
11
|
getGitRepoName,
|
|
11
12
|
getMissingEnvVars,
|
|
12
13
|
getVersion,
|
|
13
14
|
isCursorFreePlan,
|
|
14
15
|
verifyPlatformCredential
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-JALGARX3.js";
|
|
16
17
|
import "./chunk-YBM6JNRO.js";
|
|
17
18
|
import "./chunk-HPWL5JRW.js";
|
|
18
19
|
import "./chunk-4MZ2565Y.js";
|
|
@@ -23,6 +24,7 @@ export {
|
|
|
23
24
|
detectPlatformFromRemoteUrl,
|
|
24
25
|
fetchCopilotModels,
|
|
25
26
|
fetchCursorModels,
|
|
27
|
+
fetchMimoModels,
|
|
26
28
|
fetchOpenCodeModels,
|
|
27
29
|
getGitRepoName,
|
|
28
30
|
getMissingEnvVars,
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
runLoop,
|
|
15
15
|
saveConfig,
|
|
16
16
|
validateConfig
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-VVYGYOPG.js";
|
|
18
18
|
import {
|
|
19
19
|
CliError,
|
|
20
20
|
buildExecutionWaves,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
parseStructuredOutput,
|
|
25
25
|
runPlanWizard,
|
|
26
26
|
savePlan
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-6ZWVYPR5.js";
|
|
28
28
|
import {
|
|
29
29
|
buildContextMdBlock,
|
|
30
30
|
createProvider,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
readContext,
|
|
35
35
|
resolveModels,
|
|
36
36
|
runWithFallback
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-YSFHP3A3.js";
|
|
38
38
|
import {
|
|
39
39
|
kanbanEmitter
|
|
40
40
|
} from "./chunk-ZHB4S7SP.js";
|
|
@@ -55,11 +55,12 @@ import {
|
|
|
55
55
|
detectPlatform,
|
|
56
56
|
fetchCopilotModels,
|
|
57
57
|
fetchCursorModels,
|
|
58
|
+
fetchMimoModels,
|
|
58
59
|
fetchOpenCodeModels,
|
|
59
60
|
getMissingEnvVars,
|
|
60
61
|
getVersion,
|
|
61
62
|
isCursorFreePlan
|
|
62
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-JALGARX3.js";
|
|
63
64
|
import {
|
|
64
65
|
isGhCliAvailable
|
|
65
66
|
} from "./chunk-YBM6JNRO.js";
|
|
@@ -251,7 +252,8 @@ async function runConfigWizard(existing) {
|
|
|
251
252
|
goose: "Goose",
|
|
252
253
|
aider: "Aider",
|
|
253
254
|
codex: "OpenAI Codex",
|
|
254
|
-
kilo: "Kilo Code"
|
|
255
|
+
kilo: "Kilo Code",
|
|
256
|
+
mimo: "MiMo Code"
|
|
255
257
|
};
|
|
256
258
|
const providerModels = {
|
|
257
259
|
claude: ["claude-opus-4-6", "claude-sonnet-4-6", "claude-haiku-4-5", "claude-sonnet-4-5"],
|
|
@@ -292,7 +294,8 @@ async function runConfigWizard(existing) {
|
|
|
292
294
|
${pc.bold("OpenAI Codex")} ${pc.dim("npm i -g @openai/codex")}
|
|
293
295
|
${pc.bold("Goose")} ${pc.dim("https://block.github.io/goose")}
|
|
294
296
|
${pc.bold("Aider")} ${pc.dim("pip install aider-chat")}
|
|
295
|
-
${pc.bold("Kilo Code")} ${pc.dim("npm i -g @kilocode/cli")}
|
|
297
|
+
${pc.bold("Kilo Code")} ${pc.dim("npm i -g @kilocode/cli")}
|
|
298
|
+
${pc.bold("MiMo Code")} ${pc.dim("npm i -g @mimo-ai/cli")}`
|
|
296
299
|
);
|
|
297
300
|
return process.exit(1);
|
|
298
301
|
}
|
|
@@ -426,6 +429,9 @@ remove them or set the file to ${pc.cyan("{}")} \u2014 MCP tools can cause OpenC
|
|
|
426
429
|
"google/gemini-2.5-pro",
|
|
427
430
|
"google/gemini-2.5-flash"
|
|
428
431
|
];
|
|
432
|
+
} else if (providerName === "mimo") {
|
|
433
|
+
const dynamic = fetchMimoModels();
|
|
434
|
+
availableModels = dynamic.length > 0 ? dynamic : ["mimo/mimo-auto", "xiaomi/mimo-v2.5-pro", "xiaomi/mimo-v2.5", "xiaomi/mimo-v2-flash"];
|
|
429
435
|
}
|
|
430
436
|
if (availableModels && availableModels.length > 0) {
|
|
431
437
|
const modelSelection = await clack.multiselect({
|
|
@@ -1861,7 +1867,7 @@ async function reviewAndCreate(plan2, planPath, opts) {
|
|
|
1861
1867
|
log("Run `lisa run` when ready.");
|
|
1862
1868
|
return;
|
|
1863
1869
|
}
|
|
1864
|
-
const { runLoop: runLoop2 } = await import("./loop-
|
|
1870
|
+
const { runLoop: runLoop2 } = await import("./loop-3OBNPSYF.js");
|
|
1865
1871
|
const waves = buildExecutionWaves(plan2.issues);
|
|
1866
1872
|
const maxWaveSize = Math.max(...waves.map((w) => w.length));
|
|
1867
1873
|
await runLoop2(config2, {
|
|
@@ -2345,7 +2351,7 @@ Add them to your ${shell} and run: source ${shell}`));
|
|
|
2345
2351
|
const initialCards = persistence.load();
|
|
2346
2352
|
persistedCards = initialCards;
|
|
2347
2353
|
persistence.start();
|
|
2348
|
-
const { registerPlanBridge } = await import("./tui-bridge-
|
|
2354
|
+
const { registerPlanBridge } = await import("./tui-bridge-HVSZNVDO.js");
|
|
2349
2355
|
const cleanupPlan = registerPlanBridge(merged);
|
|
2350
2356
|
onBeforeExit = () => {
|
|
2351
2357
|
persistence.stop();
|
|
@@ -2509,7 +2515,7 @@ process.on("unhandledRejection", (err) => {
|
|
|
2509
2515
|
}
|
|
2510
2516
|
process.exit(1);
|
|
2511
2517
|
});
|
|
2512
|
-
import("./detection-
|
|
2518
|
+
import("./detection-TGAZED6Q.js").then(
|
|
2513
2519
|
({ getVersion: getVersion2 }) => import("./version-D2YFKS7Q.js").then(({ checkForUpdate }) => checkForUpdate(getVersion2()))
|
|
2514
2520
|
);
|
|
2515
2521
|
runCli();
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
cleanupEventListeners,
|
|
5
5
|
runDemoLoop,
|
|
6
6
|
runLoop
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VVYGYOPG.js";
|
|
8
8
|
import {
|
|
9
9
|
WATCH_POLL_INTERVAL_MS
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-YSFHP3A3.js";
|
|
11
11
|
import "./chunk-ZHB4S7SP.js";
|
|
12
12
|
import "./chunk-ZOVVFU7B.js";
|
|
13
13
|
import "./chunk-3EOEDL3T.js";
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
markdownToIssue,
|
|
7
7
|
parseStructuredOutput,
|
|
8
8
|
savePlan
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6ZWVYPR5.js";
|
|
10
10
|
import {
|
|
11
11
|
createSource,
|
|
12
12
|
resolveModels,
|
|
13
13
|
runWithFallback
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-YSFHP3A3.js";
|
|
15
15
|
import {
|
|
16
16
|
kanbanEmitter
|
|
17
17
|
} from "./chunk-ZHB4S7SP.js";
|