@happyvertical/smrt-core 0.56.0 → 0.56.2

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.
Files changed (114) hide show
  1. package/AGENTS.md +6 -0
  2. package/agents/browser-entry.md +5 -0
  3. package/agents/generators.md +61 -0
  4. package/agents/object-runtime.md +17 -0
  5. package/dist/browser.d.ts +2 -0
  6. package/dist/browser.d.ts.map +1 -1
  7. package/dist/browser.js +3 -1
  8. package/dist/cookbook/engine/commands.d.ts.map +1 -1
  9. package/dist/cookbook/engine/commands.js +12 -0
  10. package/dist/cookbook/engine/commands.js.map +1 -1
  11. package/dist/cookbook/engine/defaults.d.ts.map +1 -1
  12. package/dist/cookbook/engine/defaults.js +8 -0
  13. package/dist/cookbook/engine/defaults.js.map +1 -1
  14. package/dist/cookbook/engine/document.d.ts +4 -0
  15. package/dist/cookbook/engine/document.d.ts.map +1 -1
  16. package/dist/cookbook/engine/document.js +11 -3
  17. package/dist/cookbook/engine/document.js.map +1 -1
  18. package/dist/cookbook/engine/engine.d.ts.map +1 -1
  19. package/dist/cookbook/engine/engine.js +3 -1
  20. package/dist/cookbook/engine/engine.js.map +1 -1
  21. package/dist/cookbook/engine/schemas.d.ts.map +1 -1
  22. package/dist/cookbook/engine/schemas.js +8 -0
  23. package/dist/cookbook/engine/schemas.js.map +1 -1
  24. package/dist/cookbook/engine/types.d.ts +5 -1
  25. package/dist/cookbook/engine/types.d.ts.map +1 -1
  26. package/dist/cookbook/engine/types.js.map +1 -1
  27. package/dist/generators/index.d.ts +1 -0
  28. package/dist/generators/index.d.ts.map +1 -1
  29. package/dist/generators/index.js +2 -1
  30. package/dist/generators/mcp-runtime-template.d.ts +3 -0
  31. package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
  32. package/dist/generators/mcp-runtime-template.js +30 -4
  33. package/dist/generators/mcp-runtime-template.js.map +1 -1
  34. package/dist/generators/mcp.d.ts +5 -0
  35. package/dist/generators/mcp.d.ts.map +1 -1
  36. package/dist/generators/mcp.js +78 -7
  37. package/dist/generators/mcp.js.map +1 -1
  38. package/dist/generators.js +2 -1
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -1
  42. package/dist/interceptors.d.ts +7 -0
  43. package/dist/interceptors.d.ts.map +1 -1
  44. package/dist/interceptors.js +15 -1
  45. package/dist/interceptors.js.map +1 -1
  46. package/dist/manifest/browser-capability.generated.d.ts.map +1 -1
  47. package/dist/manifest/browser-capability.generated.js +47 -5
  48. package/dist/manifest/browser-capability.generated.js.map +1 -1
  49. package/dist/manifest/index.js +1 -1
  50. package/dist/manifest/manifest-loader.d.ts.map +1 -1
  51. package/dist/manifest/manifest-loader.js +1 -2
  52. package/dist/manifest/manifest-loader.js.map +1 -1
  53. package/dist/manifest/static-manifest.js +1 -1
  54. package/dist/manifest/static-manifest.js.map +1 -1
  55. package/dist/manifest/store.js +1 -1
  56. package/dist/manifest.json +1 -1
  57. package/dist/mcp-serializer.d.ts +38 -0
  58. package/dist/mcp-serializer.d.ts.map +1 -0
  59. package/dist/mcp-serializer.js +60 -0
  60. package/dist/mcp-serializer.js.map +1 -0
  61. package/dist/object.d.ts +1 -0
  62. package/dist/object.d.ts.map +1 -1
  63. package/dist/object.js +44 -13
  64. package/dist/object.js.map +1 -1
  65. package/dist/registry/collection-exposure.d.ts +99 -0
  66. package/dist/registry/collection-exposure.d.ts.map +1 -0
  67. package/dist/registry/collection-exposure.js +135 -0
  68. package/dist/registry/collection-exposure.js.map +1 -0
  69. package/dist/registry/types.d.ts +13 -0
  70. package/dist/registry/types.d.ts.map +1 -1
  71. package/dist/registry.d.ts +8 -1
  72. package/dist/registry.d.ts.map +1 -1
  73. package/dist/registry.js +76 -3
  74. package/dist/registry.js.map +1 -1
  75. package/dist/scanner/manifest-generator.d.ts +14 -0
  76. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  77. package/dist/scanner/manifest-generator.js +66 -13
  78. package/dist/scanner/manifest-generator.js.map +1 -1
  79. package/dist/smrt-knowledge.json +13 -11
  80. package/dist/utils/import-project-vite.js +1 -1
  81. package/dist/utils/import-workspace-module.js +1 -1
  82. package/dist/utils/sha256.js +2 -2
  83. package/dist/vite-plugin/dev-plane-route.js +1 -1
  84. package/dist/vite-plugin/import-build-aware.js +1 -1
  85. package/dist/vite-plugin/index.js +2 -2
  86. package/dist/vite-plugin/resources-route.js +1 -1
  87. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  88. package/dist/vite-plugin/sveltekit-generator.js +5 -1
  89. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  90. package/package.json +16 -10
  91. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js +0 -169
  92. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js.map +0 -1
  93. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js +0 -13
  94. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js.map +0 -1
  95. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js +0 -198
  96. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js.map +0 -1
  97. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js +0 -243
  98. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js.map +0 -1
  99. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -51
  100. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +0 -1
  101. package/dist/node_modules/.pnpm/brace-expansion@5.0.11/node_modules/brace-expansion/dist/esm/index.js +0 -202
  102. package/dist/node_modules/.pnpm/brace-expansion@5.0.11/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  103. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -10
  104. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +0 -1
  105. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -514
  106. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js.map +0 -1
  107. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -124
  108. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js.map +0 -1
  109. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -21
  110. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js.map +0 -1
  111. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -629
  112. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js.map +0 -1
  113. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -28
  114. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js.map +0 -1
