@tarcisiopgs/lisa 1.13.0 → 1.13.1

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 CHANGED
@@ -8,6 +8,10 @@
8
8
  <strong>Label an issue. Walk away. Come back to a PR.</strong>
9
9
  </p>
10
10
 
11
+ <p align="center">
12
+ <img src="assets/demo.gif" alt="Lisa demo" width="800" />
13
+ </p>
14
+
11
15
  <p align="center">
12
16
  Lisa is an autonomous issue resolver that turns your backlog into pull requests — no babysitting required.
13
17
  </p>
package/dist/index.js CHANGED
@@ -5576,6 +5576,61 @@ async function waitIfPaused() {
5576
5576
  await sleep(500);
5577
5577
  }
5578
5578
  }
5579
+ async function runDemoLoop() {
5580
+ const demoIssues = [
5581
+ { id: "INT-512", title: "Rate limiter" },
5582
+ { id: "INT-513", title: "WebSocket leak" },
5583
+ { id: "INT-514", title: "Dark mode UI" }
5584
+ ];
5585
+ await sleep(3e3);
5586
+ kanbanEmitter.emit("provider:model-changed", "claude-sonnet-4-6");
5587
+ await sleep(400);
5588
+ for (const issue3 of demoIssues) {
5589
+ kanbanEmitter.emit("issue:queued", {
5590
+ id: issue3.id,
5591
+ title: issue3.title,
5592
+ description: "",
5593
+ url: ""
5594
+ });
5595
+ await sleep(300);
5596
+ }
5597
+ await sleep(600);
5598
+ const issue1 = demoIssues[0];
5599
+ kanbanEmitter.emit("issue:started", issue1.id);
5600
+ const outputs1 = [
5601
+ "Reading issue description...\n",
5602
+ "Analyzing codebase structure...\n",
5603
+ "Creating src/middleware/rateLimiter.ts...\n",
5604
+ "Writing rate limiter logic...\n",
5605
+ "Adding tests in src/middleware/rateLimiter.test.ts...\n",
5606
+ "Running tests... all passing \u2713\n",
5607
+ "Pushing branch int-512-rate-limiting...\n"
5608
+ ];
5609
+ for (const line of outputs1) {
5610
+ kanbanEmitter.emit("issue:output", issue1.id, line);
5611
+ await sleep(400);
5612
+ }
5613
+ kanbanEmitter.emit("issue:done", issue1.id, "https://github.com/acme/webapp/pull/89");
5614
+ await sleep(800);
5615
+ const issue2 = demoIssues[1];
5616
+ kanbanEmitter.emit("issue:started", issue2.id);
5617
+ const outputs2 = [
5618
+ "Reading issue description...\n",
5619
+ "Locating WebSocket connection handler...\n",
5620
+ "Patching connection lifecycle in src/ws/handler.ts...\n",
5621
+ "Adding cleanup in disconnect callback...\n",
5622
+ "Pushing branch int-513-fix-ws-memory-leak...\n"
5623
+ ];
5624
+ for (const line of outputs2) {
5625
+ kanbanEmitter.emit("issue:output", issue2.id, line);
5626
+ await sleep(400);
5627
+ }
5628
+ kanbanEmitter.emit("issue:done", issue2.id, "https://github.com/acme/webapp/pull/90");
5629
+ await sleep(800);
5630
+ kanbanEmitter.emit("work:complete", { total: 2, duration: 14e3 });
5631
+ await sleep(3e3);
5632
+ kanbanEmitter.emit("tui:exit");
5633
+ }
5579
5634
 
5580
5635
  // src/templates.ts
