@codyswann/lisa 2.199.0 → 2.200.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/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +30 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/sync-cmd.d.ts +21 -0
- package/dist/cli/sync-cmd.d.ts.map +1 -0
- package/dist/cli/sync-cmd.js +43 -0
- package/dist/cli/sync-cmd.js.map +1 -0
- package/dist/cli/ui-cmd.d.ts +35 -0
- package/dist/cli/ui-cmd.d.ts.map +1 -0
- package/dist/cli/ui-cmd.js +104 -0
- package/dist/cli/ui-cmd.js.map +1 -0
- package/dist/sync/config-sync.d.ts +42 -0
- package/dist/sync/config-sync.d.ts.map +1 -0
- package/dist/sync/config-sync.js +272 -0
- package/dist/sync/config-sync.js.map +1 -0
- package/dist/sync/json-path.d.ts +58 -0
- package/dist/sync/json-path.d.ts.map +1 -0
- package/dist/sync/json-path.js +107 -0
- package/dist/sync/json-path.js.map +1 -0
- package/dist/sync/registry.d.ts +64 -0
- package/dist/sync/registry.d.ts.map +1 -0
- package/dist/sync/registry.js +207 -0
- package/dist/sync/registry.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 +180 -0
- package/ui/index.html +5396 -0
package/ui/README.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Lisa Console (UI prototype)
|
|
2
|
+
|
|
3
|
+
A self-contained, zero-build prototype of the Lisa settings console. It catalogs
|
|
4
|
+
every configuration surface Lisa exposes to host projects and presents it as a
|
|
5
|
+
navigable, editable-looking settings UI.
|
|
6
|
+
|
|
7
|
+
**Prototype scope:** every control is interactive (toggles, selects, inputs,
|
|
8
|
+
tabs, dirty-state tracking, save bar), but edits are not persisted — "Save"
|
|
9
|
+
only clears the in-memory dirty state. Reading real values IS wired up: see
|
|
10
|
+
`lisa ui` below.
|
|
11
|
+
|
|
12
|
+
## Run it
|
|
13
|
+
|
|
14
|
+
The real entrypoint is the CLI, which populates and syncs the project's
|
|
15
|
+
`.lisa.config.json` first (see `lisa sync`), then serves the console with the
|
|
16
|
+
merged live config injected — controls whose config key exists show the
|
|
17
|
+
project's actual values:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
lisa ui [path] [--port 4780] [--no-sync]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The page is also fully standalone (no build step, no dependencies) — without
|
|
24
|
+
live config it falls back to Lisa's shipped defaults:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
open ui/index.html
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Config sync (`lisa sync`)
|
|
31
|
+
|
|
32
|
+
`lisa sync [path] [--dry-run] [--json]` makes `.lisa.config.json` (with the
|
|
33
|
+
gitignored `.lisa.config.local.json` overlay) the source of truth for every
|
|
34
|
+
setting in `src/sync/registry.ts`:
|
|
35
|
+
|
|
36
|
+
- **Populate** — a completely missing config value is absorbed from its
|
|
37
|
+
mirrored artifact file when one exists (e.g. `vitest.thresholds.json`),
|
|
38
|
+
otherwise filled with Lisa's built-in default. Vendor sections are only
|
|
39
|
+
populated when the project uses that vendor.
|
|
40
|
+
- **Sync** — config values are written back into every mirrored artifact file
|
|
41
|
+
that exists on disk (config wins). Sync never scaffolds an artifact file
|
|
42
|
+
into a stack that doesn't use it.
|
|
43
|
+
- **Provenance** — pure-default populations are recorded under
|
|
44
|
+
`_lisaSync.populated`, so when a later Lisa version changes a default, sync
|
|
45
|
+
can update values that are *still the default* while never touching values
|
|
46
|
+
a human chose.
|
|
47
|
+
- **Required keys** (`tracker`, `jira.project`, `github.org`, …) can't be
|
|
48
|
+
invented; sync reports them (exit code 1) and points at the setup skill.
|
|
49
|
+
|
|
50
|
+
Mirrored artifacts today: `vitest.thresholds.json` / `jest.thresholds.json`
|
|
51
|
+
(`quality.testCoverage`), `eslint.thresholds.json` (`quality.lintBudgets`),
|
|
52
|
+
`mutation.gate.json` (`quality.mutation.gate`), and the `thresholds` key of
|
|
53
|
+
`stryker.conf.json` (`quality.mutation.strykerThresholds`).
|
|
54
|
+
|
|
55
|
+
**Provider-neutral monitoring keys.** The observability audit spans Sentry,
|
|
56
|
+
AWS CloudWatch Alarms, AWS X-Ray, and future providers, so
|
|
57
|
+
`monitor.thresholds` uses vendor-free names: `minEvents24h` (default **1**)
|
|
58
|
+
and `faultRatePct` replace the legacy `sentryMinEvents24h` /
|
|
59
|
+
`xrayFaultRatePct`. The Monitoring section shows which providers are
|
|
60
|
+
connected (detected from credentials and instrumentation, not configured by
|
|
61
|
+
hand). The runtime `lisa-monitor` skill still reads the legacy keys —
|
|
62
|
+
renaming them in `config-resolution.md` and the skill is a tracked
|
|
63
|
+
follow-up.
|
|
64
|
+
|
|
65
|
+
## Starter provenance & sync (planned — documented, not wired)
|
|
66
|
+
|
|
67
|
+
The **Starter templates** section of the console documents this contract; no
|
|
68
|
+
engine exists yet. A project records which starter repo(s) it was generated
|
|
69
|
+
from (`lisa setup-project` already knows them — `src/cli/starters.ts`) and
|
|
70
|
+
stays connected to them in both directions:
|
|
71
|
+
|
|
72
|
+
```jsonc
|
|
73
|
+
"starter": {
|
|
74
|
+
"templates": [
|
|
75
|
+
{
|
|
76
|
+
"repo": "CodySwannGT/expostarter", // origin starter
|
|
77
|
+
"ref": "main", // ref compared on each sync
|
|
78
|
+
"lastSync": { "sha": "8c1f2ab", "at": "2026-07-01" },
|
|
79
|
+
"paths": ["**"] // optional glob scope
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"sync": {
|
|
83
|
+
"auto": false, // scheduled sync via a lisa-auto cron
|
|
84
|
+
"strategy": "pull-request", // or "direct-when-clean"
|
|
85
|
+
"upstreamProposals": true, // open issues in the starter repo
|
|
86
|
+
"proposalLabel": "starter-upstream-proposal"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Downstream sync (starter → project).** A sync diffs the starter's tracked
|
|
92
|
+
ref since `lastSync.sha` and applies the changes to the host project,
|
|
93
|
+
respecting Lisa template semantics (create-only files the project now owns
|
|
94
|
+
are never clobbered; a `paths` scope limits what applies). Clean applications
|
|
95
|
+
land per `strategy`; conflicts always open a PR. `lastSync` is updated after
|
|
96
|
+
every successful run. Multiple templates are supported — e.g. an app starter
|
|
97
|
+
plus an infrastructure starter, each with its own path scope.
|
|
98
|
+
|
|
99
|
+
**Upstreaming (project → starter).** During a sync (or a standalone scan),
|
|
100
|
+
Lisa looks for *generic* additions the host project made — shared utilities,
|
|
101
|
+
dependency/security bumps, CI workflow fixes, config hardening with no
|
|
102
|
+
project-specific identifiers — and opens an issue in the starter repo,
|
|
103
|
+
labeled `proposalLabel`, containing detailed instructions on what was changed
|
|
104
|
+
and how to apply it to the starter. Anything referencing project names,
|
|
105
|
+
product features, secrets, or business logic is never proposed.
|
|
106
|
+
|
|
107
|
+
When the engine lands, `starter.*` should join the `lisa sync` registry so
|
|
108
|
+
the section above governs it like every other setting.
|
|
109
|
+
|
|
110
|
+
## Health (planned — documented, not wired)
|
|
111
|
+
|
|
112
|
+
The **Health** section answers two questions with different lifecycles:
|
|
113
|
+
|
|
114
|
+
**Is Lisa on the latest version?** — always-on status. Lisa's CLI already
|
|
115
|
+
checks npm on every invocation; the console surfaces the result permanently
|
|
116
|
+
as the top-bar chip (green dot `up to date`, amber when behind) and in the
|
|
117
|
+
Health section's version card. When behind, `lisa update` prints (or runs
|
|
118
|
+
with `--yes`) the package-manager update command.
|
|
119
|
+
|
|
120
|
+
**Is the project completely in band?** — on-demand scan behind the
|
|
121
|
+
"Run health check" button (plus an optional scheduled cadence via
|
|
122
|
+
`health.schedule` that files a ticket when drift is found). "In band" means
|
|
123
|
+
every Lisa-managed surface matches what the installed Lisa version would
|
|
124
|
+
emit. The check is a mix of deterministic and agentic verification,
|
|
125
|
+
packaged as one skill (working name `/lisa:health`) so the console button,
|
|
126
|
+
the cron, and the CLI share a single implementation:
|
|
127
|
+
|
|
128
|
+
- **Deterministic layer** (fast, exact — reuses what exists today):
|
|
129
|
+
`lisa doctor`, template diffing for copy-overwrite/managed-block files,
|
|
130
|
+
`package.json` governance (force/defaults/merge conformance),
|
|
131
|
+
`lisa sync --dry-run` (config fully populated, artifacts in sync), git
|
|
132
|
+
hooks installed and unmodified, plugins enabled and version-current, CI
|
|
133
|
+
workflow drift vs the stack template, rulesets present.
|
|
134
|
+
- **Agentic layer** (judges what a diff can't): whether local overrides
|
|
135
|
+
(`eslint.config.local.ts`, grandfathered globs) still serve their original
|
|
136
|
+
purpose, whether detected drift looks intentional or accidental, whether
|
|
137
|
+
skipped CI jobs and disabled gates have a recorded justification.
|
|
138
|
+
|
|
139
|
+
Results render as a per-check table (pass / warn / fail, with the layer that
|
|
140
|
+
produced each finding), and the last full check's date + verdict stays
|
|
141
|
+
visible in the section.
|
|
142
|
+
|
|
143
|
+
## What it catalogs
|
|
144
|
+
|
|
145
|
+
| Section | Source of truth in this repo |
|
|
146
|
+
| --- | --- |
|
|
147
|
+
| Setup checklist (install → sync → tracker/PRD → repo governance → secrets → automations) | `lisa apply`, `lisa sync`, `/lisa:setup:*` skills |
|
|
148
|
+
| Health (version status + planned in-band scan) | `lisa doctor`, `lisa sync --dry-run`, planned `/lisa:health` skill |
|
|
149
|
+
| Core workflow (the delivery-loop slash commands and their automations) | `plugins/src/base/commands/lisa/`, `plugins/src/base/skills/` |
|
|
150
|
+
| Starter templates (provenance + planned two-way sync) | `src/cli/starters.ts`, planned `starter.*` config |
|
|
151
|
+
| General (`harness`, `tracker`, `source`, `repo`, package manager) | `src/core/config.ts`, `plugins/src/base/rules/reference/config-resolution.md` |
|
|
152
|
+
| Project types (8 stacks + template strategies) | `src/detection/`, `src/strategies/`, `<stack>/` template dirs |
|
|
153
|
+
| Coding agents (claude/codex/cursor/agy/copilot/opencode/fleet) | `src/core/lisa.ts`, `scripts/generate-*-plugin-artifacts.mjs` |
|
|
154
|
+
| Work tracker (JIRA / GitHub Issues / Linear) | `config-resolution.md`, `lisa-setup-*` skills |
|
|
155
|
+
| PRD source (Notion / Confluence / Linear / GitHub) | `config-resolution.md`, `lisa-setup-*` skills |
|
|
156
|
+
| Deploy & environments (`deploy.*`, `github.environments`) | `scripts/lisa-github-environments.sh` |
|
|
157
|
+
| Automations (intake/repair/exploratory crons) | `lisa-setup-automations` skill |
|
|
158
|
+
| Intake & monitoring thresholds | `.lisa.config.json` `intake.*` / `monitor.*` |
|
|
159
|
+
| Linting (custom plugins, budgets, oxlint, ast-grep) | `eslint-plugin-*/`, `src/configs/eslint/`, `sgconfig.yml` |
|
|
160
|
+
| Testing & coverage (runners, floors, mutation gates) | `src/configs/{vitest,jest}/`, `*.thresholds.json` |
|
|
161
|
+
| Git hooks (Husky / Lefthook) | `typescript/copy-contents/.husky/`, `rails/copy-overwrite/lefthook.yml` |
|
|
162
|
+
| CI quality gates (quality.yml jobs + inputs) | `.github/workflows/quality.yml` |
|
|
163
|
+
| Verification & QA (exploration mutation policy, ZAP) | `lisa-use-the-product` skill |
|
|
164
|
+
| GitHub repository (settings, rulesets, labels, secrets) | `scripts/lisa-github-repo-setup.sh`, `all/github-rulesets/` |
|
|
165
|
+
| Plugins & MCP (Lisa + curated third-party + servers) | `.claude/settings.json`, `plugins/src/` |
|
|
166
|
+
| Advanced (wiki source, usage pricing, Play Store) | `config-resolution.md` |
|
|
167
|
+
|
|
168
|
+
Values shown are Lisa's real defaults (as of the version in the top bar), with
|
|
169
|
+
a fictional demo project (`acme/acme-app`, typescript + expo, JIRA + Notion)
|
|
170
|
+
supplying example identifiers.
|
|
171
|
+
|
|
172
|
+
## Implementation notes
|
|
173
|
+
|
|
174
|
+
- Single `index.html`: inline CSS (token-based light/dark theming with a
|
|
175
|
+
manual toggle) and vanilla JS. The catalog lives in a declarative `DATA`
|
|
176
|
+
structure at the top of the script; rendering is generic per block type
|
|
177
|
+
(`card`/`rows`, `table`, `tabs`, `stacks`, `hooks`, `flow`, `tiles`,
|
|
178
|
+
`callout`), so adding a setting is a data edit, not a DOM edit.
|
|
179
|
+
- Search box filters rows/cards within the active section.
|
|
180
|
+
- URL hash routes to a section (e.g. `ui/index.html#linting`).
|