@tarcisiopgs/lisa 1.7.2 → 1.7.3
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/index.js
CHANGED
|
@@ -337,39 +337,12 @@ function divider(session) {
|
|
|
337
337
|
}
|
|
338
338
|
function banner() {
|
|
339
339
|
if (outputMode !== "default") return;
|
|
340
|
-
const
|
|
341
|
-
@@%#@@
|
|
342
|
-
@@%=--=%@ @@
|
|
343
|
-
@@@@@@@@%@+------*@%%@%##*@
|
|
344
|
-
@*=======---------===-----@@
|
|
345
|
-
@=------------------------#@
|
|
346
|
-
@=------------------------+@@
|
|
347
|
-
@@=-------------------------+#%%%@@
|
|
348
|
-
@@@#=--------------------------------%@
|
|
349
|
-
@@*=------------------=---------------=@
|
|
350
|
-
@%------=%--=%=--@==+@=--------------@@
|
|
351
|
-
@@+-##+*%**#%=-+*+==+####*---------#@
|
|
352
|
-
@%*%-::::::%#::::::::+@=---------#@
|
|
353
|
-
@@@-:++::::@-::::=::::*%*=--------*@@
|
|
354
|
-
@+:==::::%=::::#-:::%==----------=@@
|
|
355
|
-
@@+:=%%%%*#+::::::+%=-----------=@@
|
|
356
|
-
@%*@=-----=*******---*+=-----=%@
|
|
357
|
-
@%=--+##**#=----------#++##----=@
|
|
358
|
-
@-----------------#=---**+%-----%@
|
|
359
|
-
@%*+=-----===++**#@#--%**#=-==++%@
|
|
360
|
-
@@@%%@#*+++=---=--=%----%%%@@@
|
|
361
|
-
@@@----------*@#**#@
|
|
362
|
-
@@@=---------#@@
|
|
363
|
-
@+*%*%%###%*%%=-@
|
|
364
|
-
@%@+=#@==@#:+@##@
|
|
365
|
-
@@@@%%@##%
|
|
366
|
-
`;
|
|
367
|
-
const title = " Lisa \u2014 deterministic autonomous issue resolver ";
|
|
340
|
+
const title = " lisa \u266A autonomous issue resolver ";
|
|
368
341
|
const border = "\u2500".repeat(title.length);
|
|
369
|
-
console.log(pc.yellow(
|
|
370
|
-
|
|
371
|
-
console.log(pc.
|
|
372
|
-
console.log(pc.
|
|
342
|
+
console.log(pc.yellow(`
|
|
343
|
+
\u250C${border}\u2510`));
|
|
344
|
+
console.log(pc.yellow(` \u2502`) + pc.bold(pc.white(title)) + pc.yellow("\u2502"));
|
|
345
|
+
console.log(pc.yellow(` \u2514${border}\u2518
|
|
373
346
|
`));
|
|
374
347
|
}
|
|
375
348
|
|
|
@@ -1585,12 +1558,9 @@ var providers = {
|
|
|
1585
1558
|
goose: () => new GooseProvider(),
|
|
1586
1559
|
aider: () => new AiderProvider()
|
|
1587
1560
|
};
|
|
1588
|
-
async function
|
|
1561
|
+
async function getAllProvidersWithAvailability() {
|
|
1589
1562
|
const all = Object.values(providers).map((f) => f());
|
|
1590
|
-
|
|
1591
|
-
all.map(async (p) => ({ provider: p, available: await p.isAvailable() }))
|
|
1592
|
-
);
|
|
1593
|
-
return results.filter((r) => r.available).map((r) => r.provider);
|
|
1563
|
+
return Promise.all(all.map(async (p) => ({ provider: p, available: await p.isAvailable() })));
|
|
1594
1564
|
}
|
|
1595
1565
|
function createProvider(name) {
|
|
1596
1566
|
const factory = providers[name];
|
|
@@ -4122,7 +4092,7 @@ Add them to your ${shell} and run: source ${shell}`));
|
|
|
4122
4092
|
if (isTUI) {
|
|
4123
4093
|
const { render } = await import("ink");
|
|
4124
4094
|
const { createElement } = await import("react");
|
|
4125
|
-
const { KanbanApp } = await import("./kanban-
|
|
4095
|
+
const { KanbanApp } = await import("./kanban-KPIDX2SU.js");
|
|
4126
4096
|
render(createElement(KanbanApp, { config: merged }), { exitOnCtrlC: false });
|
|
4127
4097
|
}
|
|
4128
4098
|
await runLoop(merged, {
|
|
@@ -4342,8 +4312,7 @@ var main = defineCommand({
|
|
|
4342
4312
|
subCommands: { run, config, init, status, issue }
|
|
4343
4313
|
});
|
|
4344
4314
|
async function runConfigWizard() {
|
|
4345
|
-
|
|
4346
|
-
clack.intro(pc2.cyan(" lisa \u2014 autonomous issue resolver "));
|
|
4315
|
+
clack.intro(pc2.cyan(" lisa \u266A autonomous issue resolver "));
|
|
4347
4316
|
const providerLabels = {
|
|
4348
4317
|
claude: "Claude Code",
|
|
4349
4318
|
gemini: "Gemini CLI",
|
|
@@ -4357,7 +4326,8 @@ async function runConfigWizard() {
|
|
|
4357
4326
|
claude: ["claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5"],
|
|
4358
4327
|
gemini: ["gemini-2.5-pro", "gemini-2.0-flash", "gemini-1.5-pro"]
|
|
4359
4328
|
};
|
|
4360
|
-
const
|
|
4329
|
+
const allProviders = await getAllProvidersWithAvailability();
|
|
4330
|
+
const available = allProviders.filter((r) => r.available).map((r) => r.provider);
|
|
4361
4331
|
if (available.length === 0) {
|
|
4362
4332
|
clack.log.error("No AI provider found on your system.");
|
|
4363
4333
|
clack.log.info(
|
|
@@ -4379,9 +4349,11 @@ async function runConfigWizard() {
|
|
|
4379
4349
|
} else {
|
|
4380
4350
|
const selected = await clack.select({
|
|
4381
4351
|
message: "Which AI provider should resolve your issues?",
|
|
4382
|
-
options:
|
|
4383
|
-
value:
|
|
4384
|
-
label: providerLabels[
|
|
4352
|
+
options: allProviders.map(({ provider, available: isAvailable }) => ({
|
|
4353
|
+
value: provider.name,
|
|
4354
|
+
label: providerLabels[provider.name],
|
|
4355
|
+
hint: isAvailable ? void 0 : "not installed",
|
|
4356
|
+
disabled: !isAvailable
|
|
4385
4357
|
}))
|
|
4386
4358
|
});
|
|
4387
4359
|
if (clack.isCancel(selected)) return process.exit(0);
|
|
@@ -4413,14 +4385,47 @@ async function runConfigWizard() {
|
|
|
4413
4385
|
const source = await clack.select({
|
|
4414
4386
|
message: "Where do your issues come from?",
|
|
4415
4387
|
options: [
|
|
4416
|
-
{ value: "linear", label: "Linear",
|
|
4417
|
-
{
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4388
|
+
{ value: "linear", label: "Linear", apiHint: "GraphQL API", envVars: ["LINEAR_API_KEY"] },
|
|
4389
|
+
{
|
|
4390
|
+
value: "trello",
|
|
4391
|
+
label: "Trello",
|
|
4392
|
+
apiHint: "REST API",
|
|
4393
|
+
envVars: ["TRELLO_API_KEY", "TRELLO_TOKEN"]
|
|
4394
|
+
},
|
|
4395
|
+
{
|
|
4396
|
+
value: "github-issues",
|
|
4397
|
+
label: "GitHub Issues",
|
|
4398
|
+
apiHint: "REST API",
|
|
4399
|
+
envVars: ["GITHUB_TOKEN"]
|
|
4400
|
+
},
|
|
4401
|
+
{
|
|
4402
|
+
value: "gitlab-issues",
|
|
4403
|
+
label: "GitLab Issues",
|
|
4404
|
+
apiHint: "REST API",
|
|
4405
|
+
envVars: ["GITLAB_TOKEN"]
|
|
4406
|
+
},
|
|
4407
|
+
{ value: "plane", label: "Plane", apiHint: "REST API", envVars: ["PLANE_API_TOKEN"] },
|
|
4408
|
+
{
|
|
4409
|
+
value: "shortcut",
|
|
4410
|
+
label: "Shortcut",
|
|
4411
|
+
apiHint: "REST API",
|
|
4412
|
+
envVars: ["SHORTCUT_API_TOKEN"]
|
|
4413
|
+
},
|
|
4414
|
+
{
|
|
4415
|
+
value: "jira",
|
|
4416
|
+
label: "Jira",
|
|
4417
|
+
apiHint: "REST API",
|
|
4418
|
+
envVars: ["JIRA_BASE_URL", "JIRA_EMAIL", "JIRA_API_TOKEN"]
|
|
4419
|
+
}
|
|
4420
|
+
].map(({ value, label: label2, apiHint, envVars }) => {
|
|
4421
|
+
const missing2 = envVars.filter((v) => !process.env[v]);
|
|
4422
|
+
return {
|
|
4423
|
+
value,
|
|
4424
|
+
label: label2,
|
|
4425
|
+
hint: missing2.length > 0 ? `missing: ${missing2.join(", ")}` : apiHint,
|
|
4426
|
+
disabled: missing2.length > 0
|
|
4427
|
+
};
|
|
4428
|
+
})
|
|
4424
4429
|
});
|
|
4425
4430
|
if (clack.isCancel(source)) return process.exit(0);
|
|
4426
4431
|
const missing = await getMissingEnvVars(source);
|
|
@@ -4656,6 +4661,17 @@ async function getMissingEnvVars(source) {
|
|
|
4656
4661
|
} else if (source === "trello") {
|
|
4657
4662
|
if (!process.env.TRELLO_API_KEY) missing.push("TRELLO_API_KEY");
|
|
4658
4663
|
if (!process.env.TRELLO_TOKEN) missing.push("TRELLO_TOKEN");
|
|
4664
|
+
} else if (source === "github-issues") {
|
|
4665
|
+
} else if (source === "gitlab-issues") {
|
|
4666
|
+
if (!process.env.GITLAB_TOKEN) missing.push("GITLAB_TOKEN");
|
|
4667
|
+
} else if (source === "plane") {
|
|
4668
|
+
if (!process.env.PLANE_API_TOKEN) missing.push("PLANE_API_TOKEN");
|
|
4669
|
+
} else if (source === "shortcut") {
|
|
4670
|
+
if (!process.env.SHORTCUT_API_TOKEN) missing.push("SHORTCUT_API_TOKEN");
|
|
4671
|
+
} else if (source === "jira") {
|
|
4672
|
+
if (!process.env.JIRA_BASE_URL) missing.push("JIRA_BASE_URL");
|
|
4673
|
+
if (!process.env.JIRA_EMAIL) missing.push("JIRA_EMAIL");
|
|
4674
|
+
if (!process.env.JIRA_API_TOKEN) missing.push("JIRA_API_TOKEN");
|
|
4659
4675
|
}
|
|
4660
4676
|
return missing;
|
|
4661
4677
|
}
|
|
@@ -362,9 +362,11 @@ function Sidebar({ provider, source, cwd }) {
|
|
|
362
362
|
/* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", marginBottom: 1, children: [
|
|
363
363
|
/* @__PURE__ */ jsx5(Text5, { color: "yellow", children: "\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557" }),
|
|
364
364
|
/* @__PURE__ */ jsxs5(Text5, { color: "yellow", children: [
|
|
365
|
-
"\u2551",
|
|
366
|
-
/* @__PURE__ */ jsx5(Text5, { color: "white", bold: true, children: "
|
|
367
|
-
/* @__PURE__ */ jsx5(Text5, { color: "yellow", children: "\
|
|
365
|
+
"\u2551 ",
|
|
366
|
+
/* @__PURE__ */ jsx5(Text5, { color: "white", bold: true, children: "L I S A " }),
|
|
367
|
+
/* @__PURE__ */ jsx5(Text5, { color: "yellow", bold: true, children: "\u266A" }),
|
|
368
|
+
/* @__PURE__ */ jsx5(Text5, { color: "white", bold: true, children: " " }),
|
|
369
|
+
"\u2551"
|
|
368
370
|
] }),
|
|
369
371
|
/* @__PURE__ */ jsx5(Text5, { color: "yellow", children: "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D" })
|
|
370
372
|
] }),
|