5581
5636
  var CONFIG_TEMPLATES = [
@@ -5721,12 +5776,43 @@ var run = defineCommand({
5721
5776
  "lifecycle-timeout": {
5722
5777
  type: "string",
5723
5778
  description: "Startup timeout per resource in seconds (default: 30)"
5779
+ },
5780
+ demo: {
5781
+ type: "boolean",
5782
+ description: "Run an animated demo of the kanban UI with fake issues",
5783
+ default: false
5724
5784
  }
5725
5785
  },
5726
5786
  async run({ args }) {
5727
5787
  const isTTY = !!process.stdout.isTTY;
5728
5788
  setOutputMode(isTTY ? "tui" : "default");
5729
5789
  banner();
5790
+ if (args.demo) {
5791
+ if (isTTY) {
5792
+ const { render } = await import("ink");
5793
+ const { createElement } = await import("react");
5794
+ const { KanbanApp } = await import("./kanban-KE4QMDQM.js");
5795
+ const demoConfig = {
5796
+ provider: "claude",
5797
+ source: "linear",
5798
+ workflow: "worktree",
5799
+ platform: "cli",
5800
+ source_config: {
5801
+ team: "Engineering",
5802
+ project: "Web App",
5803
+ label: "ready",
5804
+ pick_from: "Ready",
5805
+ in_progress: "In Progress",
5806
+ done: "Done"
5807
+ },
5808
+ loop: { cooldown: 30 },
5809
+ bell: false
5810
+ };
5811
+ render(createElement(KanbanApp, { config: demoConfig }), { exitOnCtrlC: false });
5812
+ }
5813
+ await runDemoLoop();
5814
+ return;
5815
+ }
5730
5816
  if (!configExists()) {
5731
5817
  console.error(pc.red("No configuration found. Run `lisa init` first."));
5732
5818
  process.exit(1);
@@ -5771,7 +5857,7 @@ Add them to your ${shell} and run: source ${shell}`));
5771
5857
  if (isTTY) {
5772
5858
  const { render } = await import("ink");
5773
5859
  const { createElement } = await import("react");
5774
- const { KanbanApp } = await import("./kanban-MJCCS3ZP.js");
5860
+ const { KanbanApp } = await import("./kanban-KE4QMDQM.js");
5775
5861
  render(createElement(KanbanApp, { config: merged }), { exitOnCtrlC: false });
5776
5862
  }
5777
5863
  await runLoop(merged, {
@@ -184,7 +184,7 @@ var HEADER_ROWS = 8;
184
184
  var SIDEBAR_WIDTH = 28;
185
185
  var COLUMN_OVERHEAD = 4;
186
186
  var CARD_OVERHEAD = 5;
187
- var MIN_CARD_WIDTH = 20;
187
+ var MIN_CARD_WIDTH = 1;
188
188
  function calcVisibleCount(terminalRows) {
189
189
  return Math.max(1, Math.floor((terminalRows - HEADER_ROWS) / CARD_HEIGHT));
190
190
  }
@@ -288,16 +288,15 @@ function ProgressHeader({
288
288
  }
289
289
  const progress = done / total * 100;
290
290
  const pct = Math.round(progress);
291
- const progressBarLength = 100;
292
- const completedBars = Math.round(progress / 100 * progressBarLength);
293
- const remainingBars = progressBarLength - completedBars;
294
291
  const barColor = workComplete ? "green" : watching ? "cyan" : paused ? "yellow" : "cyan";
295
292
  const borderColor = workComplete ? "green" : watching ? "cyan" : paused ? "yellow" : "gray";
296
293
  const statsText = `${done}/${total} (${pct}%)${running > 0 ? ` (${running} running)` : ""}`;
297
294
  const statsLength = statsText.length;
298
295
  const terminalWidth = availableWidth ?? stdout?.columns ?? 80;
299
296
  const barWidth = Math.max(10, terminalWidth - statsLength - OVERHEAD);
300
- const progressBar = /* @__PURE__ */ jsx3(Box3, { width: barWidth, overflow: "hidden", children: /* @__PURE__ */ jsxs3(Text3, { color: barColor, children: [
297
+ const completedBars = Math.round(progress / 100 * barWidth);
298
+ const remainingBars = barWidth - completedBars;
299
+ const progressBar = /* @__PURE__ */ jsx3(Box3, { width: barWidth, children: /* @__PURE__ */ jsxs3(Text3, { color: barColor, children: [
301
300
  "\u2588".repeat(completedBars),
302
301
  "\u2591".repeat(remainingBars)
303
302
  ] }) });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarcisiopgs/lisa",
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
4
4
  "description": "Autonomous issue resolver",
5
5
  "keywords": [
6
6
  "loop",