@happyvertical/smrt-dev-mcp 0.40.62 → 0.40.64

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/AGENTS.md CHANGED
@@ -23,6 +23,10 @@ deterministic SMRT ecosystem knowledge, and portable agent workflows.
23
23
  | `list-agent-skills` | Lists bundled harness-agnostic agent skills |
24
24
  | `get-agent-skill` | Returns a bundled agent skill as Markdown plus optional references |
25
25
 
26
+ `pnpm knowledge:check --strict --format markdown` compares this catalog and the
27
+ README parameter tables to the exported `TOOLS` definitions. Add or change a
28
+ tool schema and its authored documentation in the same commit.
29
+
26
30
  ## Knowledge Discovery (#2143)
27
31
 
28
32
  Discovery reads the workspace globs instead of assuming `<root>/packages`:
@@ -44,6 +48,36 @@ amplify into unbounded filesystem work. Discovery also stops before package
44
48
  reads when more than 512 packages match, revalidates confinement immediately
45
49
  before reading each package, and runs at most eight scanner fallbacks at once.
46
50
 
51
+ ### Consumer apps (#2275)
52
+
53
+ An app that installs the published packages authors none of them, so workspace
54
+ discovery alone sees nothing. Every installed `@happyvertical/smrt-*` package,
55
+ plus the known SDK packages, is resolved from the project's and each workspace
56
+ package's `node_modules/@happyvertical` scope directory and marked
57
+ `isInstalledDependency`. This is an enumeration, not a walk: pnpm materializes
58
+ a store whose entries link back out to their siblings, so a descent reads the
59
+ same package once per path that reaches it. Real paths deduplicate the result;
60
+ each package is still read through its `node_modules` path, because a realpath
61
+ escapes the root wherever an ancestor is a symlink. A workspace package linked
62
+ into a sibling's `node_modules` is authored source and is never marked
63
+ installed.
64
+
65
+ - `--scope installed` reports exactly those packages. `local` and `package`
66
+ exclude them; `project` includes them; the index also lists them separately
67
+ as `installedPackages` (`schemaVersion: 3`). It is a reporting scope:
68
+ `dev:knowledge-check` has no authored packages to gate under it.
69
+ - Each package carries `agentDocSha256`, the hash of its shipped `AGENTS.md`.
70
+ That is the drift signal a consumer diffs against a recorded baseline — a
71
+ version bump is not, because most releases do not touch a documented surface.
72
+ - The freshness gate skips installed packages entirely: indexed, never checked.
73
+ A consumer cannot add an `AGENTS.md` to a dependency, and a published
74
+ package's artifact hashes cannot match its republished sources.
75
+ - Coverage and the `no-smrt-objects-discovered` guard count authored packages
76
+ only. Dependencies ship their own objects, so counting them would make that
77
+ guard unreachable in exactly the projects most likely to have broken
78
+ discovery. A project whose own packages contribute nothing while its
79
+ dependencies do gets the `no-authored-smrt-objects` warning instead.
80
+
47
81
  Per package, objects resolve in this order, and the winner is recorded in
48
82
  `objectSource` with a reason:
49
83
 
@@ -52,7 +86,7 @@ Per package, objects resolve in this order, and the winner is recorded in
52
86
  3. `scanner` — `OxcScanner` + `ManifestAdapter` over the package's sources
53
87
  4. `none` — with a machine-readable reason
54
88
 
55
- The index exposes `coverage` and `diagnostics` (`schemaVersion: 2`). Zero
89
+ The index exposes `coverage` and `diagnostics` (added in `schemaVersion: 2`). Zero
56
90
  discovered objects is an **error-grade** diagnostic that names the roots and
57
91
  artifact paths checked plus the fix, and it propagates into
58
92
  `smrt-architecture`/`smrt-review`/`reflect-*` results and prompt bundles.
package/README.md CHANGED
@@ -124,7 +124,7 @@ dependency edge — by connected component, keeping the copy the others depend o
124
124
  and reports `duplicate-object-identity`. Unrelated packages that share a class
125
125
  name stay distinct.
126
126
 
127
- The index therefore carries two extra blocks (`schemaVersion: 2`):
127
+ The index therefore carries two extra blocks (added in `schemaVersion: 2`):
128
128
 
129
129
  - `coverage` — `workspaceGlobs`, `workspaceGlobSource`, `packageDirs`,
130
130
  `packagesWithObjects`, and `packagesWithoutObjects` with a reason, the artifact
@@ -134,6 +134,13 @@ The index therefore carries two extra blocks (`schemaVersion: 2`):
134
134
  commands to fix it, so an unseen project is never reported as a project with no
135
135
  model. `smrt-architecture`, `smrt-review`, and the `reflect-*` tools surface it.
136
136
 
