@codyswann/lisa 2.228.0 → 2.229.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/dist/cli/ui-cmd.d.ts +9 -1
- package/dist/cli/ui-cmd.d.ts.map +1 -1
- package/dist/cli/ui-cmd.js +142 -11
- package/dist/cli/ui-cmd.js.map +1 -1
- package/dist/cli/ui-status-json.d.ts +29 -0
- package/dist/cli/ui-status-json.d.ts.map +1 -0
- package/dist/cli/ui-status-json.js +162 -0
- package/dist/cli/ui-status-json.js.map +1 -0
- package/dist/cli/ui-status.d.ts +42 -0
- package/dist/cli/ui-status.d.ts.map +1 -0
- package/dist/cli/ui-status.js +221 -0
- package/dist/cli/ui-status.js.map +1 -0
- package/package.json +2 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/ui/README.md +15 -0
- package/ui/index.html +156 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live-status probe contract and bounded execution for `lisa ui`.
|
|
3
|
+
* @module cli/ui-status
|
|
4
|
+
*/
|
|
5
|
+
import { execFile } from "node:child_process";
|
|
6
|
+
import { normalizeProbeResult } from "./ui-status-json.js";
|
|
7
|
+
/** Error used internally to distinguish a bounded probe timeout. */
|
|
8
|
+
class ProbeTimeoutError extends Error {
|
|
9
|
+
/**
|
|
10
|
+
* Create a probe timeout error.
|
|
11
|
+
* @param timeoutMs - Configured timeout in milliseconds
|
|
12
|
+
*/
|
|
13
|
+
constructor(timeoutMs) {
|
|
14
|
+
super(`Probe timed out after ${timeoutMs}ms`);
|
|
15
|
+
this.name = "ProbeTimeoutError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert arbitrary thrown data into a stable failure classification.
|
|
20
|
+
* @param error - Value thrown by a probe
|
|
21
|
+
* @returns Timeout classification and non-empty human-readable message
|
|
22
|
+
*/
|
|
23
|
+
function classifyProbeError(error) {
|
|
24
|
+
try {
|
|
25
|
+
const timedOut = error instanceof ProbeTimeoutError;
|
|
26
|
+
const rawMessage = error instanceof Error ? error.message : String(error);
|
|
27
|
+
return {
|
|
28
|
+
timedOut,
|
|
29
|
+
message: rawMessage.trim().length > 0
|
|
30
|
+
? rawMessage
|
|
31
|
+
: "Probe failed without an error message",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {
|
|
36
|
+
timedOut: false,
|
|
37
|
+
message: "Probe failed with an unreadable error",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Run one probe without allowing it to block siblings or fabricate data.
|
|
43
|
+
* @param probe - Probe to execute
|
|
44
|
+
* @returns Explicit result, or unknown for invalid input, failure, or timeout
|
|
45
|
+
*/
|
|
46
|
+
export async function runProbe(probe) {
|
|
47
|
+
if (!Number.isFinite(probe.timeoutMs) || probe.timeoutMs < 0) {
|
|
48
|
+
return {
|
|
49
|
+
state: "unknown",
|
|
50
|
+
reason: "invalid-timeout",
|
|
51
|
+
message: `Probe timeout must be a finite non-negative number; received ${String(probe.timeoutMs)}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const controller = new AbortController();
|
|
55
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
56
|
+
controller.signal.addEventListener("abort", () => reject(controller.signal.reason), { once: true });
|
|
57
|
+
});
|
|
58
|
+
const timer = setTimeout(() => controller.abort(new ProbeTimeoutError(probe.timeoutMs)), probe.timeoutMs);
|
|
59
|
+
try {
|
|
60
|
+
const result = await Promise.race([probe.run(controller.signal), timeout]);
|
|
61
|
+
return normalizeProbeResult(result);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const { timedOut, message } = classifyProbeError(error);
|
|
65
|
+
return {
|
|
66
|
+
state: "unknown",
|
|
67
|
+
reason: timedOut ? "timeout" : "probe-failed",
|
|
68
|
+
message,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
clearTimeout(timer);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Execute `gh auth status` without invoking a shell.
|
|
77
|
+
* @param cwd - Project root used as the command working directory
|
|
78
|
+
* @param timeoutMs - Child-process timeout in milliseconds
|
|
79
|
+
* @param signal - Cancellation signal controlled by the probe runner
|
|
80
|
+
* @param hostname - Project origin hostname whose active account is checked
|
|
81
|
+
* @returns Authentication state when the command runs
|
|
82
|
+
*/
|
|
83
|
+
const runGithubAuthStatus = async (cwd, timeoutMs, signal, hostname) => await new Promise((resolve, reject) => {
|
|
84
|
+
const ghExecutable = "gh";
|
|
85
|
+
execFile(
|
|
86
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path -- fixed user-installed gh executable
|
|
87
|
+
ghExecutable, ["auth", "status", "--active", "--hostname", hostname, "--json", "hosts"], { cwd, signal, timeout: timeoutMs, encoding: "utf8" }, (error, stdout) => {
|
|
88
|
+
if (error !== null) {
|
|
89
|
+
reject(error);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const parsed = JSON.parse(stdout);
|
|
94
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
95
|
+
throw new TypeError("GitHub auth status did not return an object");
|
|
96
|
+
}
|
|
97
|
+
const hosts = Reflect.get(parsed, "hosts");
|
|
98
|
+
if (typeof hosts !== "object" || hosts === null) {
|
|
99
|
+
throw new TypeError("GitHub auth status omitted its hosts map");
|
|
100
|
+
}
|
|
101
|
+
const accounts = Reflect.get(hosts, hostname);
|
|
102
|
+
const authenticated = Array.isArray(accounts) &&
|
|
103
|
+
accounts.some(account => typeof account === "object" &&
|
|
104
|
+
account !== null &&
|
|
105
|
+
Reflect.get(account, "active") === true &&
|
|
106
|
+
Reflect.get(account, "state") === "success");
|
|
107
|
+
resolve(authenticated ? "authenticated" : "not-authenticated");
|
|
108
|
+
}
|
|
109
|
+
catch (parseError) {
|
|
110
|
+
reject(parseError);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* Read the effective origin URL through git without invoking a shell.
|
|
116
|
+
* @param cwd - Project root
|
|
117
|
+
* @param timeoutMs - Child-process timeout
|
|
118
|
+
* @param signal - Probe cancellation signal
|
|
119
|
+
* @returns Origin remote URL
|
|
120
|
+
*/
|
|
121
|
+
async function readOriginRemote(cwd, timeoutMs, signal) {
|
|
122
|
+
return await new Promise((resolve, reject) => {
|
|
123
|
+
const gitExecutable = "git";
|
|
124
|
+
execFile(
|
|
125
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path -- fixed user-installed git executable
|
|
126
|
+
gitExecutable, ["-C", cwd, "remote", "get-url", "origin"], { cwd, signal, timeout: timeoutMs, encoding: "utf8" }, (error, stdout) => {
|
|
127
|
+
if (error !== null) {
|
|
128
|
+
reject(error);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const remote = stdout.trim();
|
|
132
|
+
if (remote.length === 0) {
|
|
133
|
+
reject(new Error("Project origin remote is empty"));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
resolve(remote);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Extract a hostname from URL-form and scp-form git remotes.
|
|
142
|
+
* @param remote - Git remote URL
|
|
143
|
+
* @returns Hostname used by `gh auth status`
|
|
144
|
+
*/
|
|
145
|
+
function remoteHostname(remote) {
|
|
146
|
+
const normalize = (hostname) => {
|
|
147
|
+
const normalized = hostname.toLowerCase();
|
|
148
|
+
return normalized.endsWith(".") ? normalized.slice(0, -1) : normalized;
|
|
149
|
+
};
|
|
150
|
+
if (!remote.includes("://")) {
|
|
151
|
+
const separator = remote.indexOf(":");
|
|
152
|
+
const authority = separator > 0 ? remote.slice(0, separator) : "";
|
|
153
|
+
const host = authority.slice(authority.lastIndexOf("@") + 1);
|
|
154
|
+
const looksLikeWindowsPath = authority.length === 1 && /[A-Za-z]/u.test(authority);
|
|
155
|
+
if (host.length > 0 &&
|
|
156
|
+
!looksLikeWindowsPath &&
|
|
157
|
+
!Array.from(host).some(character => /\s/u.test(character))) {
|
|
158
|
+
return normalize(host);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const hostname = new URL(remote).hostname;
|
|
163
|
+
if (hostname.length > 0) {
|
|
164
|
+
return normalize(hostname);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Fall through to the explicit error below.
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Unable to determine GitHub hostname from origin: ${remote}`);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Create the reference GitHub authentication probe.
|
|
174
|
+
* @param cwd - Project root used as the command working directory
|
|
175
|
+
* @param check - Injectable command check used by focused tests
|
|
176
|
+
* @param readRemote - Injectable effective-origin reader used by focused tests
|
|
177
|
+
* @returns Reference probe for the live-status transport
|
|
178
|
+
*/
|
|
179
|
+
export function createGithubAuthProbe(cwd, check = runGithubAuthStatus, readRemote = readOriginRemote) {
|
|
180
|
+
const timeoutMs = 5_000;
|
|
181
|
+
return {
|
|
182
|
+
id: "github-auth",
|
|
183
|
+
timeoutMs,
|
|
184
|
+
run: async (signal) => {
|
|
185
|
+
const remote = await readRemote(cwd, timeoutMs + 250, signal);
|
|
186
|
+
const hostname = remoteHostname(remote);
|
|
187
|
+
const state = await check(cwd, timeoutMs + 250, signal, hostname);
|
|
188
|
+
return state === "authenticated"
|
|
189
|
+
? { state: "value", value: true }
|
|
190
|
+
: {
|
|
191
|
+
state: "unknown",
|
|
192
|
+
reason: "not-authenticated",
|
|
193
|
+
message: "GitHub CLI is not authenticated",
|
|
194
|
+
};
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Validate probe keys before binding a server so status snapshots cannot lose data.
|
|
200
|
+
* @param probes - Registered status probes
|
|
201
|
+
*/
|
|
202
|
+
export function validateStatusProbes(probes) {
|
|
203
|
+
for (const [index, probe] of probes.entries()) {
|
|
204
|
+
if (probe.id.trim().length === 0) {
|
|
205
|
+
throw new Error("Probe id must contain a non-whitespace character");
|
|
206
|
+
}
|
|
207
|
+
if (probes.slice(0, index).some(candidate => candidate.id === probe.id)) {
|
|
208
|
+
throw new Error(`Duplicate probe id: ${probe.id}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Execute all probes concurrently, with failures isolated per probe.
|
|
214
|
+
* @param probes - Probes to execute
|
|
215
|
+
* @returns Results keyed by stable probe identifier
|
|
216
|
+
*/
|
|
217
|
+
export async function readStatusSnapshot(probes) {
|
|
218
|
+
const entries = await Promise.all(probes.map(async (probe) => [probe.id, await runProbe(probe)]));
|
|
219
|
+
return Object.fromEntries(entries);
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=ui-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-status.js","sourceRoot":"","sources":["../../src/cli/ui-status.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.
|
|
105
|
+
"version": "2.229.0",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -227,6 +227,7 @@
|
|
|
227
227
|
},
|
|
228
228
|
"devDependencies": {
|
|
229
229
|
"@codyswann/lisa": "^2.195.6",
|
|
230
|
+
"@playwright/test": "^1.61.1",
|
|
230
231
|
"@types/js-yaml": "^4.0.9",
|
|
231
232
|
"@types/semver": "^7.7.1",
|
|
232
233
|
"eslint-plugin-oxlint": "^1.62.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.229.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.229.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.229.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.229.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.229.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|