@happyvertical/smrt-core 0.51.39 → 0.53.0

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 (122) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +8 -2
  3. package/agents/model-moves.md +114 -0
  4. package/agents/object-runtime.md +3 -1
  5. package/agents/run-once.md +16 -7
  6. package/agents/schema-paths.md +79 -0
  7. package/dist/cascade.d.ts.map +1 -1
  8. package/dist/cascade.js +6 -3
  9. package/dist/cascade.js.map +1 -1
  10. package/dist/collection.d.ts +10 -1
  11. package/dist/collection.d.ts.map +1 -1
  12. package/dist/collection.js +14 -4
  13. package/dist/collection.js.map +1 -1
  14. package/dist/errors.d.ts +18 -0
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js +21 -0
  17. package/dist/errors.js.map +1 -1
  18. package/dist/generators/preflight-route.d.ts.map +1 -1
  19. package/dist/generators/preflight-route.js +1 -1
  20. package/dist/generators/preflight-route.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -1
  24. package/dist/knowledge.d.ts.map +1 -1
  25. package/dist/knowledge.js +3 -0
  26. package/dist/knowledge.js.map +1 -1
  27. package/dist/manifest/static-manifest.d.ts.map +1 -1
  28. package/dist/manifest/static-manifest.js +9 -1
  29. package/dist/manifest/static-manifest.js.map +1 -1
  30. package/dist/manifest/store.js +1 -1
  31. package/dist/manifest/store.js.map +1 -1
  32. package/dist/manifest.json +9 -1
  33. package/dist/migrations/differ.d.ts +56 -0
  34. package/dist/migrations/differ.d.ts.map +1 -1
  35. package/dist/migrations/differ.js +152 -27
  36. package/dist/migrations/differ.js.map +1 -1
  37. package/dist/migrations/index.d.ts +1 -0
  38. package/dist/migrations/index.d.ts.map +1 -1
  39. package/dist/migrations/index.js +2 -1
  40. package/dist/migrations/null-equal-indexes.js +1 -1
  41. package/dist/migrations/orchestrate.d.ts +7 -0
  42. package/dist/migrations/orchestrate.d.ts.map +1 -1
  43. package/dist/migrations/orchestrate.js +4 -2
  44. package/dist/migrations/orchestrate.js.map +1 -1
  45. package/dist/migrations/qualified-name-aliases.d.ts +134 -0
  46. package/dist/migrations/qualified-name-aliases.d.ts.map +1 -0
  47. package/dist/migrations/qualified-name-aliases.js +294 -0
  48. package/dist/migrations/qualified-name-aliases.js.map +1 -0
  49. package/dist/migrations/tracker.d.ts +29 -1
  50. package/dist/migrations/tracker.d.ts.map +1 -1
  51. package/dist/migrations/tracker.js +92 -7
  52. package/dist/migrations/tracker.js.map +1 -1
  53. package/dist/migrations.js +2 -1
  54. package/dist/object.d.ts +128 -0
  55. package/dist/object.d.ts.map +1 -1
  56. package/dist/object.js +333 -44
  57. package/dist/object.js.map +1 -1
  58. package/dist/polymorphic-association.d.ts +18 -0
  59. package/dist/polymorphic-association.d.ts.map +1 -1
  60. package/dist/polymorphic-association.js +27 -2
  61. package/dist/polymorphic-association.js.map +1 -1
  62. package/dist/registry/class-registration.d.ts.map +1 -1
  63. package/dist/registry/class-registration.js +27 -4
  64. package/dist/registry/class-registration.js.map +1 -1
  65. package/dist/registry/name-resolver.d.ts +8 -2
  66. package/dist/registry/name-resolver.d.ts.map +1 -1
  67. package/dist/registry/name-resolver.js +17 -8
  68. package/dist/registry/name-resolver.js.map +1 -1
  69. package/dist/registry/qualified-name-aliases.d.ts +109 -0
  70. package/dist/registry/qualified-name-aliases.d.ts.map +1 -0
  71. package/dist/registry/qualified-name-aliases.js +286 -0
  72. package/dist/registry/qualified-name-aliases.js.map +1 -0
  73. package/dist/registry/relationship-graph.d.ts.map +1 -1
  74. package/dist/registry/relationship-graph.js +1 -1
  75. package/dist/registry/relationship-graph.js.map +1 -1
  76. package/dist/registry/schema-builder.d.ts.map +1 -1
  77. package/dist/registry/schema-builder.js +7 -5
  78. package/dist/registry/schema-builder.js.map +1 -1
  79. package/dist/registry/types.d.ts +26 -0
  80. package/dist/registry/types.d.ts.map +1 -1
  81. package/dist/registry.d.ts +127 -6
  82. package/dist/registry.d.ts.map +1 -1
  83. package/dist/registry.js +234 -14
  84. package/dist/registry.js.map +1 -1
  85. package/dist/scanner/index.d.ts +1 -1
  86. package/dist/scanner/index.d.ts.map +1 -1
  87. package/dist/scanner/manifest-generator.d.ts +14 -2
  88. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  89. package/dist/scanner/manifest-generator.js +48 -9
  90. package/dist/scanner/manifest-generator.js.map +1 -1
  91. package/dist/scanner/types.d.ts +21 -0
  92. package/dist/scanner/types.d.ts.map +1 -1
  93. package/dist/scanner/types.js.map +1 -1
  94. package/dist/schema/conflict-target.d.ts +68 -11
  95. package/dist/schema/conflict-target.d.ts.map +1 -1
  96. package/dist/schema/conflict-target.js +75 -12
  97. package/dist/schema/conflict-target.js.map +1 -1
  98. package/dist/schema/foreign-key-ddl.d.ts +17 -1
  99. package/dist/schema/foreign-key-ddl.d.ts.map +1 -1
  100. package/dist/schema/foreign-key-ddl.js +29 -3
  101. package/dist/schema/foreign-key-ddl.js.map +1 -1
  102. package/dist/schema/foreign-key-policy.d.ts +8 -0
  103. package/dist/schema/foreign-key-policy.d.ts.map +1 -1
  104. package/dist/schema/foreign-key-policy.js +2 -1
  105. package/dist/schema/foreign-key-policy.js.map +1 -1
  106. package/dist/schema/generator.d.ts +7 -0
  107. package/dist/schema/generator.d.ts.map +1 -1
  108. package/dist/schema/generator.js +18 -10
  109. package/dist/schema/generator.js.map +1 -1
  110. package/dist/schema/text-cast-probe.d.ts +50 -1
  111. package/dist/schema/text-cast-probe.d.ts.map +1 -1
  112. package/dist/schema/text-cast-probe.js +46 -11
  113. package/dist/schema/text-cast-probe.js.map +1 -1
  114. package/dist/schema/types.d.ts +6 -0
  115. package/dist/schema/types.d.ts.map +1 -1
  116. package/dist/scripts/browser-plain-json-regression.mjs +4 -1
  117. package/dist/smrt-knowledge.json +22 -11
  118. package/dist/utils/qualified-names.d.ts +11 -0
  119. package/dist/utils/qualified-names.d.ts.map +1 -1
  120. package/dist/utils/qualified-names.js +21 -1
  121. package/dist/utils/qualified-names.js.map +1 -1
  122. package/package.json +11 -11
