@codyswann/lisa 3.49.0 → 3.51.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/gate-report-agent-hooks.d.ts +40 -0
- package/dist/cli/gate-report-agent-hooks.d.ts.map +1 -0
- package/dist/cli/gate-report-agent-hooks.js +226 -0
- package/dist/cli/gate-report-agent-hooks.js.map +1 -0
- package/dist/cli/gate-report-assemble.d.ts +37 -0
- package/dist/cli/gate-report-assemble.d.ts.map +1 -0
- package/dist/cli/gate-report-assemble.js +69 -0
- package/dist/cli/gate-report-assemble.js.map +1 -0
- package/dist/cli/gate-report-cells.d.ts +27 -2
- package/dist/cli/gate-report-cells.d.ts.map +1 -1
- package/dist/cli/gate-report-cells.js +59 -14
- package/dist/cli/gate-report-cells.js.map +1 -1
- package/dist/cli/gate-report-contexts.d.ts +70 -0
- package/dist/cli/gate-report-contexts.d.ts.map +1 -0
- package/dist/cli/gate-report-contexts.js +72 -0
- package/dist/cli/gate-report-contexts.js.map +1 -0
- package/dist/cli/gate-report-facade.d.ts +62 -0
- package/dist/cli/gate-report-facade.d.ts.map +1 -0
- package/dist/cli/gate-report-facade.js +224 -0
- package/dist/cli/gate-report-facade.js.map +1 -0
- package/dist/cli/gate-report-fragment.d.ts +11 -0
- package/dist/cli/gate-report-fragment.d.ts.map +1 -0
- package/dist/cli/gate-report-fragment.js +100 -0
- package/dist/cli/gate-report-fragment.js.map +1 -0
- package/dist/cli/gate-report-html.d.ts +47 -0
- package/dist/cli/gate-report-html.d.ts.map +1 -0
- package/dist/cli/gate-report-html.js +49 -0
- package/dist/cli/gate-report-html.js.map +1 -0
- package/dist/cli/gate-report-joins.d.ts +37 -0
- package/dist/cli/gate-report-joins.d.ts.map +1 -0
- package/dist/cli/gate-report-joins.js +104 -0
- package/dist/cli/gate-report-joins.js.map +1 -0
- package/dist/cli/gate-report-merge.d.ts +22 -0
- package/dist/cli/gate-report-merge.d.ts.map +1 -0
- package/dist/cli/gate-report-merge.js +79 -0
- package/dist/cli/gate-report-merge.js.map +1 -0
- package/dist/cli/gate-report-preview.d.ts +0 -18
- package/dist/cli/gate-report-preview.d.ts.map +1 -1
- package/dist/cli/gate-report-preview.js +35 -266
- package/dist/cli/gate-report-preview.js.map +1 -1
- package/dist/cli/gate-report-rows.d.ts +39 -0
- package/dist/cli/gate-report-rows.d.ts.map +1 -0
- package/dist/cli/gate-report-rows.js +209 -0
- package/dist/cli/gate-report-rows.js.map +1 -0
- package/dist/cli/gate-report-sections.d.ts +32 -0
- package/dist/cli/gate-report-sections.d.ts.map +1 -0
- package/dist/cli/gate-report-sections.js +164 -0
- package/dist/cli/gate-report-sections.js.map +1 -0
- package/dist/cli/gate-report-style.d.ts +19 -0
- package/dist/cli/gate-report-style.d.ts.map +1 -0
- package/dist/cli/gate-report-style.js +97 -0
- package/dist/cli/gate-report-style.js.map +1 -0
- package/dist/cli/gate-report-summary.d.ts.map +1 -1
- package/dist/cli/gate-report-summary.js +3 -0
- package/dist/cli/gate-report-summary.js.map +1 -1
- package/dist/cli/gate-report-types.d.ts +132 -1
- package/dist/cli/gate-report-types.d.ts.map +1 -1
- package/dist/cli/gate-report-types.js +1 -1
- package/dist/cli/gate-report-upstream.d.ts +70 -0
- package/dist/cli/gate-report-upstream.d.ts.map +1 -0
- package/dist/cli/gate-report-upstream.js +90 -0
- package/dist/cli/gate-report-upstream.js.map +1 -0
- package/dist/cli/gate-report.d.ts +2 -0
- package/dist/cli/gate-report.d.ts.map +1 -1
- package/dist/cli/gate-report.js +98 -140
- package/dist/cli/gate-report.js.map +1 -1
- package/dist/cli/ui-cmd.d.ts +4 -0
- package/dist/cli/ui-cmd.d.ts.map +1 -1
- package/dist/cli/ui-cmd.js +10 -2
- package/dist/cli/ui-cmd.js.map +1 -1
- package/dist/cli/ui-gate-report.d.ts +57 -0
- package/dist/cli/ui-gate-report.d.ts.map +1 -0
- package/dist/cli/ui-gate-report.js +95 -0
- package/dist/cli/ui-gate-report.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +23 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -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 +56 -3
- package/ui/index.html +52 -0
package/package.json
CHANGED
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"zod-validation-error": "^4.0.0"
|
|
142
142
|
},
|
|
143
143
|
"name": "@codyswann/lisa",
|
|
144
|
-
"version": "3.
|
|
144
|
+
"version": "3.51.0",
|
|
145
145
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
146
146
|
"main": "dist/index.js",
|
|
147
147
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.51.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": "3.
|
|
3
|
+
"version": "3.51.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": "3.
|
|
3
|
+
"version": "3.51.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": "3.
|
|
3
|
+
"version": "3.51.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": "3.
|
|
3
|
+
"version": "3.51.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"
|
package/ui/README.md
CHANGED
|
@@ -5,9 +5,13 @@ every configuration surface Lisa exposes to host projects and presents it as a
|
|
|
5
5
|
navigable, editable-looking settings UI.
|
|
6
6
|
|
|
7
7
|
**Prototype scope:** every control is interactive (toggles, selects, inputs,
|
|
8
|
-
tabs, dirty-state tracking, save bar)
|
|
9
|
-
|
|
10
|
-
`
|
|
8
|
+
tabs, dirty-state tracking, save bar). Reading real values IS wired up: see
|
|
9
|
+
`lisa ui` below. Persistence is partial and the line to read is
|
|
10
|
+
`src/sync/registry.ts`: a control whose config key is in `SYNC_REGISTRY` is
|
|
11
|
+
written to `.lisa.config.json` through `POST /api/config`; every other control
|
|
12
|
+
still only clears the in-memory dirty state on "Save". `gates` is **not** a
|
|
13
|
+
registry key, so no console write can touch a gate declaration today — which is
|
|
14
|
+
why the Doctor section reports and never repairs.
|
|
11
15
|
|
|
12
16
|
## Run it
|
|
13
17
|
|
|
@@ -44,6 +48,54 @@ section reads the harness scheduler through the `automations` probe (Codex
|
|
|
44
48
|
only `lisa-auto-<project>-*` jobs and never fabricating demo rows when the
|
|
45
49
|
scheduler is absent or unreadable.
|
|
46
50
|
|
|
51
|
+
## Doctor (`GET /api/gate-report`)
|
|
52
|
+
|
|
53
|
+
The **Doctor** section answers a different question from Health: not "is this
|
|
54
|
+
project in band with the Lisa it has installed", but **what do this project's
|
|
55
|
+
checks actually prove, where does each proof happen, and is the thing that
|
|
56
|
+
would block a merge even wired**. It is derived live, per project, by
|
|
57
|
+
deterministic code — `buildGateReport()` — and rendered by one pure
|
|
58
|
+
`report -> HTML` function that both this tab and the standalone document use, so
|
|
59
|
+
the two can never disagree.
|
|
60
|
+
|
|
61
|
+
**Where the markup lives, and why.** The tab's HTML is composed by the server at
|
|
62
|
+
request time and fetched by a ~30-line block in `index.html`. It is deliberately
|
|
63
|
+
NOT pasted into this file: `index.html` is a single 13,000-line zero-build
|
|
64
|
+
document with a known concurrent-edit hazard where union merges lose braces, and
|
|
65
|
+
a section of that size inline would make a bad merge materially worse while
|
|
66
|
+
putting a second copy of the markup somewhere no test renders. The stylesheet is
|
|
67
|
+
scoped to `.lisa-gate-report` and every class is prefixed `lgr-`, so it cannot
|
|
68
|
+
restyle the console's other tabs and they cannot restyle it. Colours come from
|
|
69
|
+
the console's own theme tokens, so the tab follows the light/dark toggle.
|
|
70
|
+
|
|
71
|
+
**Opening `index.html` from disk still works.** With no server the Doctor tab
|
|
72
|
+
says the report could not be derived, in the report's own vocabulary — an
|
|
73
|
+
unknown carrying its reason, never an empty panel that would read as a clean
|
|
74
|
+
bill of health.
|
|
75
|
+
|
|
76
|
+
**Three states, never two.** Every fact is `verified` (checked this run, and
|
|
77
|
+
this is the answer — including when the answer is no), `unknown` (the fact
|
|
78
|
+
exists, this run could not reach it), or `not-applicable` (there is no such fact
|
|
79
|
+
here). An unknown is never rendered as a pass and never counted into a green
|
|
80
|
+
total, and every count states its denominator and its unknown band. The report
|
|
81
|
+
splits by what a project can actually reach: everything derivable from files it
|
|
82
|
+
holds; the live ruleset, which needs `gh` and degrades to `unknown` with a
|
|
83
|
+
reason separating *not authenticated* from *call failed* from *offline*; and
|
|
84
|
+
whether each cloud job reads the declaration, which is written in a
|
|
85
|
+
`quality.yml` most projects do not hold — read and answered when the file is
|
|
86
|
+
present, refused with a reason when it is not.
|
|
87
|
+
|
|
88
|
+
**Every finding is attributed.** A limitation of Lisa is stated once, with the
|
|
89
|
+
count it affects and a ticket number, in its own clearly labelled section —
|
|
90
|
+
never scattered through the project's report as rows the project appears to
|
|
91
|
+
have failed. Attribution, not suppression: a project's own missing script,
|
|
92
|
+
absent declaration or unreadable settings file stays firmly in the project's
|
|
93
|
+
view however unflattering, and nothing reattributed ever renders as a pass.
|
|
94
|
+
|
|
95
|
+
**It reports and never repairs.** A screen that both judges and repairs can mark
|
|
96
|
+
a row green because it *attempted* a repair, which is the exact failure class
|
|
97
|
+
this report exists to detect.
|
|
98
|
+
|
|
47
99
|
## Config sync (`lisa sync`)
|
|
48
100
|
|
|
49
101
|
`lisa sync [path] [--dry-run] [--json]` makes `.lisa.config.json` (with the
|
|
@@ -213,6 +265,7 @@ browser payload; the server exposes names and boolean presence only.
|
|
|
213
265
|
| --- | --- |
|
|
214
266
|
| Setup checklist (install → sync → tracker/PRD → repo governance → secrets → automations) | `lisa apply`, `lisa sync`, `/lisa:setup:*` skills |
|
|
215
267
|
| Health (version status + in-band scan) | `lisa doctor`, `lisa sync --dry-run`, `lisa health`, `/lisa:health` skill |
|
|
268
|
+
| Doctor (what each check proves, where, and whether it blocks a merge) | `all/copy-overwrite/scripts/lisa-gates.mjs`, `.lisa.config.json`, `package.json`, `.husky/`, `.github/workflows/`, branch protection |
|
|
216
269
|
| Core workflow (the delivery-loop slash commands and their automations) | `plugins/src/base/commands/lisa/`, `plugins/src/base/skills/` |
|
|
217
270
|
| Starter templates (provenance + planned two-way sync) | `src/cli/starters.ts`, planned `starter.*` config |
|
|
218
271
|
| General (`harness`, `tracker`, `source`, `repo`, package manager) | `src/core/config.ts`, `plugins/src/base/rules/reference/config-resolution.md` |
|
package/ui/index.html
CHANGED
|
@@ -1884,6 +1884,7 @@
|
|
|
1884
1884
|
"overview",
|
|
1885
1885
|
"setup",
|
|
1886
1886
|
"health",
|
|
1887
|
+
"doctor",
|
|
1887
1888
|
"general",
|
|
1888
1889
|
"stacks",
|
|
1889
1890
|
"starters",
|
|
@@ -1927,6 +1928,14 @@
|
|
|
1927
1928
|
sections: {},
|
|
1928
1929
|
};
|
|
1929
1930
|
|
|
1931
|
+
/* --------------------------------- Doctor --------------------------------- */
|
|
1932
|
+
DATA.sections.doctor = {
|
|
1933
|
+
title: "Doctor",
|
|
1934
|
+
desc: "What this project's checks actually prove — derived live from its own settings file, package scripts, git hooks, workflows and branch protection. Nothing here is written by hand or summarised by a model, and anything this run could not determine says so rather than showing as a pass.",
|
|
1935
|
+
src: ".lisa.config.json · package.json · .husky/ · .github/workflows/ · branch protection",
|
|
1936
|
+
blocks: [{ type: "doctor-report" }],
|
|
1937
|
+
};
|
|
1938
|
+
|
|
1930
1939
|
/* ---------------------------------- Overview ---------------------------------- */
|
|
1931
1940
|
DATA.sections.overview = {
|
|
1932
1941
|
title: "Overview",
|
|
@@ -11490,7 +11499,50 @@
|
|
|
11490
11499
|
if (block && wrap) renderPluginsInto(wrap, block);
|
|
11491
11500
|
}
|
|
11492
11501
|
|
|
11502
|
+
/* The Doctor tab renders a fragment the server composes at request time
|
|
11503
|
+
(GET /api/gate-report) instead of carrying the report's markup here.
|
|
11504
|
+
This file is one 13,000-line document with no build step and a known
|
|
11505
|
+
concurrent-edit hazard where union merges lose braces; a section of
|
|
11506
|
+
that size pasted inline would make a bad merge materially worse, and
|
|
11507
|
+
would be a second copy of markup no test renders.
|
|
11508
|
+
Opened straight from disk there is no server, so the panel says exactly
|
|
11509
|
+
that — an unknown carrying its reason, in the report's own vocabulary.
|
|
11510
|
+
An empty panel would read as "nothing to report", which is the one
|
|
11511
|
+
thing it must never mean. */
|
|
11512
|
+
const DOCTOR_UNAVAILABLE =
|
|
11513
|
+
"This report is derived by `lisa ui` from the project on disk. This " +
|
|
11514
|
+
"page was opened without that server, so none of it could be checked " +
|
|
11515
|
+
"— that is a missing derivation, not a clean bill of health. Run " +
|
|
11516
|
+
"`lisa ui` in the project to see it.";
|
|
11517
|
+
|
|
11518
|
+
function buildDoctorReport() {
|
|
11519
|
+
const wrap = el("div", "doctor-report-block");
|
|
11520
|
+
wrap.appendChild(
|
|
11521
|
+
el("div", "callout", "Deriving this project's gate report…")
|
|
11522
|
+
);
|
|
11523
|
+
(async () => {
|
|
11524
|
+
try {
|
|
11525
|
+
const response = await fetch("/api/gate-report", {
|
|
11526
|
+
cache: "no-store",
|
|
11527
|
+
});
|
|
11528
|
+
if (!response.ok) throw new Error("unavailable");
|
|
11529
|
+
const payload = await response.json();
|
|
11530
|
+
if (typeof payload.html !== "string") {
|
|
11531
|
+
throw new Error("unavailable");
|
|
11532
|
+
}
|
|
11533
|
+
wrap.innerHTML = payload.html;
|
|
11534
|
+
} catch {
|
|
11535
|
+
wrap.innerHTML = "";
|
|
11536
|
+
wrap.appendChild(
|
|
11537
|
+
el("div", "callout warn", esc(DOCTOR_UNAVAILABLE))
|
|
11538
|
+
);
|
|
11539
|
+
}
|
|
11540
|
+
})();
|
|
11541
|
+
return wrap;
|
|
11542
|
+
}
|
|
11543
|
+
|
|
11493
11544
|
function buildBlock(block) {
|
|
11545
|
+
if (block.type === "doctor-report") return buildDoctorReport();
|
|
11494
11546
|
if (block.type === "tiles") return buildTiles(block);
|
|
11495
11547
|
if (block.type === "flow") return buildFlow(block);
|
|
11496
11548
|
if (block.type === "stacks") return buildStacks(block);
|