137
+ `schemaVersion: 3` adds the consumer-app view: `installedPackages` lists every
138
+ installed `@happyvertical/smrt-*` package plus the known SDK packages — the ones
139
+ the project installs rather than authors — each with `isInstalledDependency`, its
140
+ version, and `agentDocSha256`, the hash of its shipped `AGENTS.md`. That hash is
141
+ what a downstream project diffs against a recorded baseline to find documentation
142
+ drift. Reach it with `--scope installed`.
143
+
137
144
  ## Response Budgets
138
145
 
139
146
  Knowledge and introspection tools return a **summary** by default and accept
@@ -235,14 +242,14 @@ Generate a complete s-m-r-t class with `@smrt()` decorator, fields, and imports.
235
242
  | Parameter | Type | Required | Description |
236
243
  |-----------|------|----------|-------------|
237
244
  | `className` | `string` | Yes | Class name (PascalCase) |
238
- | `properties` | `array` | Yes | Property definitions (`name`, `type`, `required?`, `nullable?`, `description?`, `defaultValue?`) |
239
- | `baseClass` | `string` | No | `'SmrtObject'` (default) or `'SmrtCollection'` |
240
- | `template` | `string` | No | `basic`, `global-catalog`, `optional-catalog`, `tenant-project-object`, `tenant-event-log-object`, or `cross-package-reference` |
245
+ | `properties` | `object[]` | Yes | Property definitions (`name`, `type`, `required?`, `nullable?`, `description?`, `defaultValue?`) |
246
+ | `baseClass` | `'SmrtObject' \| 'SmrtCollection'` | No | `'SmrtObject'` (default) or `'SmrtCollection'` |
247
+ | `template` | `'basic' \| 'global-catalog' \| 'optional-catalog' \| 'tenant-project-object' \| 'tenant-event-log-object' \| 'cross-package-reference'` | No | Generation template (default: `basic`) |
241
248
  | `tableName` | `string` | No | Explicit `@smrt({ tableName })` value |
242
249
  | `conflictColumns` | `string[]` | No | Explicit upsert natural key columns |
243
- | `tenantScoped` | `boolean/object` | No | Add `@TenantScoped(...)`; object supports `mode`, `field`, and bypass/filter options |
250
+ | `tenantScoped` | `boolean \| object` | No | Add `@TenantScoped(...)`; object supports `mode`, `field`, and bypass/filter options |
244
251
  | `includeTenantIdField` | `boolean` | No | Emit a matching `@tenantId()` field |
245
- | `relationships` | `array` | No | Relationship definitions for `foreignKey`, `crossPackageRef`, `oneToMany`, or `manyToMany` |
252
+ | `relationships` | `object[]` | No | Relationship definitions for `foreignKey`, `crossPackageRef`, `oneToMany`, or `manyToMany` |
246
253
  | `includeCompanionSnippets` | `boolean` | No | Append package wiring notes |
247
254
  | `includeApiConfig` | `boolean` | No | Include REST API config (default: true) |
248
255
  | `includeMcpConfig` | `boolean` | No | Include MCP config (default: true) |
@@ -300,7 +307,7 @@ coverage, relationship-v2 counts, and freshness status.
300
307
  | Parameter | Type | Required | Description |
301
308
  |-----------|------|----------|-------------|
302
309
  | `rootDir` | `string` | No | Project root directory (default: cwd) |
303
- | `scope` | `string` | No | `project`, `local`, `package`, or `sdk` |
310
+ | `scope` | `'project' \| 'local' \| 'package' \| 'sdk' \| 'installed'` | No | Knowledge source scope (default: `project`) |
304
311
  | `package` | `string` | No | Package name or short name to focus |
305
312
 
306
313
  ### `check-knowledge-freshness`
@@ -323,7 +330,7 @@ Alias over the deterministic checker that emphasizes downstream
323
330
  | `rootDir` | `string` | No | Project root directory (default: cwd) |
324
331
  | `changed` | `boolean` | No | Limit stale-pattern checks to changed files |
325
332
  | `strict` | `boolean` | No | Treat stale-pattern findings as errors |
326
- | `scope` | `string` | No | `project`, `local`, `package`, or `sdk` |
333
+ | `scope` | `'project' \| 'local' \| 'package' \| 'sdk' \| 'installed'` | No | Knowledge source scope (default: `project`) |
327
334
  | `package` | `string` | No | Package name or short name to focus |
328
335
 
329
336
  ### `build-review-context`
@@ -337,11 +344,21 @@ then return a model-ready prompt bundle.
337
344
  | `changedFiles` | `string[]` | No | Files to route to package experts |
338
345
  | `focus` | `string` | No | Review focus or concern |
339
346
  | `documentation` | `string` | No | Additional docs or notes to include |
347
+ | `detail` | `'summary' \| 'full'` | No | Default `summary`; `full` embeds authored docs and full package records |
340
348
 
