@montytools/cli 0.5.6 → 0.5.8
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/lib/styleLint.mjs +9 -3
- package/package.json +1 -1
- package/skills/monty-design/SKILL.md +15 -1
- package/template/AGENTS.md +11 -3
- package/template/package.json +1 -1
package/lib/styleLint.mjs
CHANGED
|
@@ -109,9 +109,15 @@ function* sourceFiles(dir, base = dir) {
|
|
|
109
109
|
const p = join(dir, entry.name);
|
|
110
110
|
const rel = relative(base, p);
|
|
111
111
|
if (entry.isDirectory()) {
|
|
112
|
-
//
|
|
113
|
-
// legitimately carry classes agents must not write
|
|
114
|
-
|
|
112
|
+
// Vendored zones are template/registry-owned — their internals may
|
|
113
|
+
// legitimately carry classes agents must not write: the shadcn kit
|
|
114
|
+
// (components/ui) and the blessed component registries.
|
|
115
|
+
if (
|
|
116
|
+
rel === join("components", "ui") ||
|
|
117
|
+
rel === join("components", "kibo-ui") ||
|
|
118
|
+
rel === join("components", "diceui") ||
|
|
119
|
+
entry.name === "node_modules"
|
|
120
|
+
) continue;
|
|
115
121
|
yield* sourceFiles(p, base);
|
|
116
122
|
} else if (/\.(?:tsx|jsx|ts)$/.test(entry.name)) {
|
|
117
123
|
if (SKIP_FILES.has(entry.name) || entry.name.endsWith(".gen.ts")) continue;
|
package/package.json
CHANGED
|
@@ -82,6 +82,19 @@ Monty is dark-only; the tokens ship the shell palette (#101112 ground) and
|
|
|
82
82
|
retheme, never hand-pick a dark color, and verify your page against the
|
|
83
83
|
shell (`/apps/<slug>/…`), not the bare dev port.
|
|
84
84
|
|
|
85
|
+
## Records: two shapes, always
|
|
86
|
+
|
|
87
|
+
People already know these two representations — never invent a third:
|
|
88
|
+
|
|
89
|
+
- **ONE record previews in the native popup** — `RecordProfile` from
|
|
90
|
+
`@montytools/sdk/react` (a `RecordPage` row opens it automatically; the
|
|
91
|
+
shell's own record pages open the same modal). Never a side drawer, never
|
|
92
|
+
a hand-built dialog.
|
|
93
|
+
- **MANY records — lists and one-to-many relations — render as columned
|
|
94
|
+
tables**, with the same columns the platform's record pages show
|
|
95
|
+
(`RecordPage`, or the `RecordTable*` parts). Never card lists, never
|
|
96
|
+
title-and-subtitle rows.
|
|
97
|
+
|
|
85
98
|
## Page anatomy
|
|
86
99
|
|
|
87
100
|
Every page opens with the platform chrome from `@montytools/sdk/ui` — the
|
|
@@ -165,7 +178,8 @@ day-selector columns, status bars, top-deals table) and
|
|
|
165
178
|
and avatars is the one exception) — surfaces and controls are stock
|
|
166
179
|
components, sharp by policy.
|
|
167
180
|
2. No text class outside the six ladder styles; no arbitrary values
|
|
168
|
-
(`text-[…]`, `bg-[#…]`, `rounded-[…]`, `shadow-[…]`).
|
|
181
|
+
(`text-[…]`, `bg-[#…]`, `rounded-[…]`, `shadow-[…]`). `monty style`
|
|
182
|
+
verifies this — `monty save` refuses what it flags.
|
|
169
183
|
3. No rounded corners on any chart mark; every bar/column sits on an axis.
|
|
170
184
|
4. Dark: the page blends into the shell with no light seams.
|
|
171
185
|
5. Values in tabular figures; status as dot + muted text, never a pill.
|
package/template/AGENTS.md
CHANGED
|
@@ -52,7 +52,8 @@ logic.** Everything below is the complete contract.
|
|
|
52
52
|
for the next agent that fills them in (`description` on the field spec;
|
|
53
53
|
enum options say WHEN they apply, not what the word means).
|
|
54
54
|
5. **You are not done until the work is saved.** After every meaningful
|
|
55
|
-
change verified in dev, run `monty save "<what changed>"` — it
|
|
55
|
+
change verified in dev, run `monty save "<what changed>"` — it style-
|
|
56
|
+
lints (token vocabulary only — `monty style` checks on demand), builds,
|
|
56
57
|
typechecks, and pushes the working copy to the cloud copy, like
|
|
57
58
|
`git push main`. Unsaved work exists only on this machine.
|
|
58
59
|
|
|
@@ -213,8 +214,15 @@ Rules that matter:
|
|
|
213
214
|
mode strips) and the Lyra table classes `SURFACE`/`THEAD`/`TH`/`ROW`/`CHIP`
|
|
214
215
|
for record-like tables (`<div className={SURFACE}><table>…`), identical to
|
|
215
216
|
the app's Configuration surfaces.
|
|
216
|
-
- **Extend records before rebuilding them
|
|
217
|
-
|
|
217
|
+
- **Extend records before rebuilding them — records have exactly two
|
|
218
|
+
shapes.** ONE record previews in the native popup: `RecordProfile` from
|
|
219
|
+
`@montytools/sdk/react` (a `RecordPage` row opens it automatically) —
|
|
220
|
+
every field plus one related tab per table that refs this one, derived
|
|
221
|
+
from the schema with zero configuration; never a side drawer, never a
|
|
222
|
+
hand-built dialog. MANY records — lists and one-to-many relations —
|
|
223
|
+
render as columned tables with the platform's own columns (`RecordPage` /
|
|
224
|
+
the `RecordTable*` parts); never card lists. For a custom page that is
|
|
225
|
+
still one table, use `RecordPage`. Add behavior with
|
|
218
226
|
its typed `headerActions`, `rowActions`, `selectionActions`, and
|
|
219
227
|
`recordActions` callbacks. Use `RecordActionButton` and the lower-level
|
|
220
228
|
`RecordPage*`/`RecordTable*` components from `@montytools/sdk/ui` when you
|
package/template/package.json
CHANGED