@tarcisiopgs/lisa 1.37.0 → 1.38.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 +4 -2
- package/dist/{chunk-CTMZ666K.js → chunk-4MZ2565Y.js} +2 -0
- package/dist/{chunk-555PDPCW.js → chunk-AKG5WYVB.js} +39 -17
- package/dist/{chunk-VS6R5KBO.js → chunk-LR2GREZS.js} +13 -1
- package/dist/{chunk-FUIWWBDX.js → chunk-MC4SAOF2.js} +2 -2
- package/dist/{chunk-XXVTKBC5.js → chunk-MQG6ANVU.js} +44 -767
- package/dist/{chunk-YMV4CBQE.js → chunk-YBM6JNRO.js} +90 -0
- package/dist/{chunk-MOQR4OY5.js → chunk-YC736WGU.js} +3 -3
- package/dist/chunk-ZOVVFU7B.js +970 -0
- package/dist/{detection-MHQPM7O6.js → detection-2Z6TXYHU.js} +3 -3
- package/dist/index.js +67 -39
- package/dist/{kanban-ZQ67DJHP.js → kanban-6WPOGFK5.js} +100 -15
- package/dist/{loop-UN2MO6JN.js → loop-DNAY72UG.js} +6 -5
- package/dist/{merge-Q3P65FEA.js → merge-NWSEV3FR.js} +1 -1
- package/dist/platform-ZDLHR264.js +24 -0
- package/dist/{tui-bridge-A5XQUJQ7.js → tui-bridge-L5NWRFEF.js} +6 -5
- 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
|
+
- **9 AI agents** — Claude Code, Gemini CLI, GitHub Copilot CLI, Cursor Agent, Aider, Goose, OpenCode, Codex, Kilo 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
|
|
@@ -53,7 +53,7 @@ If something fails — pre-push hooks, quota limits, stuck processes — Lisa ha
|
|
|
53
53
|
- **Smart activity detection** — reads agent session logs to prevent false stuck kills during analysis phases
|
|
54
54
|
- **Progress comments** — posts real-time status updates on issues as Lisa works through stages
|
|
55
55
|
- **Context enrichment** — greps for issue-related files and surfaces them in the agent prompt
|
|
56
|
-
- **PR reviewers & assignees** — auto-request reviews and assign PRs via config; `self` keyword resolves to the authenticated user
|
|
56
|
+
- **PR reviewers & assignees** — auto-request reviews and assign PRs via config; `self` keyword resolves to the authenticated user. Manage reviewers interactively from the TUI detail view (`r`)
|
|
57
57
|
- **Self-healing** — orphan recovery on startup, push failure retry, stuck process detection
|
|
58
58
|
- **Guardrails** — past failures are injected into future prompts to avoid repeating mistakes
|
|
59
59
|
- **Lineage context** — plan-decomposed issues get sibling task awareness, preventing duplicate work in concurrent mode
|
|
@@ -67,6 +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
71
|
|
|
71
72
|
Configure models and provider-specific options:
|
|
72
73
|
|
|
@@ -360,6 +361,7 @@ The real-time Kanban board shows issue progress, streams provider output, and de
|
|
|
360
361
|
|-----|--------|
|
|
361
362
|
| `↑` `↓` | Scroll output log |
|
|
362
363
|
| `o` | Open PR in browser |
|
|
364
|
+
| `r` | Toggle reviewer picker (add/remove reviewers on the PR) |
|
|
363
365
|
| `m` | Merge PR (warns if CI not passed) |
|
|
364
366
|
| `Esc` | Back to board |
|
|
365
367
|
|
|
@@ -2,40 +2,42 @@
|
|
|
2
2
|
import {
|
|
3
3
|
WATCH_POLL_INTERVAL_MS,
|
|
4
4
|
analyzeProject,
|
|
5
|
-
appendPlatformAttribution,
|
|
6
|
-
appendPlatformProofOfWork,
|
|
7
|
-
appendPlatformSpecCompliance,
|
|
8
|
-
applyPrReviewersAndAssignees,
|
|
9
|
-
buildCompliancePrompt,
|
|
10
|
-
buildComplianceRecoveryPrompt,
|
|
11
5
|
buildContinuationPrompt,
|
|
12
6
|
buildImplementPrompt,
|
|
13
7
|
buildLineagePromptBlock,
|
|
14
8
|
buildNativeWorktreePrompt,
|
|
15
9
|
buildPlanningPrompt,
|
|
16
10
|
buildScopedImplementPrompt,
|
|
17
|
-
buildValidationRecoveryPrompt,
|
|
18
11
|
contextExists,
|
|
19
12
|
createProvider,
|
|
20
13
|
createSource,
|
|
21
14
|
detectPackageManager,
|
|
22
15
|
detectTestRunner,
|
|
23
|
-
extractAcceptanceCriteria,
|
|
24
16
|
getContextPath,
|
|
25
|
-
getFullDiff,
|
|
26
17
|
isCompleteProviderExhaustion,
|
|
27
|
-
isProofOfWorkEnabled,
|
|
28
|
-
isSpecComplianceEnabled,
|
|
29
18
|
loadLineageForIssue,
|
|
30
|
-
parseComplianceResponse,
|
|
31
19
|
readContext,
|
|
32
20
|
resolveModels,
|
|
33
|
-
runValidationCommands,
|
|
34
21
|
runWithFallback
|
|
35
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MQG6ANVU.js";
|
|
36
23
|
import {
|
|
37
24
|
kanbanEmitter
|
|
38
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-LR2GREZS.js";
|
|
26
|
+
import {
|
|
27
|
+
appendPlatformAttribution,
|
|
28
|
+
appendPlatformProofOfWork,
|
|
29
|
+
appendPlatformSpecCompliance,
|
|
30
|
+
applyPrReviewersAndAssignees,
|
|
31
|
+
buildCompliancePrompt,
|
|
32
|
+
buildComplianceRecoveryPrompt,
|
|
33
|
+
buildValidationRecoveryPrompt,
|
|
34
|
+
extractAcceptanceCriteria,
|
|
35
|
+
getFullDiff,
|
|
36
|
+
isProofOfWorkEnabled,
|
|
37
|
+
isSpecComplianceEnabled,
|
|
38
|
+
parseComplianceResponse,
|
|
39
|
+
runValidationCommands
|
|
40
|
+
} from "./chunk-ZOVVFU7B.js";
|
|
39
41
|
import {
|
|
40
42
|
appendRawEntry,
|
|
41
43
|
migrateGuardrails
|
|
@@ -66,7 +68,7 @@ import {
|
|
|
66
68
|
import {
|
|
67
69
|
LisaError,
|
|
68
70
|
formatError
|
|
69
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-4MZ2565Y.js";
|
|
70
72
|
import {
|
|
71
73
|
fetchPrFeedback,
|
|
72
74
|
formatPrFeedbackEntry
|
|
@@ -88,7 +90,8 @@ var VALID_PROVIDERS = [
|
|
|
88
90
|
"cursor",
|
|
89
91
|
"goose",
|
|
90
92
|
"aider",
|
|
91
|
-
"codex"
|
|
93
|
+
"codex",
|
|
94
|
+
"kilo"
|
|
92
95
|
];
|
|
93
96
|
var VALID_SOURCES = [
|
|
94
97
|
"linear",
|
|
@@ -2219,6 +2222,9 @@ var ProgressReporter = class {
|
|
|
2219
2222
|
this.issueId = issueId;
|
|
2220
2223
|
this.enabled = enabled;
|
|
2221
2224
|
}
|
|
2225
|
+
source;
|
|
2226
|
+
issueId;
|
|
2227
|
+
enabled;
|
|
2222
2228
|
commentId = null;
|
|
2223
2229
|
stages = [];
|
|
2224
2230
|
lastUpdate = 0;
|
|
@@ -2952,6 +2958,10 @@ ${contResult.output}
|
|
|
2952
2958
|
await cleanupWorktree(repoPath, worktreePath);
|
|
2953
2959
|
await appendPlatformAttribution(prUrl, result.providerUsed, config.platform);
|
|
2954
2960
|
await applyPrReviewersAndAssignees(prUrl, config.pr, config.platform);
|
|
2961
|
+
if (config.pr?.reviewers?.length) {
|
|
2962
|
+
const applied = config.pr.reviewers.filter((r) => r !== "self");
|
|
2963
|
+
kanbanEmitter.emit("issue:reviewers-updated", issue.id, applied);
|
|
2964
|
+
}
|
|
2955
2965
|
ok(`Step ${stepNum} complete: ${repoPath} \u2014 PR: ${prUrl}`);
|
|
2956
2966
|
return {
|
|
2957
2967
|
success: true,
|
|
@@ -3122,6 +3132,10 @@ async function runNativeWorktreeSession(config, issue, logFile, session, models,
|
|
|
3122
3132
|
ok(`PR created by provider: ${prUrl}`);
|
|
3123
3133
|
await appendPlatformAttribution(prUrl, result.providerUsed, config.platform);
|
|
3124
3134
|
await applyPrReviewersAndAssignees(prUrl, config.pr, config.platform);
|
|
3135
|
+
if (config.pr?.reviewers?.length) {
|
|
3136
|
+
const applied = config.pr.reviewers.filter((r) => r !== "self");
|
|
3137
|
+
kanbanEmitter.emit("issue:reviewers-updated", issue.id, applied);
|
|
3138
|
+
}
|
|
3125
3139
|
if (isCiMonitorEnabled(config.ci_monitor)) {
|
|
3126
3140
|
const manifestBranch = manifest?.branch;
|
|
3127
3141
|
if (manifestBranch) {
|
|
@@ -3364,6 +3378,10 @@ async function runManualWorktreeSession(config, issue, logFile, session, models,
|
|
|
3364
3378
|
kanbanEmitter.emit("issue:substatus", issue.id, "PR created");
|
|
3365
3379
|
await appendPlatformAttribution(prUrl, result.providerUsed, config.platform);
|
|
3366
3380
|
await applyPrReviewersAndAssignees(prUrl, config.pr, config.platform);
|
|
3381
|
+
if (config.pr?.reviewers?.length) {
|
|
3382
|
+
const applied = config.pr.reviewers.filter((r) => r !== "self");
|
|
3383
|
+
kanbanEmitter.emit("issue:reviewers-updated", issue.id, applied);
|
|
3384
|
+
}
|
|
3367
3385
|
if (validationResults) {
|
|
3368
3386
|
await appendPlatformProofOfWork(prUrl, validationResults, config.platform);
|
|
3369
3387
|
}
|
|
@@ -3912,6 +3930,10 @@ async function runBranchSession(config, issue, logFile, session, models, source,
|
|
|
3912
3930
|
ok(`PR created by provider: ${prUrl}`);
|
|
3913
3931
|
await appendPlatformAttribution(prUrl, result.providerUsed, config.platform);
|
|
3914
3932
|
await applyPrReviewersAndAssignees(prUrl, config.pr, config.platform);
|
|
3933
|
+
if (config.pr?.reviewers?.length) {
|
|
3934
|
+
const applied = config.pr.reviewers.filter((r) => r !== "self");
|
|
3935
|
+
kanbanEmitter.emit("issue:reviewers-updated", issue.id, applied);
|
|
3936
|
+
}
|
|
3915
3937
|
if (validationResults) {
|
|
3916
3938
|
await appendPlatformProofOfWork(prUrl, validationResults, config.platform);
|
|
3917
3939
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-HPWL5JRW.js";
|
|
8
8
|
import {
|
|
9
9
|
SourceError
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4MZ2565Y.js";
|
|
11
11
|
|
|
12
12
|
// src/ui/state.ts
|
|
13
13
|
import { EventEmitter } from "events";
|
|
@@ -891,6 +891,14 @@ function useKanbanState(bellEnabled, initialCards = []) {
|
|
|
891
891
|
const onSubstatus = (issueId, substatus) => {
|
|
892
892
|
setCards((prev) => prev.map((c) => c.id === issueId ? { ...c, substatus } : c));
|
|
893
893
|
};
|
|
894
|
+
const onReviewersUpdated = (issueId, reviewers) => {
|
|
895
|
+
setCards((prev) => prev.map((c) => c.id === issueId ? { ...c, reviewers } : c));
|
|
896
|
+
};
|
|
897
|
+
const onAvailableReviewers = (issueId, available) => {
|
|
898
|
+
setCards(
|
|
899
|
+
(prev) => prev.map((c) => c.id === issueId ? { ...c, availableReviewers: available } : c)
|
|
900
|
+
);
|
|
901
|
+
};
|
|
894
902
|
const MAX_OUTPUT_SIZE = 2e5;
|
|
895
903
|
const outputBuffer = /* @__PURE__ */ new Map();
|
|
896
904
|
let flushTimer = null;
|
|
@@ -939,6 +947,8 @@ function useKanbanState(bellEnabled, initialCards = []) {
|
|
|
939
947
|
kanbanEmitter.on("provider:resumed", onProviderResumed);
|
|
940
948
|
kanbanEmitter.on("issue:log-file", onLogFile);
|
|
941
949
|
kanbanEmitter.on("issue:substatus", onSubstatus);
|
|
950
|
+
kanbanEmitter.on("issue:reviewers-updated", onReviewersUpdated);
|
|
951
|
+
kanbanEmitter.on("issue:available-reviewers", onAvailableReviewers);
|
|
942
952
|
kanbanEmitter.on("issue:output", onOutput);
|
|
943
953
|
const onModelChanged = (model) => setModelInUse(model);
|
|
944
954
|
kanbanEmitter.on("provider:model-changed", onModelChanged);
|
|
@@ -985,6 +995,8 @@ function useKanbanState(bellEnabled, initialCards = []) {
|
|
|
985
995
|
kanbanEmitter.off("provider:resumed", onProviderResumed);
|
|
986
996
|
kanbanEmitter.off("issue:log-file", onLogFile);
|
|
987
997
|
kanbanEmitter.off("issue:substatus", onSubstatus);
|
|
998
|
+
kanbanEmitter.off("issue:reviewers-updated", onReviewersUpdated);
|
|
999
|
+
kanbanEmitter.off("issue:available-reviewers", onAvailableReviewers);
|
|
988
1000
|
kanbanEmitter.off("issue:output", onOutput);
|
|
989
1001
|
kanbanEmitter.off("provider:model-changed", onModelChanged);
|
|
990
1002
|
kanbanEmitter.off("work:empty", onEmpty);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
isGhCliAvailable
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YBM6JNRO.js";
|
|
5
5
|
import {
|
|
6
6
|
verbose
|
|
7
7
|
} from "./chunk-HPWL5JRW.js";
|
|
8
8
|
import {
|
|
9
9
|
formatError
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4MZ2565Y.js";
|
|
11
11
|
|
|
12
12
|
// src/cli/detection.ts
|
|
13
13
|
import { execSync } from "child_process";
|