@onexeor/lumo 0.0.1 → 0.0.3

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
@@ -1,6 +1,6 @@
1
1
  # lumo — installer
2
2
 
3
- One-command installer for [Lumo](https://github.com/OneXeor/lumo): mobile
3
+ One-command installer for [Lumo](https://github.com/OneXeor-Dev/lumo): mobile
4
4
  UI/UX design intelligence for AI coding assistants.
5
5
 
6
6
  ```bash
@@ -31,7 +31,7 @@ Under the hood the installer:
31
31
 
32
32
  1. Locates a Python 3.10+ interpreter and creates a Lumo-owned venv at
33
33
  `~/.lumo/venv` so your system Python stays clean.
34
- 2. `pip install`s [`lumo-tools`](https://pypi.org/project/lumo-tools/) into
34
+ 2. `pip install`s [`lumo-mobile`](https://pypi.org/project/lumo-mobile/) into
35
35
  that venv. The CLIs (`lumo-wcag`, `lumo-theory`, `lumo-parity`,
36
36
  `lumo-mcp`) become available at absolute paths the MCP configs point to.
37
37
  3. Copies the `SKILL.md` bundle into the chosen client's skill directory.
@@ -42,6 +42,24 @@ Under the hood the installer:
42
42
  The installer never modifies anything outside `~/.lumo`, the chosen
43
43
  client's skill directory, and the chosen client's MCP config file.
44
44
 
45
+ ## Publishing (maintainers only)
46
+
47
+ The installer ships with no npm lifecycle scripts on purpose — Socket.dev
48
+ and similar supply-chain scanners penalise packages that auto-execute
49
+ code on install or pack, even when that code is benign. To publish a
50
+ new version:
51
+
52
+ ```bash
53
+ cd installer
54
+ bash scripts/release.sh --dry-run # bundles /skill into installer/skill, npm pack --dry-run
55
+ bash scripts/release.sh # same, but actually publishes
56
+ ```
57
+
58
+ `release.sh` is the only sanctioned way to build the tarball. Running
59
+ `npm pack` or `npm publish` directly will produce a broken tarball
60
+ without the bundled `SKILL.md`, so `lumo init` would fail
61
+ post-install. The script makes the bundling explicit and Socket-clean.
62
+
45
63
  ## License
46
64
 
47
65
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onexeor/lumo",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Install Lumo — mobile UI/UX design intelligence for AI coding assistants (Claude Code, Cursor, Codex, MCP clients).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "start": "node src/index.js",
20
- "prepack": "node scripts/bundle-skill.js"
20
+ "bundle-skill": "node scripts/bundle-skill.js"
21
21
  },
22
22
  "keywords": [
23
23
  "mobile",
@@ -37,7 +37,7 @@
37
37
  "license": "MIT",
38
38
  "repository": {
39
39
  "type": "git",
40
- "url": "https://github.com/OneXeor/lumo.git"
40
+ "url": "https://github.com/OneXeor-Dev/lumo.git"
41
41
  },
42
42
  "engines": {
43
43
  "node": ">=18"
package/skill/SKILL.md CHANGED
@@ -43,7 +43,15 @@ mobile UI concern, stay out.
43
43
 
44
44
  Lumo ships with Python tools. Each tool has a single CLI entry-point with
45
45
  deterministic output. Invoke via Bash. Tools live in `tools/lumo/<area>/cli.py`
46
- and are exposed as console scripts after `pip install -e tools/`.
46
+ and are exposed as console scripts after `pip install -e tools/` or
47
+ `pipx install lumo-mobile`.
48
+
49
+ When running inside an MCP-aware client (Cursor, Continue, Aider, Goose,
50
+ Zed, Codex, or Claude Code with MCP enabled), the same four tools are
51
+ also exposed as MCP functions: `lumo_wcag_check`, `lumo_wcag_fix`,
52
+ `lumo_theory_check`, `lumo_parity_diff`. Prefer the MCP function over
53
+ spawning a Bash subprocess when available — the structured response is
54
+ already JSON and the user does not see noisy command output.
47
55
 
48
56
  ### `lumo-wcag` — WCAG contrast validator + OKLCH auto-correct
49
57
 
@@ -135,10 +143,16 @@ Layout JSON schema:
135
143
  - `group` is a free-form string used by Hick (equal-weight overload) and
136
144
  Gestalt proximity.
137
145
  - `source` reports honesty: `measured` means the coordinates came from a
138
- real device (Espresso, XCUITest, Compose `onGloballyPositioned`,
139
- SwiftUI `GeometryReader`); `code-estimated` from static code parsing;
140
- `description-estimated` from a description or screenshot. The tool
141
- propagates this value to every finding so the user can weigh confidence.
146
+ real device or a snapshot-testing framework — Espresso, XCUITest,
147
+ Compose `onGloballyPositioned`, SwiftUI `GeometryReader`, **Paparazzi**
148
+ (Compose snapshot tests by Cash App / JetBrains), or
149
+ `xcodebuild test --only-testing` with `XCTAttachment` /
150
+ `swift-snapshot-testing`. `code-estimated` means the layout was parsed
151
+ from source code statically (theme tokens, `fillMaxWidth`, dynamic
152
+ type — anything that resolves at runtime — is a guess).
153
+ `description-estimated` means the layout was built from a screenshot
154
+ description or natural-language prompt. The tool propagates this value
155
+ to every finding so the user can weigh confidence.
142
156
 
143
157
  When you (the model) construct a layout from a screenshot or from Compose
144
158
  / SwiftUI source code, set `source` to the matching honest label. Do not
@@ -40,7 +40,7 @@ export async function initCommand(opts) {
40
40
 
41
41
  const targets = await pickClient(opts.ai, opts.all);
42
42
 
43
- console.log(kleur.dim("→ installing Python tools (lumo-tools) into ~/.lumo/venv ..."));
43
+ console.log(kleur.dim("→ installing Python tools (lumo-mobile) into ~/.lumo/venv ..."));
44
44
  try {
45
45
  if (opts.dev) {
46
46
  const dev = devSource();
package/src/index.js CHANGED
@@ -8,7 +8,7 @@
8
8
  * uninstall [--ai <client>] Remove the Lumo skill (Python tools left intact).
9
9
  *
10
10
  * Supported AI clients in v0.1: claude, cursor, codex, generic.
11
- * Other clients can still consume Lumo via `npx skills add OneXeor/lumo`
11
+ * Other clients can still consume Lumo via `npx skills add OneXeor-Dev/lumo`
12
12
  * or by pointing their MCP config at `lumo-mcp`.
13
13
  */
14
14
 
@@ -27,7 +27,7 @@ program
27
27
  "Mobile UI/UX design intelligence — WCAG / parity / cognitive-science checks " +
28
28
  "for Jetpack Compose, Android XML, SwiftUI, UIKit."
29
29
  )
30
- .version("0.0.1");
30
+ .version("0.0.3");
31
31
 
32
32
  program
33
33
  .command("init")
package/src/lib/python.js CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Python detection and lumo-tools install helpers.
2
+ * Python detection and lumo-mobile install helpers.
3
3
  *
4
4
  * Strategy:
5
5
  * - Locate a Python ≥3.10 interpreter (python3, python, py -3 on Windows).
6
6
  * - Maintain a Lumo-owned venv at ~/.lumo/venv so user system Python stays clean.
7
- * - Install lumo-tools into that venv via pip — from PyPI by default,
7
+ * - Install lumo-mobile into that venv via pip — from PyPI by default,
8
8
  * from a local git path when --dev was passed.
9
9
  * - Expose absolute paths to each console script so SKILL.md and MCP configs
10
10
  * can reference them without depending on PATH.
@@ -65,11 +65,11 @@ export async function ensureVenv() {
65
65
  }
66
66
 
67
67
  /**
68
- * Install lumo-tools into the Lumo-owned venv.
68
+ * Install lumo-mobile into the Lumo-owned venv.
69
69
  *
70
70
  * @param {object} opts
71
71
  * @param {string} [opts.source] Local path to install from (used with --dev).
72
- * When omitted, installs `lumo-tools` from PyPI.
72
+ * When omitted, installs `lumo-mobile` from PyPI.
73
73
  */
74
74
  export async function installLumoTools(opts = {}) {
75
75
  await ensureVenv();
@@ -78,7 +78,7 @@ export async function installLumoTools(opts = {}) {
78
78
  if (opts.source) {
79
79
  args.push("-e", opts.source);
80
80
  } else {
81
- args.push("lumo-tools");
81
+ args.push("lumo-mobile");
82
82
  }
83
83
  await execFileP(pip, args, { maxBuffer: 20 * 1024 * 1024 });
84
84
  }