@metaobjectsdev/cli 0.12.0-rc.1 → 0.12.1

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
@@ -103,6 +103,31 @@ Flags:
103
103
 
104
104
  Positional args filter entities by name. All other knobs (`outDir`, `targets`, `dialect`, `dbImport`, `extStyle`, `apiPrefix`, generator list) live in `metaobjects.config.ts`.
105
105
 
106
+ ### `meta types [<query>]`
107
+
108
+ Searches the metadata vocabulary (types, subtypes, `@attrs`) without loading it all into context — apropos + `kubectl explain` over the live registry. Use it to find the declarative construct for a piece of data logic instead of hand-writing it.
109
+
110
+ ```
111
+ meta types relationship # subtypes/attrs whose name matches "relationship"
112
+ meta types --all money # search names AND descriptions ("find by what it does")
113
+ meta types --type field --kind subtype # all field subtypes (terse)
114
+ meta types field.enum --detail # one construct: description + when-to-use + valid @attrs
115
+ meta types --type origin --json # machine-readable subtree
116
+ ```
117
+
118
+ `QUERY` is a case-insensitive substring matched on the name (`type.subType` / `@attr`).
119
+
120
+ Flags:
121
+ - `--desc` / `--all` — also match `QUERY` against descriptions + when-to-use guidance (not just names)
122
+ - `--kind <type|subtype|attr>` — filter by category (comma-list ok)
123
+ - `--type <name>` — scope to one top-level type (e.g. `--type field`)
124
+ - `--detail` — drill in: full description, when-to-use, and valid `@attrs`
125
+ - `--json` — emit the matching registry subtree verbatim (stable-sorted)
126
+ - `--limit <N>` — cap results (default 20; `0` = unlimited)
127
+ - `--no-headers` — omit the `N of M`/match-count footer (parse-friendly)
128
+
129
+ Default output is one terse line per match.
130
+
106
131
  ### `meta migrate`
107
132
 
108
133
  Diffs `metaobjects/` metadata against a live DB and emits paired migration SQL files (per-migration subdirectories with `up.sql` and `down.sql`).