@@ -8,5 +8,5 @@
8
8
  * import { OxcScanner, ManifestAdapter } from '@happyvertical/smrt-scanner';
9
9
  */
10
10
  export { generateManifest, ManifestGenerator } from './manifest-generator.js';
11
- export type { AgentAdminRouteManifest, AgentComponentDeclaration, AgentFeature, AgentManifest, AgentMenuItem, AgentPermission, AgentUISlotManifest, FieldDefinition, MethodDefinition, ScanOptions, ScanResult, SmartObjectDefinition, SmartObjectManifest, } from './types.js';
11
+ export type { AgentAdminRouteManifest, AgentComponentDeclaration, AgentCreateEntryManifest, AgentFeature, AgentManifest, AgentMenuItem, AgentPermission, AgentUISlotManifest, FieldDefinition, MethodDefinition, ScanOptions, ScanResult, SmartObjectDefinition, SmartObjectManifest, } from './types.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
@@ -63,6 +63,17 @@ export declare class ManifestGenerator {
63
63
  */
64
64
  injectTenantScopedFields(manifest: SmartObjectManifest): void;
65
65
  private injectTenantScopedField;
66
+ /**
67
+ * Validate every `decoratorConfig.previousQualifiedNames` declaration
68
+ * (#3338). The declaration rides into the manifest verbatim — it is the
69
+ * lazy loader's alias index — so a malformed or colliding alias must stop
70
+ * the build rather than ship a manifest the runtime will refuse:
71
+ *
72
+ * - an array of scoped `@scope/package:ClassName` strings, each listed once;
73
+ * - never the object's own qualified name, nor any object of this manifest;
74
+ * - never declared by two objects of this manifest.
75
+ */
76
+ assertQualifiedNameAliases(manifest: SmartObjectManifest): void;
66
77
  assertTenantScopedSchemaContract(manifest: SmartObjectManifest): void;
67
78
  private getTenantScopedSchemaOwner;
68
79
  private getTenantScopedFieldTypeFailure;
@@ -98,8 +109,9 @@ export declare class ManifestGenerator {
98
109
  /**
99
110
  * Materialize the tenant-aware default conflict target (#2360).
100
111
  *
101
- * A tenant-scoped class that declares no `@smrt({ conflictColumns })` keys
102
- * on `[tenant column, ...natural key]` — `(tenant_id, slug, context)` for
112
+ * A tenant-owned class — tenant-scoped, or carrying an undeclared
113
+ * `tenantId` field (`resolveOwnershipTenantColumn()`) — that declares no
114
+ * `@smrt({ conflictColumns })` keys on `[tenant column, ...natural key]` — `(tenant_id, slug, context)` for
103
115
  * a class-per-table object, `(tenant_id, slug, context, _meta_type)` for a
104
116
  * single-table hierarchy — so two tenants can each own the same slug and
105
117
  * neither `save()` adopts the other's row. Writing the resolved key into
@@ -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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"}
@@ -1,11 +1,11 @@
1
+ import { defaultConflictColumns, resolveOwnershipTenantColumn, resolveTenantColumn } from "../schema/conflict-target.js";
1
2
  import { resolveForeignKeyDeleteAction } from "../schema/foreign-key-policy.js";
2
3
  import { classnameToTablename, toSnakeCase } from "../utils/naming.js";
3
4
  import "./types.js";
4
- import { createQualifiedName } from "../utils/qualified-names.js";
5
+ import { createQualifiedName, isQualifiedNameAliasFormat, readPreviousQualifiedNames } from "../utils/qualified-names.js";
5
6
  import { generateToolManifest } from "../tools/tool-generator.js";
6
7
  import { createManifestClassNamePredicate, resolveApiMethodExposure, resolveCustomActionMetadata, resolveEffectiveActionMetadata } from "../generators/custom-action.js";
7
8
  import { VERBOSE_ENABLED } from "../registry/shared-state.js";
8
- import { defaultConflictColumns, resolveTenantColumn } from "../schema/conflict-target.js";
9
9
  import { SchemaGenerator } from "../schema/generator.js";
10
10
  import { isTestFile } from "./test-file-patterns.js";
11
11
  import { loadExternalManifestSync, lookupInManifest } from "../manifest/manifest-loader.js";
@@ -201,6 +201,7 @@ var ManifestGenerator = class {
201
201
  * @param options - package metadata for the agent-manifest pass
202
202
  */
203
203
  applyGenerationPasses(manifest, options) {
204
+ this.assertQualifiedNameAliases(manifest);
204
205
  this.normalizeReportTenantScope(manifest);
205
206
  this.injectTenantScopedFields(manifest);
206
207
  this.mergeInheritedFields(manifest);
@@ -270,6 +271,40 @@ var ManifestGenerator = class {
270
271
  };
271
272
  logger.debug(`[manifest-generator] Injected ${fieldName} field for ${objectDef.className} (tenantScoped: ${JSON.stringify(tenantConfig)})`);
272
273
  }
274
+ /**
275
+ * Validate every `decoratorConfig.previousQualifiedNames` declaration
276
+ * (#3338). The declaration rides into the manifest verbatim — it is the
277
+ * lazy loader's alias index — so a malformed or colliding alias must stop
278
+ * the build rather than ship a manifest the runtime will refuse:
279
+ *
280
+ * - an array of scoped `@scope/package:ClassName` strings, each listed once;
281
+ * - never the object's own qualified name, nor any object of this manifest;
282
+ * - never declared by two objects of this manifest.
283
+ */
284
+ assertQualifiedNameAliases(manifest) {
285
+ const ownNames = /* @__PURE__ */ new Set();
286
+ for (const [key, obj] of Object.entries(manifest.objects)) ownNames.add(obj.qualifiedName ?? key);
287
+ const claimedBy = /* @__PURE__ */ new Map();
288
+ for (const key of Object.keys(manifest.objects).sort(compareText)) {
289
+ const obj = manifest.objects[key];
290
+ const owner = obj.qualifiedName ?? key;
291
+ const declared = obj.decoratorConfig?.previousQualifiedNames;
292
+ if (declared === void 0) continue;
293
+ if (!Array.isArray(declared)) throw new Error(`[manifest-generator] ${owner}: previousQualifiedNames must be an array of qualified names ("@package/name:ClassName").`);
294
+ const aliases = readPreviousQualifiedNames(obj.decoratorConfig);
295
+ if (aliases.length !== declared.length) throw new Error(`[manifest-generator] ${owner}: previousQualifiedNames must contain only string literals.`);
296
+ const seen = /* @__PURE__ */ new Set();
297
+ for (const alias of aliases) {
298
+ if (!isQualifiedNameAliasFormat(alias)) throw new Error(`[manifest-generator] ${owner}: previousQualifiedNames entry "${alias}" is not a qualified name ("@package/name:ClassName").`);
299
+ if (seen.has(alias)) throw new Error(`[manifest-generator] ${owner}: previousQualifiedNames lists "${alias}" more than once.`);
300
+ seen.add(alias);
301
+ if (ownNames.has(alias)) throw new Error(`[manifest-generator] ${owner}: previousQualifiedNames "${alias}" names a live object of this package; an alias may only name a class that no longer exists.`);
302
+ const other = claimedBy.get(alias);
303
+ if (other) throw new Error(`[manifest-generator] previousQualifiedNames "${alias}" is declared by both ${other} and ${owner}; an old name can resolve to only one class.`);
304
+ claimedBy.set(alias, owner);
305
+ }
306
+ }
307
+ }
273
308
  assertTenantScopedSchemaContract(manifest) {
274
309
  const failures = [];
275
310
  for (const objectDef of Object.values(manifest.objects)) {
@@ -464,8 +499,9 @@ var ManifestGenerator = class {
464
499
  /**
465
500
  * Materialize the tenant-aware default conflict target (#2360).
466
501
  *
467
- * A tenant-scoped class that declares no `@smrt({ conflictColumns })` keys
468
- * on `[tenant column, ...natural key]` — `(tenant_id, slug, context)` for
502
+ * A tenant-owned class — tenant-scoped, or carrying an undeclared
503
+ * `tenantId` field (`resolveOwnershipTenantColumn()`) — that declares no
504
+ * `@smrt({ conflictColumns })` keys on `[tenant column, ...natural key]` — `(tenant_id, slug, context)` for
469
505
  * a class-per-table object, `(tenant_id, slug, context, _meta_type)` for a
470
506
  * single-table hierarchy — so two tenants can each own the same slug and
471
507
  * neither `save()` adopts the other's row. Writing the resolved key into
@@ -489,9 +525,7 @@ var ManifestGenerator = class {
489
525
  if (obj.decoratorConfig.report) continue;
490
526
  if (this.isSTIChildClass(obj, manifest)) continue;
491
527
  const tenantScoped = obj.decoratorConfig.tenantScoped;
492
- if (!tenantScoped) continue;
493
- const { tenantConfig } = this.normalizeTenantScopedConfig(tenantScoped);
494
- const tenantColumn = resolveTenantColumn(tenantConfig.field, (fieldName) => Boolean(obj.fields[fieldName]), toSnakeCase);
528
+ const tenantColumn = resolveOwnershipTenantColumn(tenantScoped ? resolveTenantColumn(this.normalizeTenantScopedConfig(tenantScoped).tenantConfig.field, (fieldName) => Boolean(obj.fields[fieldName]), toSnakeCase) : void 0, (column) => Object.keys(obj.fields).some((fieldName) => toSnakeCase(fieldName) === column));
495
529
  if (!tenantColumn) continue;
496
530
  obj.decoratorConfig.conflictColumns = defaultConflictColumns(obj.decoratorConfig.tableStrategy === "sti" ? "sti" : "cti", tenantColumn);
497
531
  }
@@ -547,7 +581,8 @@ var ManifestGenerator = class {
547
581
  const { action } = resolveForeignKeyDeleteAction({
548
582
  declared: field._meta?.onDelete,
549
583
  isConflictColumn: conflictColumns.has(columnName),
550
- isTenantIdField: false
584
+ isTenantIdField: false,
585
+ columnName
551
586
  });
552
587
  for (const sourceSchema of sourceSchemas) {
553
588
  const sourceColumn = sourceSchema.columns[columnName];
@@ -660,11 +695,13 @@ var ManifestGenerator = class {
660
695
  if (!sqlType && !referenceKind) continue;
661
696
  const columnName = toSnakeCase(fieldName);
662
697
  if (!obj.schema.columns[columnName]) continue;
663
- obj.schema.columns[columnName] = {
698
+ const column = {
664
699
  ...obj.schema.columns[columnName],
665
700
  ...sqlType ? { type: String(sqlType).toUpperCase() } : {},
666
701
  ...referenceKind ? { referenceKind } : {}
667
702
  };
703
+ if (String(column.type).toUpperCase() === "UUID" && column.default === "") delete column.default;
704
+ obj.schema.columns[columnName] = column;
668
705
  }
669
706
  }
670
707
  getReferenceKind(field) {
@@ -1615,6 +1652,7 @@ ${fields}
1615
1652
  }
1616
1653
  }
1617
1654
  const adminRoutes = obj.staticProperties?.adminRoutes ?? [];
1655
+ const createEntries = obj.staticProperties?.createEntries ?? [];
1618
1656
  const signalSubscriptions = obj.staticProperties?.signalSubscriptions ?? [];
1619
1657
  obj.agent = {
1620
1658
  name: obj.className,
@@ -1624,6 +1662,7 @@ ${fields}
1624
1662
  description: agentConfig.description,
1625
1663
  uiSlots,
1626
1664
  ...adminRoutes.length > 0 ? { adminRoutes } : {},
1665
+ ...createEntries.length > 0 ? { createEntries } : {},
1627
1666
  ...signalSubscriptions.length > 0 ? { signalSubscriptions } : {},
1628
1667
  permissions,
1629
1668
  features,