341
349
  ### `build-domain-review-context`
342
350
 
343
- Domain-scoped alias for `build-review-context`. Accepts the same fields plus
344
- `scope` and `package`.
351
+ Domain-scoped alias for `build-review-context`.
352
+
353
+ | Parameter | Type | Required | Description |
354
+ |-----------|------|----------|-------------|
355
+ | `rootDir` | `string` | No | Project root directory (default: cwd) |
356
+ | `changedFiles` | `string[]` | No | Files to route to package experts |
357
+ | `focus` | `string` | No | Review focus or concern |
358
+ | `documentation` | `string` | No | Additional docs or notes to include |
359
+ | `scope` | `'project' \| 'local' \| 'package' \| 'sdk' \| 'installed'` | No | Knowledge source scope (default: `project`) |
360
+ | `package` | `string` | No | Package name or short name to focus |
361
+ | `detail` | `'summary' \| 'full'` | No | Default `summary`; `full` embeds authored docs and full package records |
345
362
 
346
363
  ### `smrt-review`
347
364
 
@@ -353,7 +370,8 @@ Return deterministic review findings, a prompt bundle, or both.
353
370
  | `changedFiles` | `string[]` | No | Files to route to package experts |
354
371
  | `focus` | `string` | No | Review focus or concern |
355
372
  | `documentation` | `string` | No | Additional docs or notes to include |
356
- | `mode` | `string` | No | `findings`, `prompt-bundle`, or `both` |
373
+ | `mode` | `'findings' \| 'prompt-bundle' \| 'both'` | No | Response mode (default: `both`) |
374
+ | `detail` | `'summary' \| 'full'` | No | Default `summary`; `full` embeds authored docs and full package records |
357
375
 
358
376
  ### `build-architecture-context`
359
377
 
@@ -366,11 +384,21 @@ then return a model-ready architecture prompt bundle.
366
384
  | `idea` | `string` | No | Product or implementation idea |
367
385
  | `documentation` | `string` | No | Existing docs or requirements |
368
386
  | `focus` | `string` | No | Architecture concern to prioritize |
387
+ | `detail` | `'summary' \| 'full'` | No | Default `summary`; `full` embeds authored docs and full package records |
369
388
 
370
389
  ### `build-domain-architecture-context`
371
390
 
372
- Domain-scoped alias for `build-architecture-context`. Accepts the same fields
373
- plus `scope` and `package`.
391
+ Domain-scoped alias for `build-architecture-context`.
392
+
393
+ | Parameter | Type | Required | Description |
394
+ |-----------|------|----------|-------------|
395
+ | `rootDir` | `string` | No | Project root directory (default: cwd) |
396
+ | `idea` | `string` | No | Product or implementation idea |
397
+ | `documentation` | `string` | No | Existing docs or requirements |
398
+ | `focus` | `string` | No | Architecture concern to prioritize |
399
+ | `scope` | `'project' \| 'local' \| 'package' \| 'sdk' \| 'installed'` | No | Knowledge source scope (default: `project`) |
400
+ | `package` | `string` | No | Package name or short name to focus |
401
+ | `detail` | `'summary' \| 'full'` | No | Default `summary`; `full` embeds authored docs and full package records |
374
402
 
375
403
  ### `smrt-architecture`
376
404
 
@@ -396,7 +424,7 @@ Return a bundled agent skill as Markdown, with optional referenced files.
396
424
 
397
425
  | Parameter | Type | Required | Description |
398
426
  |-----------|------|----------|-------------|
399
- | `name` | `string` | Yes | Skill name. Currently `smrt-code-review` |
427
+ | `name` | `'smrt-code-review'` | Yes | Skill name |
400
428
  | `includeReferences` | `boolean` | No | Include referenced files (default: true) |
401
429
 
402
430
  ## MCP Resources And Prompts
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Server, Tool } from '@modelcontextprotocol/server';
1
+ import { Server } from '@modelcontextprotocol/server';
2
+ export { TOOLS } from './tool-catalog.js';
2
3
  export declare const SERVER_VERSION: string;
3
- export declare const TOOLS: Tool[];
4
4
  export declare function createServer(): Server;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAGL,MAAM,EACN,KAAK,IAAI,EACV,MAAM,8BAA8B,CAAC;AAqBtC,eAAO,MAAM,cAAc,QAAuB,CAAC;AAwenD,eAAO,MAAM,KAAK,EAAE,IAAI,EAO0C,CAAC;AAEnE,wBAAgB,YAAY,IAAI,MAAM,CAgfrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAGL,MAAM,EACP,MAAM,8BAA8B,CAAC;AAqBtC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,eAAO,MAAM,cAAc,QAAuB,CAAC;AAuBnD,wBAAgB,YAAY,IAAI,MAAM,CAkfrC"}