@@ -137,6 +137,8 @@ export declare class ManifestGenerator {
137
137
  * @param manifest - The manifest to process in-place
138
138
  */
139
139
  generateSchemas(manifest: SmartObjectManifest): void;
140
+ /** A report model's generated surface defaults to `list`/`get`. */
141
+ applyReportSurfaceDefaults(manifest: SmartObjectManifest): void;
140
142
  normalizeReportObjects(manifest: SmartObjectManifest): void;
141
143
  normalizeReportTenantScope(manifest: SmartObjectManifest): void;
142
144
  /**
@@ -226,6 +228,18 @@ export declare class ManifestGenerator {
226
228
  * @param manifest - The manifest to process in-place
227
229
  */
228
230
  mergeInheritedFields(manifest: SmartObjectManifest): void;
231
+ /**
232
+ * Fail the build when a collection class opens a generated CRUD write (MCP
233
+ * or CLI) that its model keeps closed. Runs after inheritance, so only a
234
+ * collection's own `@smrt()` surface can trip it.
235
+ */
236
+ private assertCollectionExposure;
237
+ /**
238
+ * Whether a class descends from any SMRT collection base (`SmrtCollection`,
239
+ * `SmrtJunction`, `SmrtJunctionBase`, `SmrtReportCollection`), following
240
+ * parents declared in this manifest.
241
+ */
242
+ private extendsAnyCollectionBase;
229
243
  /**
230
244
  * Check if a class extends SmrtCollection (directly or indirectly)
231
245
  *
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-generator.d.ts","sourceRoot":"","sources":["../../src/scanner/manifest-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest-generator.d.ts","sourceRoot":"","sources":["../../src/scanner/manifest-generator.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@ import { defaultConflictColumns, resolveOwnershipTenantColumn, resolveTenantColu
3
3
  import { resolveForeignKeyDeleteAction, resolveForeignKeyUpdateAction } from "../schema/foreign-key-policy.js";
4
4
  import { classnameToTablename, toSnakeCase } from "../utils/naming.js";
5
5
  import { assertScopedPackageName, createQualifiedName, isQualifiedNameAliasFormat, readPreviousQualifiedNames } from "../utils/qualified-names.js";
6
+ import { isSmrtCollectionExtendsName } from "../registry/collection-resolution.js";
6
7
  import "./types.js";
7
8
  import { loadExternalManifestSync, lookupInManifest } from "../manifest/manifest-loader.js";
8
9
  import { VERBOSE_ENABLED } from "../registry/shared-state.js";
10
+ import { findCollectionWriteEscalations, formatCollectionWriteEscalations, inheritCollectionExposure } from "../registry/collection-exposure.js";
9
11
  import { generateToolManifest } from "../tools/tool-generator.js";
10
12
  import { createManifestClassNamePredicate, resolveApiMethodExposure, resolveCustomActionMetadata, resolveEffectiveActionMetadata } from "../generators/custom-action.js";
11
13
  import { FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, RELATIONSHIP_ROLES, displayLabelFieldProblem, isFieldUIFormat, isFieldUIWidget, isRelationshipRole, resolveDisplayLabelField } from "../ui-metadata.js";
@@ -226,6 +228,7 @@ var ManifestGenerator = class {
226
228
  this.assertQualifiedNameAliases(manifest);
227
229
  this.normalizeReportTenantScope(manifest);
228
230
  this.injectTenantScopedFields(manifest);
231
+ this.applyReportSurfaceDefaults(manifest);
229
232
  this.mergeInheritedFields(manifest);
230
233
  const objectsByName = new Map(Object.values(manifest.objects).map((objectDef) => [objectDef.className, objectDef]));
231
234
  for (const objectDef of Object.values(manifest.objects)) {
@@ -270,6 +273,7 @@ var ManifestGenerator = class {
270
273
  };
271
274
  }
272
275
  }
276
+ this.assertCollectionExposure(manifest);
273
277
  this.assertRecipeOptions(manifest);
274
278
  this.assertRecipeHelp(manifest);
275
279
  applyRecipeDemo(manifest, options?.packageName);
@@ -667,11 +671,18 @@ var ManifestGenerator = class {
667
671
  }
668
672
  }
669
673
  }
670
- normalizeReportObjects(manifest) {
674
+ /** A report model's generated surface defaults to `list`/`get`. */
675
+ applyReportSurfaceDefaults(manifest) {
671
676
  for (const obj of Object.values(manifest.objects)) {
672
677
  if (!obj.decoratorConfig?.report) continue;
673
678
  obj.decoratorConfig.api ??= { include: ["list", "get"] };
674
679
  obj.decoratorConfig.mcp ??= { include: ["list", "get"] };
680
+ }
681
+ }
682
+ normalizeReportObjects(manifest) {
683
+ this.applyReportSurfaceDefaults(manifest);
684
+ for (const obj of Object.values(manifest.objects)) {
685
+ if (!obj.decoratorConfig?.report) continue;
675
686
  if (obj.decoratorConfig.conflictColumns) continue;
676
687
  const tenantScoped = obj.decoratorConfig.tenantScoped;
677
688
  const tenantField = tenantScoped && typeof tenantScoped === "object" ? tenantScoped.field || "tenantId" : tenantScoped ? "tenantId" : void 0;
@@ -1103,10 +1114,13 @@ var ManifestGenerator = class {
1103
1114
  }
1104
1115
  logger.debug(`[manifest-generator] ✅ ${obj.className} now has ${Object.keys(mergedFields).length} fields (including inherited)`);
1105
1116
  }
1106
- for (const obj of Object.values(manifest.objects)) if (obj.extends === "SmrtCollection" || this.extendsCollection(obj, objectsByName)) {
1117
+ for (const obj of Object.values(manifest.objects)) {
1118
+ const isCollection = obj.extends === "SmrtCollection" || this.extendsCollection(obj, objectsByName);
1119
+ if (!isCollection && !this.extendsAnyCollectionBase(obj, objectsByName)) continue;
1107
1120
  const itemClass = this.findItemClass(obj, manifest, objectsByName);
1108
- if (itemClass) {
1109
- logger.debug(`[manifest-generator] ${obj.className} is a collection class for ${itemClass.className}`);
1121
+ if (!itemClass || itemClass === obj) continue;
1122
+ logger.debug(`[manifest-generator] ${obj.className} is a collection class for ${itemClass.className}`);
1123
+ if (isCollection) {
1110
1124
  if (itemClass.decoratorConfig?.tableName) {
1111
1125
  obj.decoratorConfig = obj.decoratorConfig || {};
1112
1126
  obj.decoratorConfig.tableName = itemClass.decoratorConfig.tableName;
@@ -1116,19 +1130,58 @@ var ManifestGenerator = class {
1116
1130
  logger.debug(`[manifest-generator] ${obj.className} inherits collection: '${itemClass.collection}' from item class ${itemClass.className} (was '${obj.collection}')`);
1117
1131
  obj.collection = itemClass.collection;
1118
1132
  }
1119
- for (const key of [
1120
- "api",
1121
- "mcp",
1122
- "cli"
1123
- ]) if (itemClass.decoratorConfig?.[key] === false && obj.decoratorConfig?.[key] === void 0) {
1124
- obj.decoratorConfig = obj.decoratorConfig || {};
1125
- obj.decoratorConfig[key] = false;
1126
- logger.debug(`[manifest-generator] ${obj.className} inherits ${key}: false from item class ${itemClass.className}`);
1127
- }
1133
+ }
1134
+ const inherited = inheritCollectionExposure(obj.decoratorConfig || {}, itemClass.decoratorConfig || {}, {
1135
+ collection: new Set(Object.keys(obj.methods || {})),
1136
+ item: new Set(Object.keys(itemClass.methods || {}))
1137
+ });
1138
+ if (Object.keys(inherited).length > 0) {
1139
+ obj.decoratorConfig = {
1140
+ ...obj.decoratorConfig || {},
1141
+ ...inherited
1142
+ };
1143
+ logger.debug(`[manifest-generator] ${obj.className} inherits ${Object.keys(inherited).join(", ")} exposure from item class ${itemClass.className}`);
1128
1144
  }
1129
1145
  }
1130
1146
  }
1131
1147
  /**
1148
+ * Fail the build when a collection class opens a generated CRUD write (MCP
1149
+ * or CLI) that its model keeps closed. Runs after inheritance, so only a
1150
+ * collection's own `@smrt()` surface can trip it.
1151
+ */
1152
+ assertCollectionExposure(manifest) {
1153
+ const objectsByName = new Map(Object.values(manifest.objects).map((objectDef) => [objectDef.className, objectDef]));
1154
+ const findings = [];
1155
+ for (const obj of Object.values(manifest.objects)) {
1156
+ if (obj.extends !== "SmrtCollection" && !this.extendsCollection(obj, objectsByName) && !this.extendsAnyCollectionBase(obj, objectsByName)) continue;
1157
+ const itemClass = this.findItemClass(obj, manifest, objectsByName);
1158
+ if (!itemClass || itemClass === obj) continue;
1159
+ const escalations = findCollectionWriteEscalations(obj.decoratorConfig || {}, itemClass.decoratorConfig || {});
1160
+ if (escalations.length > 0) findings.push({
1161
+ collection: obj.qualifiedName || obj.className,
1162
+ model: itemClass.qualifiedName || itemClass.className,
1163
+ escalations
1164
+ });
1165
+ }
1166
+ if (findings.length > 0) throw new ConfigurationError(formatCollectionWriteEscalations(findings), "CONFIG_COLLECTION_EXPOSURE");
1167
+ }
1168
+ /**
1169
+ * Whether a class descends from any SMRT collection base (`SmrtCollection`,
1170
+ * `SmrtJunction`, `SmrtJunctionBase`, `SmrtReportCollection`), following
1171
+ * parents declared in this manifest.
1172
+ */
1173
+ extendsAnyCollectionBase(obj, objectsByName) {
1174
+ let current = obj;
1175
+ const visited = /* @__PURE__ */ new Set();
1176
+ while (current?.extends) {
1177
+ if (isSmrtCollectionExtendsName(current.extends)) return true;
1178
+ if (visited.has(current.extends)) return false;
1179
+ visited.add(current.extends);
1180
+ current = objectsByName.get(current.extends);
1181
+ }
1182
+ return false;
1183
+ }
1184
+ /**
1132
1185
  * Check if a class extends SmrtCollection (directly or indirectly)
1133
1186
  *
1134
1187
  * @param obj - The object definition to check