@@ -0,0 +1,2 @@
1
+ export declare function typesCommand(args: string[]): Promise<number>;
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/types.ts"],"names":[],"mappings":"AAmFA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiGlE"}
@@ -0,0 +1,171 @@
1
+ // `meta types [QUERY]` — search the metadata vocabulary (types, subtypes, @attrs)
2
+ // without loading it all into context. apropos + `kubectl explain` over the live
3
+ // registry, tuned for an agent's token budget: terse names-first default, opt-in
4
+ // description search, drill-in `--detail`, machine-readable `--json`.
5
+ import { TypeRegistry, registerCoreTypes, buildRegistryManifest, } from "@metaobjectsdev/metadata";
6
+ import { registerForgeTypes } from "@metaobjectsdev/sdk";
7
+ import { log } from "../lib/log.js";
8
+ const HELP = `meta types [QUERY] — search the metadata vocabulary without loading it all into context.
9
+
10
+ meta types relationship # subtypes/attrs whose name matches "relationship"
11
+ meta types --all money # search names AND descriptions ("find by what it does")
12
+ meta types --type field --kind subtype # all field subtypes (terse)
13
+ meta types field.enum --detail # one construct: description + when-to-use + valid @attrs
14
+ meta types --type origin --json # machine-readable subtree
15
+
16
+ QUERY is a case-insensitive substring, matched on the name (type.subType / @attr).
17
+ Add --desc (or --all) to also match descriptions + when-to-use guidance.
18
+
19
+ --desc also search descriptions + whenToUse (not just names)
20
+ --all alias for: match name OR description
21
+ --kind <k> filter by category: type | subtype | attr (comma-list ok)
22
+ --type <name> scope to one top-level type (e.g. --type field)
23
+ --detail drill in: full description, when-to-use, and valid @attrs
24
+ --json emit the matching registry subtree verbatim (stable-sorted)
25
+ --limit <N> cap results (default 20; 0 = unlimited)
26
+ --no-headers omit headers (parse-friendly)
27
+
28
+ Default output is one terse line per match. Reach for metaobjects metadata
29
+ (declare it, regenerate) instead of hand-writing data logic — this finds the
30
+ construct.`;
31
+ function parse(args) {
32
+ const f = {
33
+ query: null, desc: false, kind: new Set(), type: null,
34
+ detail: false, json: false, noHeaders: false, limit: 20, help: false,
35
+ };
36
+ for (let i = 0; i < args.length; i++) {
37
+ const a = args[i];
38
+ if (a === "--help" || a === "-h")
39
+ f.help = true;
40
+ else if (a === "--desc" || a === "--all")
41
+ f.desc = true;
42
+ else if (a === "--detail")
43
+ f.detail = true;
44
+ else if (a === "--json")
45
+ f.json = true;
46
+ else if (a === "--no-headers")
47
+ f.noHeaders = true;
48
+ else if (a === "--limit")
49
+ f.limit = Math.max(0, Number(args[++i] ?? "20") || 0);
50
+ else if (a === "--type")
51
+ f.type = (args[++i] ?? "").toLowerCase() || null;
52
+ else if (a === "--kind") {
53
+ for (const k of (args[++i] ?? "").split(","))
54
+ if (k === "type" || k === "subtype" || k === "attr")
55
+ f.kind.add(k);
56
+ }
57
+ else if (a.startsWith("-"))
58
+ throw new Error(`unknown flag: ${a}`);
59
+ else if (f.query === null)
60
+ f.query = a;
61
+ else
62
+ throw new Error(`unexpected argument: ${a}`);
63
+ }
64
+ return f;
65
+ }
66
+ export async function typesCommand(args) {
67
+ let f;
68
+ try {
69
+ f = parse(args);
70
+ }
71
+ catch (err) {
72
+ log.error(err.message);
73
+ return 2;
74
+ }
75
+ if (f.help) {
76
+ log.info(HELP);
77
+ return 0;
78
+ }
79
+ const registry = new TypeRegistry();
80
+ registerCoreTypes(registry);
81
+ registerForgeTypes(registry);
82
+ const manifest = buildRegistryManifest(registry);
83
+ // Flatten the manifest into searchable entries.
84
+ const entries = [];
85
+ for (const mt of manifest.types) {
86
+ const tsName = `${mt.type}.${mt.subType}`;
87
+ entries.push({
88
+ kind: "subtype", name: tsName, owner: tsName, type: mt.type,
89
+ description: mt.description, whenToUse: mt.whenToUse,
90
+ attrNames: mt.attrs.map((a) => `@${a.name}`), raw: mt,
91
+ });
92
+ for (const at of mt.attrs) {
93
+ entries.push({
94
+ kind: "attr", name: `${tsName} @${at.name}`, owner: tsName, type: mt.type,
95
+ description: at.description, whenToUse: at.whenToUse, attrNames: [], raw: at,
96
+ });
97
+ }
98
+ }
99
+ const q = (f.query ?? "").toLowerCase();
100
+ const wantKind = (e) => f.kind.size === 0
101
+ ? true
102
+ : (f.kind.has("attr") && e.kind === "attr") ||
103
+ ((f.kind.has("subtype") || f.kind.has("type")) && e.kind === "subtype");
104
+ const matches = entries.filter((e) => {
105
+ if (f.type && e.type !== f.type)
106
+ return false;
107
+ if (!wantKind(e))
108
+ return false;
109
+ if (!q)
110
+ return true;
111
+ if (e.name.toLowerCase().includes(q))
112
+ return true;
113
+ if (f.desc && (e.description.toLowerCase().includes(q) ||
114
+ (e.whenToUse ?? "").toLowerCase().includes(q)))
115
+ return true;
116
+ return false;
117
+ });
118
+ // Stable sort by (type, name).
119
+ matches.sort((a, b) => a.type.localeCompare(b.type) || a.name.localeCompare(b.name));
120
+ if (matches.length === 0) {
121
+ log.info(q ? `No vocabulary matches "${f.query}". Try --all to search descriptions, or drop --kind/--type filters.`
122
+ : "No matching vocabulary.");
123
+ return 0;
124
+ }
125
+ const total = matches.length;
126
+ const shown = f.limit > 0 ? matches.slice(0, f.limit) : matches;
127
+ if (f.json) {
128
+ log.info(JSON.stringify(shown.map((e) => e.raw), null, 2));
129
+ return 0;
130
+ }
131
+ if (f.detail) {
132
+ for (const e of shown) {
133
+ const head = e.kind === "subtype" ? e.name : e.name;
134
+ log.info(`\n${head} (${e.kind})`);
135
+ if (e.description)
136
+ log.info(` ${e.description}`);
137
+ if (e.whenToUse)
138
+ log.info(` → reach for it when: ${e.whenToUse}`);
139
+ if (e.kind === "subtype") {
140
+ const mt = e.raw;
141
+ if (mt.attrs.length) {
142
+ log.info(" @attrs:");
143
+ for (const at of mt.attrs)
144
+ log.info(` @${at.name} ${at.valueType ?? "any"}${at.required ? " REQUIRED" : ""} ${at.description}`);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ else {
150
+ // Terse: one line per match. Subtypes get attr-name hints; attrs get a short desc.
151
+ for (const e of shown) {
152
+ if (e.kind === "subtype") {
153
+ const hint = e.attrNames.length ? ` (${e.attrNames.slice(0, 6).join(", ")}${e.attrNames.length > 6 ? ", …" : ""})` : "";
154
+ log.info(`${e.name.padEnd(28)} ${oneLine(e.description)}${hint}`);
155
+ }
156
+ else {
157
+ log.info(`${e.name.padEnd(28)} ${oneLine(e.description)}`);
158
+ }
159
+ }
160
+ }
161
+ if (!f.noHeaders && shown.length < total)
162
+ log.info(`\n${shown.length} of ${total} shown — narrow with QUERY/--type/--kind or raise --limit.`);
163
+ else if (!f.noHeaders)
164
+ log.info(`\n${total} match${total === 1 ? "" : "es"}.`);
165
+ return 0;
166
+ }
167
+ function oneLine(s) {
168
+ const t = s.replace(/\s+/g, " ").trim();
169
+ return t.length > 90 ? t.slice(0, 88) + "…" : t;
170
+ }
171
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAsKvE,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0JzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAuKvE,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8JzD"}
package/dist/src/index.js CHANGED
@@ -14,6 +14,7 @@ COMMANDS:
14
14
  init --refresh-docs Refresh .metaobjects/AGENTS.md + CLAUDE.md after CLI upgrades
15
15
  agent-docs Scaffold only the agent-context (.metaobjects/ + .claude/skills/) — canonical redirect target for all language ports
16
16
  gen [<entity>...] Codegen TS targets from metaobjects/ entities
17
+ types [query] Search the metadata vocabulary (types, subtypes, @attrs) by name or description
17
18
  export Flatten loaded metadata to one canonical JSON artifact
18
19
  docs <metadata> --out <dir> Generate neutral metadata documentation (entity + template pages)
19
20
  verify Drift gate — subverbs: --templates / --db / --codegen (bare = --templates)
@@ -297,6 +298,10 @@ export async function run(argv) {
297
298
  const { exportCommand } = await import("./commands/export.js");
298
299
  return exportCommand(rest, cwd);
299
300
  }
301
+ case "types": {
302
+ const { typesCommand } = await import("./commands/types.js");
303
+ return typesCommand(rest);
304
+ }
300
305
  case "docs": {
301
306
  const { docsCommand } = await import("./commands/docs.js");
302
307
  return docsCommand(rest, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE7B,MAAM,SAAS,GAAG,4BAA4B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEpD,CAAC;AAEF,mEAAmE;AACnE,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE;;;;;;;;;;;CAWN;IACC,MAAM,EAAE;;;;;;;;;;;;;;;;CAgBT;IACC,MAAM,EAAE;;;;;;;;CAQT;IACC,IAAI,EAAE;;;;;;;;;;CAUP;IACC,IAAI,EAAE;;;;;;;;;;;;;CAaP;IACC,YAAY,EAAE;;;;;;;;;;;;;;CAcf;IACC,iBAAiB,EAAE;;;;;;;;;CASpB;CACA,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,uEAAuE;IACvE,iEAAiE;IACjE,qEAAqE;IACrE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,UAA8B,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBAC3C,OAAO,CAAC,CAAC;YACX,CAAC;YACD,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC,EAAE,CAAC,CAAC,oBAAoB;YACzB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAC7C,OAAO,CAAC,CAAC;YACX,CAAC;YACD,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,CAAC,EAAE,CAAC,CAAC,oBAAoB;YACzB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gFAAgF;IAChF,mFAAmF;IACnF,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,UAAU,IAAI,CAAC,CAAC;QACxF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAErE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IAE/B,2FAA2F;IAC3F,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC;YACX,CAAC;YACD,2EAA2E;QAC7E,CAAC;IACH,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,4EAA4E;YAC5E,8EAA8E;YAC9E,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;iBACvD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7F,MAAM,UAAU,GAAG,iBAAiB;gBAClC,CAAC,CAAC,4BAA4B,OAAO,0BAA0B;gBAC/D,CAAC,CAAC,4BAA4B,OAAO,4BAA4B,CAAC;YACpE,MAAM,SAAS,GAAG,iBAAiB;gBACjC,CAAC,CAAC;oBACE,qCAAqC;oBACrC,yCAAyC;oBACzC,iDAAiD;oBACjD,gDAAgD;iBACjD;gBACH,CAAC,CAAC;oBACE,iEAAiE;oBACjE,gDAAgD;iBACjD,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC3D,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACH,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;oBACxB,GAAG,EAAE,SAAS;oBACd,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,GAAG,CAAC,IAAI,CAAC,6CAA6C,MAAM,CAAC,OAAO,CAAC,MAAM,iEAAiE,CAAC,CAAC;gBAC9I,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;oBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;gBAC5F,OAAO,CAAC,CAAC;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACzD,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/D,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC3D,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/D,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAChF,OAAO,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACjE,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;QACD;YACE,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,+CAA+C,CAAC,CAAC;YAClF,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/cli",
3
- "version": "0.12.0-rc.1",
3
+ "version": "0.12.1",
4
4
  "description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -49,14 +49,14 @@
49
49
  ],
50
50
  "dependencies": {
51
51
  "@libsql/kysely-libsql": "^0.4.0",
52
- "@metaobjectsdev/codegen-ts": "0.12.0-rc.1",
53
- "@metaobjectsdev/codegen-ts-react": "0.12.0-rc.1",
54
- "@metaobjectsdev/codegen-ts-tanstack": "0.12.0-rc.1",
55
- "@metaobjectsdev/metadata": "0.12.0-rc.1",
56
- "@metaobjectsdev/migrate-ts": "0.12.0-rc.1",
57
- "@metaobjectsdev/render": "0.12.0-rc.1",
58
- "@metaobjectsdev/runtime-ts": "0.12.0-rc.1",
59
- "@metaobjectsdev/sdk": "0.12.0-rc.1",
52
+ "@metaobjectsdev/codegen-ts": "0.12.1",
53
+ "@metaobjectsdev/codegen-ts-react": "0.12.1",
54
+ "@metaobjectsdev/codegen-ts-tanstack": "0.12.1",
55
+ "@metaobjectsdev/metadata": "0.12.1",
56
+ "@metaobjectsdev/migrate-ts": "0.12.1",
57
+ "@metaobjectsdev/render": "0.12.1",
58
+ "@metaobjectsdev/runtime-ts": "0.12.1",
59
+ "@metaobjectsdev/sdk": "0.12.1",
60
60
  "@toon-format/toon": "^2.3.0",
61
61
  "jiti": "^2.4.0"
62
62
  },
@@ -0,0 +1,186 @@
1
+ // `meta types [QUERY]` — search the metadata vocabulary (types, subtypes, @attrs)
2
+ // without loading it all into context. apropos + `kubectl explain` over the live
3
+ // registry, tuned for an agent's token budget: terse names-first default, opt-in
4
+ // description search, drill-in `--detail`, machine-readable `--json`.
5
+ import {
6
+ TypeRegistry,
7
+ registerCoreTypes,
8
+ buildRegistryManifest,
9
+ } from "@metaobjectsdev/metadata";
10
+ import { registerForgeTypes } from "@metaobjectsdev/sdk";
11
+ import { log } from "../lib/log.js";
12
+
13
+ interface TypesFlags {
14
+ query: string | null;
15
+ desc: boolean; // also match QUERY against descriptions/whenToUse
16
+ kind: Set<"type" | "subtype" | "attr">;
17
+ type: string | null; // scope to one top-level type
18
+ detail: boolean;
19
+ json: boolean;
20
+ noHeaders: boolean;
21
+ limit: number; // 0 = unlimited
22
+ help: boolean;
23
+ }
24
+
25
+ const HELP = `meta types [QUERY] — search the metadata vocabulary without loading it all into context.
26
+
27
+ meta types relationship # subtypes/attrs whose name matches "relationship"
28
+ meta types --all money # search names AND descriptions ("find by what it does")
29
+ meta types --type field --kind subtype # all field subtypes (terse)
30
+ meta types field.enum --detail # one construct: description + when-to-use + valid @attrs
31
+ meta types --type origin --json # machine-readable subtree
32
+
33
+ QUERY is a case-insensitive substring, matched on the name (type.subType / @attr).
34
+ Add --desc (or --all) to also match descriptions + when-to-use guidance.
35
+
36
+ --desc also search descriptions + whenToUse (not just names)
37
+ --all alias for: match name OR description
38
+ --kind <k> filter by category: type | subtype | attr (comma-list ok)
39
+ --type <name> scope to one top-level type (e.g. --type field)
40
+ --detail drill in: full description, when-to-use, and valid @attrs
41
+ --json emit the matching registry subtree verbatim (stable-sorted)
42
+ --limit <N> cap results (default 20; 0 = unlimited)
43
+ --no-headers omit headers (parse-friendly)
44
+
45
+ Default output is one terse line per match. Reach for metaobjects metadata
46
+ (declare it, regenerate) instead of hand-writing data logic — this finds the
47
+ construct.`;
48
+
49
+ function parse(args: string[]): TypesFlags {
50
+ const f: TypesFlags = {
51
+ query: null, desc: false, kind: new Set(), type: null,
52
+ detail: false, json: false, noHeaders: false, limit: 20, help: false,
53
+ };
54
+ for (let i = 0; i < args.length; i++) {
55
+ const a = args[i] as string;
56
+ if (a === "--help" || a === "-h") f.help = true;
57
+ else if (a === "--desc" || a === "--all") f.desc = true;
58
+ else if (a === "--detail") f.detail = true;
59
+ else if (a === "--json") f.json = true;
60
+ else if (a === "--no-headers") f.noHeaders = true;
61
+ else if (a === "--limit") f.limit = Math.max(0, Number(args[++i] ?? "20") || 0);
62
+ else if (a === "--type") f.type = (args[++i] ?? "").toLowerCase() || null;
63
+ else if (a === "--kind") {
64
+ for (const k of (args[++i] ?? "").split(","))
65
+ if (k === "type" || k === "subtype" || k === "attr") f.kind.add(k);
66
+ } else if (a.startsWith("-")) throw new Error(`unknown flag: ${a}`);
67
+ else if (f.query === null) f.query = a;
68
+ else throw new Error(`unexpected argument: ${a}`);
69
+ }
70
+ return f;
71
+ }
72
+
73
+ interface Entry {
74
+ kind: "subtype" | "attr";
75
+ name: string; // "field.string" or "field.string @maxLength"
76
+ owner: string; // the type.subType this belongs to (= name for subtypes)
77
+ type: string; // top-level type
78
+ description: string;
79
+ whenToUse: string | undefined;
80
+ attrNames: string[]; // attr-name hints (for subtype terse lines)
81
+ raw: unknown; // the manifest node, for --json
82
+ }
83
+
84
+ export async function typesCommand(args: string[]): Promise<number> {
85
+ let f: TypesFlags;
86
+ try {
87
+ f = parse(args);
88
+ } catch (err) {
89
+ log.error((err as Error).message);
90
+ return 2;
91
+ }
92
+ if (f.help) {
93
+ log.info(HELP);
94
+ return 0;
95
+ }
96
+
97
+ const registry = new TypeRegistry();
98
+ registerCoreTypes(registry);
99
+ registerForgeTypes(registry);
100
+ const manifest = buildRegistryManifest(registry);
101
+
102
+ // Flatten the manifest into searchable entries.
103
+ const entries: Entry[] = [];
104
+ for (const mt of manifest.types) {
105
+ const tsName = `${mt.type}.${mt.subType}`;
106
+ entries.push({
107
+ kind: "subtype", name: tsName, owner: tsName, type: mt.type,
108
+ description: mt.description, whenToUse: mt.whenToUse,
109
+ attrNames: mt.attrs.map((a) => `@${a.name}`), raw: mt,
110
+ });
111
+ for (const at of mt.attrs) {
112
+ entries.push({
113
+ kind: "attr", name: `${tsName} @${at.name}`, owner: tsName, type: mt.type,
114
+ description: at.description, whenToUse: at.whenToUse, attrNames: [], raw: at,
115
+ });
116
+ }
117
+ }
118
+
119
+ const q = (f.query ?? "").toLowerCase();
120
+ const wantKind = (e: Entry) => f.kind.size === 0
121
+ ? true
122
+ : (f.kind.has("attr") && e.kind === "attr") ||
123
+ ((f.kind.has("subtype") || f.kind.has("type")) && e.kind === "subtype");
124
+ const matches = entries.filter((e) => {
125
+ if (f.type && e.type !== f.type) return false;
126
+ if (!wantKind(e)) return false;
127
+ if (!q) return true;
128
+ if (e.name.toLowerCase().includes(q)) return true;
129
+ if (f.desc && (e.description.toLowerCase().includes(q) ||
130
+ (e.whenToUse ?? "").toLowerCase().includes(q))) return true;
131
+ return false;
132
+ });
133
+ // Stable sort by (type, name).
134
+ matches.sort((a, b) => a.type.localeCompare(b.type) || a.name.localeCompare(b.name));
135
+
136
+ if (matches.length === 0) {
137
+ log.info(q ? `No vocabulary matches "${f.query}". Try --all to search descriptions, or drop --kind/--type filters.`
138
+ : "No matching vocabulary.");
139
+ return 0;
140
+ }
141
+
142
+ const total = matches.length;
143
+ const shown = f.limit > 0 ? matches.slice(0, f.limit) : matches;
144
+
145
+ if (f.json) {
146
+ log.info(JSON.stringify(shown.map((e) => e.raw), null, 2));
147
+ return 0;
148
+ }
149
+
150
+ if (f.detail) {
151
+ for (const e of shown) {
152
+ const head = e.kind === "subtype" ? e.name : e.name;
153
+ log.info(`\n${head} (${e.kind})`);
154
+ if (e.description) log.info(` ${e.description}`);
155
+ if (e.whenToUse) log.info(` → reach for it when: ${e.whenToUse}`);
156
+ if (e.kind === "subtype") {
157
+ const mt = e.raw as { attrs: { name: string; valueType: string | null; required: boolean; description: string }[] };
158
+ if (mt.attrs.length) {
159
+ log.info(" @attrs:");
160
+ for (const at of mt.attrs)
161
+ log.info(` @${at.name} ${at.valueType ?? "any"}${at.required ? " REQUIRED" : ""} ${at.description}`);
162
+ }
163
+ }
164
+ }
165
+ } else {
166
+ // Terse: one line per match. Subtypes get attr-name hints; attrs get a short desc.
167
+ for (const e of shown) {
168
+ if (e.kind === "subtype") {
169
+ const hint = e.attrNames.length ? ` (${e.attrNames.slice(0, 6).join(", ")}${e.attrNames.length > 6 ? ", …" : ""})` : "";
170
+ log.info(`${e.name.padEnd(28)} ${oneLine(e.description)}${hint}`);
171
+ } else {
172
+ log.info(`${e.name.padEnd(28)} ${oneLine(e.description)}`);
173
+ }
174
+ }
175
+ }
176
+ if (!f.noHeaders && shown.length < total)
177
+ log.info(`\n${shown.length} of ${total} shown — narrow with QUERY/--type/--kind or raise --limit.`);
178
+ else if (!f.noHeaders)
179
+ log.info(`\n${total} match${total === 1 ? "" : "es"}.`);
180
+ return 0;
181
+ }
182
+
183
+ function oneLine(s: string): string {
184
+ const t = s.replace(/\s+/g, " ").trim();
185
+ return t.length > 90 ? t.slice(0, 88) + "…" : t;
186
+ }
package/src/index.ts CHANGED
@@ -17,6 +17,7 @@ COMMANDS:
17
17
  init --refresh-docs Refresh .metaobjects/AGENTS.md + CLAUDE.md after CLI upgrades
18
18
  agent-docs Scaffold only the agent-context (.metaobjects/ + .claude/skills/) — canonical redirect target for all language ports
19
19
  gen [<entity>...] Codegen TS targets from metaobjects/ entities
20
+ types [query] Search the metadata vocabulary (types, subtypes, @attrs) by name or description
20
21
  export Flatten loaded metadata to one canonical JSON artifact
21
22
  docs <metadata> --out <dir> Generate neutral metadata documentation (entity + template pages)
22
23
  verify Drift gate — subverbs: --templates / --db / --codegen (bare = --templates)
@@ -303,6 +304,10 @@ export async function run(argv: string[]): Promise<number> {
303
304
  const { exportCommand } = await import("./commands/export.js");
304
305
  return exportCommand(rest, cwd);
305
306
  }
307
+ case "types": {
308
+ const { typesCommand } = await import("./commands/types.js");
309
+ return typesCommand(rest);
310
+ }
306
311
  case "docs": {
307
312
  const { docsCommand } = await import("./commands/docs.js");
308
313
  return docsCommand(rest, cwd);