@happyvertical/smrt-core 0.40.55 → 0.40.56
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/dist/consumer-plugin/index.d.ts.map +1 -1
- package/dist/consumer-plugin/index.js +4 -3
- package/dist/consumer-plugin/index.js.map +1 -1
- package/dist/manifest/generator.d.ts.map +1 -1
- package/dist/manifest/generator.js +2 -1
- package/dist/manifest/generator.js.map +1 -1
- package/dist/manifest/manifest-loader.d.ts.map +1 -1
- package/dist/manifest/manifest-loader.js +2 -1
- package/dist/manifest/manifest-loader.js.map +1 -1
- package/dist/manifest/static-manifest.js +2 -2
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.d.ts.map +1 -1
- package/dist/manifest/store.js +3 -2
- package/dist/manifest/store.js.map +1 -1
- package/dist/manifest/test-manifest-stub.js +2 -2
- package/dist/manifest/test-manifest-stub.js.map +1 -1
- package/dist/manifest.json +2 -2
- package/dist/scanner/manifest-generator.d.ts.map +1 -1
- package/dist/scanner/manifest-generator.js +2 -1
- package/dist/scanner/manifest-generator.js.map +1 -1
- package/dist/scanner/types.d.ts +33 -0
- package/dist/scanner/types.d.ts.map +1 -1
- package/dist/scanner/types.js +37 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/schema/code-generator.d.ts.map +1 -1
- package/dist/schema/code-generator.js +2 -1
- package/dist/schema/code-generator.js.map +1 -1
- package/dist/scripts/generate-manifest.js +14 -2
- package/dist/smrt-knowledge.json +4 -4
- package/dist/vite-plugin/index.d.ts +1 -1
- package/dist/vite-plugin/index.d.ts.map +1 -1
- package/dist/vite-plugin/index.js +18 -4
- package/dist/vite-plugin/index.js.map +1 -1
- package/package.json +4 -4
package/dist/scanner/types.d.ts
CHANGED
|
@@ -395,8 +395,41 @@ export interface SmartObjectDefinition {
|
|
|
395
395
|
*/
|
|
396
396
|
agent?: AgentManifest;
|
|
397
397
|
}
|
|
398
|
+
/**
|
|
399
|
+
* Fixed `timestamp` for every manifest that can reach build output.
|
|
400
|
+
*
|
|
401
|
+
* Manifests are inlined into bundles (`registerPackageManifest(JSON.parse(...))`),
|
|
402
|
+
* so a wall-clock value changes the emitted bytes on every build. That changes
|
|
403
|
+
* Vite's content hash, which changes `dist/`, which invalidates every
|
|
404
|
+
* downstream package through `dependsOn: ['^build']` — one rebuilt package
|
|
405
|
+
* churned 202 of 245 task hashes, and `typecheck` never reused a cache entry
|
|
406
|
+
* across runs (#2223).
|
|
407
|
+
*
|
|
408
|
+
* Nothing reads the field: `getManifestTimestampsHash` invalidates on
|
|
409
|
+
* filesystem mtimes, and `normalizeManifestForHash` deletes it before
|
|
410
|
+
* comparing. A fixed value therefore costs no information.
|
|
411
|
+
*
|
|
412
|
+
* Genuine runtime caches that expire on elapsed time — the discovery cache in
|
|
413
|
+
* `manifest/discover-smrt-packages.ts` — keep using the clock; they never
|
|
414
|
+
* reach build output.
|
|
415
|
+
*/
|
|
416
|
+
export declare const MANIFEST_TIMESTAMP = 0;
|
|
417
|
+
/**
|
|
418
|
+
* Fixed `generatedAt` for knowledge artifacts emitted into `dist/`.
|
|
419
|
+
*
|
|
420
|
+
* Same reasoning as {@link MANIFEST_TIMESTAMP}: build output is compared
|
|
421
|
+
* byte-for-byte, so it cannot carry the clock. The Unix epoch is used rather
|
|
422
|
+
* than `0` because the field is an ISO-8601 string, and a parseable value
|
|
423
|
+
* keeps any consumer that formats it working.
|
|
424
|
+
*
|
|
425
|
+
* The working copy under `.smrt/` keeps a real timestamp — it is useful to a
|
|
426
|
+
* human there, and `preserveKnowledgeGeneratedAt` already stops it churning
|
|
427
|
+
* across incremental rebuilds.
|
|
428
|
+
*/
|
|
429
|
+
export declare const DETERMINISTIC_GENERATED_AT = "1970-01-01T00:00:00.000Z";
|
|
398
430
|
export interface SmartObjectManifest {
|
|
399
431
|
version: string;
|
|
432
|
+
/** Always {@link MANIFEST_TIMESTAMP} for build-output manifests. */
|
|
400
433
|
timestamp: number;
|
|
401
434
|
packageName?: string;
|
|
402
435
|
packageVersion?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner/types.js
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/scanner/types.ts
|
|
2
|
+
/**
|
|
3
|
+
* Fixed `timestamp` for every manifest that can reach build output.
|
|
4
|
+
*
|
|
5
|
+
* Manifests are inlined into bundles (`registerPackageManifest(JSON.parse(...))`),
|
|
6
|
+
* so a wall-clock value changes the emitted bytes on every build. That changes
|
|
7
|
+
* Vite's content hash, which changes `dist/`, which invalidates every
|
|
8
|
+
* downstream package through `dependsOn: ['^build']` — one rebuilt package
|
|
9
|
+
* churned 202 of 245 task hashes, and `typecheck` never reused a cache entry
|
|
10
|
+
* across runs (#2223).
|
|
11
|
+
*
|
|
12
|
+
* Nothing reads the field: `getManifestTimestampsHash` invalidates on
|
|
13
|
+
* filesystem mtimes, and `normalizeManifestForHash` deletes it before
|
|
14
|
+
* comparing. A fixed value therefore costs no information.
|
|
15
|
+
*
|
|
16
|
+
* Genuine runtime caches that expire on elapsed time — the discovery cache in
|
|
17
|
+
* `manifest/discover-smrt-packages.ts` — keep using the clock; they never
|
|
18
|
+
* reach build output.
|
|
19
|
+
*/
|
|
20
|
+
var MANIFEST_TIMESTAMP = 0;
|
|
21
|
+
/**
|
|
22
|
+
* Fixed `generatedAt` for knowledge artifacts emitted into `dist/`.
|
|
23
|
+
*
|
|
24
|
+
* Same reasoning as {@link MANIFEST_TIMESTAMP}: build output is compared
|
|
25
|
+
* byte-for-byte, so it cannot carry the clock. The Unix epoch is used rather
|
|
26
|
+
* than `0` because the field is an ISO-8601 string, and a parseable value
|
|
27
|
+
* keeps any consumer that formats it working.
|
|
28
|
+
*
|
|
29
|
+
* The working copy under `.smrt/` keeps a real timestamp — it is useful to a
|
|
30
|
+
* human there, and `preserveKnowledgeGeneratedAt` already stops it churning
|
|
31
|
+
* across incremental rebuilds.
|
|
32
|
+
*/
|
|
33
|
+
var DETERMINISTIC_GENERATED_AT = "1970-01-01T00:00:00.000Z";
|
|
34
|
+
//#endregion
|
|
35
|
+
export { DETERMINISTIC_GENERATED_AT, MANIFEST_TIMESTAMP };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/scanner/types.ts"],"sourcesContent":["/**\n * Type definitions for AST scanning and manifest generation\n */\n\nimport type { SmartObjectConfig } from '../registry.js';\n\n/**\n * Qualified class name in format \"@package/name:ClassName\"\n * Example: \"@happyvertical/smrt-core:Product\"\n */\nexport type QualifiedClassName = `${string}:${string}`;\n\n/**\n * Static per-field UI hints authored via `@field({ ui })` (#2046).\n *\n * A pure presentation seed for the field-policy rail (epic #2045): it rides the\n * manifest under the field's `_meta.ui` (never promoted to a top-level\n * `FieldDefinition` key), reaches runtime at `field._meta.ui` via\n * `ObjectRegistry.getAllFields()`, and is emitted to the browser in generated\n * web-collection definitions. It has NO schema, persistence, or security\n * effect — `sensitive`/`readPermission` remain the security rail.\n */\nexport interface FieldUIHints {\n /**\n * Seed the field into the \"basic\" visibility tier (shown before the\n * advanced disclosure). Unmarked fields default per the cold-start rule:\n * an object with no basic markers renders everything basic; once any field\n * is marked, unmarked fields default to advanced.\n */\n basic?: boolean;\n /** Grouping key for form section/grouping (consumer-defined label). */\n group?: string;\n /** Relative sort order within the form/group (ascending). */\n order?: number;\n /**\n * Seed the field's policy as locked: org/user policy tiers may not\n * override it unless an org admin explicitly unlocks it.\n */\n locked?: boolean;\n}\n\n/**\n * Structured metadata attached to a field definition under `_meta`.\n *\n * Captures the field-helper options the scanner and schema/manifest\n * generators read off a field (`sqlType`, `nullable`, `__tenancy`, …). The\n * index signature keeps the bag open for forward-compatible keys without\n * forcing every consumer through `any`.\n */\nexport interface FieldMeta {\n /** Explicit SQL type override (e.g. 'UUID') applied during schema generation. */\n sqlType?: string;\n /** Storage type for cross-package reference ids ('text' forces TEXT). */\n idType?: 'uuid' | 'text';\n /** When true, the column is nullable regardless of `required`. */\n nullable?: boolean;\n /** Mirror of the field's required flag captured at registration. */\n required?: boolean;\n /** Default value carried in metadata for runtime-registry generation. */\n default?: unknown;\n /** Marks the field as the primary key column. */\n primaryKey?: boolean;\n /** Marks the column as unique. */\n unique?: boolean;\n /** Column description carried into generated schema. */\n description?: string;\n /** Static per-field UI hints authored via `@field({ ui })` (#2046). */\n ui?: FieldUIHints;\n /** Opt-in column/JSON-path indexing flag. */\n indexed?: boolean;\n /** Foreign-key delete action carried in metadata. */\n onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';\n /** Excludes the field from persistence when true. */\n transient?: boolean;\n /** Numeric/length validation bounds and pattern. */\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n /**\n * Validation regex. A string source, a `RegExp`, or — when a manifest was\n * JSON-serialized and a `RegExp` collapsed to `{}` — an opaque object. Read\n * sites must narrow before accessing `.source`.\n */\n pattern?: unknown;\n /** Tenancy metadata injected for tenant-scoped models. */\n __tenancy?: {\n isTenantIdField?: boolean;\n [key: string]: unknown;\n };\n /** Report-aggregate metadata injected by the report normalizer. */\n __report?: {\n kind?: string;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/**\n * Controls how a class is exposed in manifests and across packages\n */\nexport type SmrtVisibility =\n | 'public' // Included in published manifest, available to all consumers\n | 'internal' // Package-only, excluded from published manifest\n | 'test'; // Test-only, never in any published manifest\n\nexport interface FieldDefinition {\n type:\n | 'text'\n | 'decimal'\n | 'boolean'\n | 'integer'\n | 'datetime'\n | 'json'\n | 'foreignKey'\n | 'crossPackageRef' // Cross-package reference — UUID id column by default, no DDL FK\n | 'oneToMany'\n | 'manyToMany'\n | 'meta'; // STI meta fields (_meta_type, _meta_data)\n required?: boolean;\n default?: unknown;\n min?: number;\n max?: number;\n maxLength?: number;\n minLength?: number;\n related?: string; // For foreignKey, crossPackageRef, oneToMany, manyToMany\n description?: string;\n _meta?: FieldMeta;\n transient?: boolean; // Field not persisted to database\n /**\n * Sensitive value (API secrets, credentials, tax IDs). Still persisted, but\n * excluded from `toPublicJSON()` (generated REST/MCP/SvelteKit responses) and\n * rejected as a `where` filter key.\n */\n sensitive?: boolean;\n /**\n * Read-only over generated write surfaces. Stripped from create/update\n * request bodies so callers cannot mass-assign it.\n */\n readonly?: boolean;\n /**\n * Permission slug required to include this field in public/read responses.\n * Omitted unless the serializer is given a resolved permission set that\n * includes this slug. `sensitive` still wins and hides the field for all\n * callers.\n */\n readPermission?: string;\n /**\n * Controls whether the field is included in JSON exports.\n * - `true`: Always exported (unless site explicitly excludes it)\n * - `false`: Never exported (cannot be overridden by site config)\n * - `undefined`: Uses site's fieldExportDefault setting\n */\n exported?: boolean;\n}\n\nexport interface MethodDefinition {\n name: string;\n async: boolean;\n parameters: Array<{\n name: string;\n type: string;\n optional: boolean;\n default?: unknown;\n }>;\n returnType: string;\n description?: string;\n isStatic: boolean;\n isPublic: boolean;\n}\n\n/**\n * Pre-generated schema column definition for manifest\n */\nexport interface ManifestColumnDefinition {\n type: string; // SQL type: TEXT, INTEGER, DECIMAL, BOOLEAN, DATETIME, JSON\n primaryKey?: boolean;\n /**\n * Non-DDL marker for SMRT-owned identifier/reference columns.\n */\n referenceKind?: 'id' | 'foreignKey' | 'crossPackageRef' | 'tenantId';\n notNull?: boolean;\n unique?: boolean;\n default?: unknown;\n}\n\n/**\n * Pre-generated schema index definition for manifest\n */\nexport interface ManifestIndexDefinition {\n name: string;\n columns: string[];\n unique?: boolean;\n where?: string;\n /**\n * Expression-based index target — when set, the DDL strategy renders the\n * index over a JSON path inside `column` (dialect-specific syntax).\n */\n jsonPath?: {\n column: string;\n path: string;\n };\n}\n\n/**\n * Pre-generated schema for efficient external package consumption\n * Generated at build time by ManifestGenerator, stored in manifest.json\n */\nexport interface ManifestSchema {\n tableName: string;\n ddl: string;\n columns: Record<string, ManifestColumnDefinition>;\n indexes: ManifestIndexDefinition[];\n version: string; // Hash of schema definition for migration tracking\n}\n\n/**\n * Validation rule type for pre-computed validators\n * These are serializable rules extracted from field definitions at build time,\n * eliminating the need to compile validator closures at runtime.\n */\nexport type ValidationRuleType =\n | 'required'\n | 'min'\n | 'max'\n | 'minLength'\n | 'maxLength'\n | 'pattern';\n\n/**\n * Pre-computed validation rule for a field\n * Generated at build time by ManifestGenerator, stored in manifest.json\n *\n * These rules are evaluated at runtime without creating closure functions,\n * significantly reducing CLI startup time for projects with many SMRT objects.\n */\nexport interface ValidationRule {\n /** Field name to validate */\n field: string;\n /** Type of validation rule */\n rule: ValidationRuleType;\n /** Value for the rule (number for min/max/minLength/maxLength, string for pattern) */\n value?: number | string;\n /** Field type for context (text, integer, decimal, etc.) */\n fieldType?: string;\n}\n\n// ── Agent manifest types ────────────────────────────────────────────────\n\n/**\n * Permission declared by an agent\n * Generated from uiSlots (manage:*) and CLI/MCP methods (execute:*)\n */\nexport interface AgentPermission {\n id: string;\n label: string;\n category: 'slot' | 'method';\n defaultGranted?: boolean;\n}\n\n/**\n * Feature declared by an agent\n */\nexport interface AgentFeature {\n id: string;\n label: string;\n description?: string;\n type: 'slot' | 'method';\n}\n\n/**\n * Menu item derived from agent uiSlots\n */\nexport interface AgentMenuItem {\n id: string;\n label: string;\n icon?: string;\n order: number;\n path: string;\n requiredPermission?: string;\n}\n\n/**\n * Component export declaration derived from package.json exports\n */\nexport interface AgentComponentDeclaration {\n exportPath: string;\n type: string;\n}\n\n/**\n * UI slot definition captured from static uiSlots on Agent subclasses\n */\nexport interface AgentUISlotManifest {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n order?: number;\n disabled?: boolean;\n /** Durable owner for settings written through this slot. */\n scope?: 'agent' | 'persona';\n /** Optional fallback form contract for host applications. */\n settingsSchema?: {\n version: number;\n fields: Array<{\n id: string;\n label: string;\n type: 'string' | 'number' | 'boolean' | 'select' | 'textarea' | 'json';\n description?: string;\n required?: boolean;\n default?: unknown;\n placeholder?: string;\n options?: Array<{ value: string; label: string }>;\n min?: number;\n max?: number;\n }>;\n };\n}\n\n/**\n * Admin route declared by an agent via static adminRoutes\n * Consumed by vitePluginAgentRoutes to register admin routes with SvelteKit\n */\nexport interface AgentAdminRouteManifest {\n /** Route path relative to agent root (e.g., 'sources/[sourceId]') */\n path: string;\n /** Component export name from the agent's admin entry point */\n component: string;\n /** Optional: export name for server load function */\n load?: string;\n}\n\n/**\n * Auto-generated agent manifest section\n * Produced by the manifest build pipeline for any class with `agent` decorator config\n */\nexport interface AgentManifest {\n name: string;\n slug: string;\n icon?: string;\n tier: 'free' | 'standard' | 'premium';\n description?: string;\n uiSlots: Record<string, AgentUISlotManifest>;\n adminRoutes?: AgentAdminRouteManifest[];\n /** Default signal subscriptions declared by this agent */\n signalSubscriptions?: string[];\n permissions: AgentPermission[];\n features: AgentFeature[];\n menuItems: AgentMenuItem[];\n components: AgentComponentDeclaration[];\n}\n\n// ── Core manifest types ─────────────────────────────────────────────────\n\nexport interface SmartObjectDefinition {\n /**\n * Qualified name in format \"@package/name:ClassName\"\n * This is the PRIMARY KEY for manifest lookups.\n * Example: \"@happyvertical/smrt-core:Product\"\n *\n * Optional during transition - will be required in future versions.\n */\n qualifiedName?: QualifiedClassName;\n\n /**\n * Simple class name (PascalCase)\n * Example: \"Product\"\n */\n className: string;\n\n /**\n * Package name where this class is defined.\n * Example: \"@happyvertical/smrt-core\"\n *\n * Optional during transition - will be required in future versions.\n */\n packageName?: string;\n\n /**\n * Visibility control for manifest inclusion\n * - 'public': Included in published manifest (default)\n * - 'internal': Package-only, excluded from published manifest\n * - 'test': Test-only, never in any published manifest\n *\n * Defaults to 'public' if not specified.\n */\n visibility?: SmrtVisibility;\n\n /**\n * @deprecated Use qualifiedName instead. Kept for transition period.\n * Lowercase class name, formerly used as manifest key.\n */\n name: string;\n\n collection: string; // Pluralized name for endpoints\n filePath: string;\n packageVersion?: string; // Package version for external manifest loading\n importPath?: string; // Import path for dynamic loading (e.g., \"@pkg/objects\")\n modulePath?: string; // Relative module path within package\n exportName?: string; // Named export to use (defaults to className)\n collectionExportName?: string; // Collection class export name\n fields: Record<string, FieldDefinition>;\n methods: Record<string, MethodDefinition>;\n decoratorConfig: SmartObjectConfig;\n extends?: string; // Base class name (simple name, not qualified)\n extendsQualified?: string; // Base class qualified name\n extendsTypeArg?: string; // Generic type argument (e.g., \"Meeting\" from \"SmrtCollection<Meeting>\")\n tools?: Array<{\n type: 'function';\n function: {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n };\n }>;\n /**\n * Pre-generated schema for efficient external package consumption\n * Generated at build time by ManifestGenerator (smrt scan)\n *\n * When present, consumers can use this pre-computed schema directly\n * without calling generateSchema() at runtime, eliminating latency.\n */\n schema?: ManifestSchema;\n\n /**\n * Pre-computed validation rules for efficient runtime validation\n * Generated at build time by ManifestGenerator (smrt scan)\n *\n * When present, the registry uses these rules instead of compiling\n * validator closures at runtime, significantly reducing startup time.\n *\n * @see ValidationRule\n */\n validationRules?: ValidationRule[];\n\n /**\n * Static properties captured from the class definition\n * Currently used for `static uiSlots` on Agent subclasses\n */\n staticProperties?: Record<string, unknown>;\n\n /**\n * Auto-generated agent manifest\n * Only present for classes with `agent` in their decorator config\n * Generated at build time by ManifestGenerator fifth pass\n */\n agent?: AgentManifest;\n}\n\n/**\n * Fixed `timestamp` for every manifest that can reach build output.\n *\n * Manifests are inlined into bundles (`registerPackageManifest(JSON.parse(...))`),\n * so a wall-clock value changes the emitted bytes on every build. That changes\n * Vite's content hash, which changes `dist/`, which invalidates every\n * downstream package through `dependsOn: ['^build']` — one rebuilt package\n * churned 202 of 245 task hashes, and `typecheck` never reused a cache entry\n * across runs (#2223).\n *\n * Nothing reads the field: `getManifestTimestampsHash` invalidates on\n * filesystem mtimes, and `normalizeManifestForHash` deletes it before\n * comparing. A fixed value therefore costs no information.\n *\n * Genuine runtime caches that expire on elapsed time — the discovery cache in\n * `manifest/discover-smrt-packages.ts` — keep using the clock; they never\n * reach build output.\n */\nexport const MANIFEST_TIMESTAMP = 0;\n\n/**\n * Fixed `generatedAt` for knowledge artifacts emitted into `dist/`.\n *\n * Same reasoning as {@link MANIFEST_TIMESTAMP}: build output is compared\n * byte-for-byte, so it cannot carry the clock. The Unix epoch is used rather\n * than `0` because the field is an ISO-8601 string, and a parseable value\n * keeps any consumer that formats it working.\n *\n * The working copy under `.smrt/` keeps a real timestamp — it is useful to a\n * human there, and `preserveKnowledgeGeneratedAt` already stops it churning\n * across incremental rebuilds.\n */\nexport const DETERMINISTIC_GENERATED_AT = '1970-01-01T00:00:00.000Z';\n\nexport interface SmartObjectManifest {\n version: string;\n /** Always {@link MANIFEST_TIMESTAMP} for build-output manifests. */\n timestamp: number;\n packageName?: string; // Root package name (should be set for all new manifests)\n packageVersion?: string; // Root package version\n /**\n * Objects keyed by qualified name (e.g., \"@happyvertical/smrt-core:Product\")\n * Key is string for backward compatibility, but should be QualifiedClassName format.\n */\n objects: Record<string, SmartObjectDefinition>;\n moduleType?: string; // Module type identifier (e.g., \"smrt\") for package discovery\n smrtDependencies?: string[]; // Discovered SMRT packages from dependency tree\n}\n\nexport interface ScanResult {\n filePath: string;\n objects: SmartObjectDefinition[];\n errors: Array<{\n message: string;\n line?: number;\n column?: number;\n }>;\n}\n\nexport interface ScanOptions {\n includePrivateMethods?: boolean;\n includeStaticMethods?: boolean;\n followImports?: boolean;\n baseClasses?: string[]; // Classes to consider as SMRT base classes\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAodA,IAAa,qBAAqB;;;;;;;;;;;;;AAclC,IAAa,6BAA6B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/schema/code-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/schema/code-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAIV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,gBAAgB,GACvB,MAAM;IAOT;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IASrE;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IAe1E;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACxC,MAAM;CAuBV"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "../scanner/types.js";
|
|
1
2
|
//#region src/schema/code-generator.ts
|
|
2
3
|
var SchemaCodeGenerator = class {
|
|
3
4
|
/**
|
|
@@ -104,7 +105,7 @@ ${foreignKeys.map((fk) => JSON.stringify(fk, null, 4).replace(/^/gm, " ")).jo
|
|
|
104
105
|
generateManifest(packageName, schemas) {
|
|
105
106
|
const manifest = {
|
|
106
107
|
version: "1.0.0",
|
|
107
|
-
timestamp:
|
|
108
|
+
timestamp: 0,
|
|
108
109
|
packageName,
|
|
109
110
|
schemas: Object.fromEntries(Object.entries(schemas).map(([className, schema]) => [className, {
|
|
110
111
|
tableName: schema.tableName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-generator.js","names":[],"sources":["../../src/schema/code-generator.ts"],"sourcesContent":["/**\n * Code generator for SMRT schema methods\n * Generates getSchema() static methods for SMRT objects\n */\n\nimport type { SmartObjectDefinition } from '../scanner/types.js';\nimport type {\n ColumnDefinition,\n ForeignKeyDefinition,\n IndexDefinition,\n SchemaDefinition,\n TriggerDefinition,\n} from './types.js';\n\nexport class SchemaCodeGenerator {\n /**\n * Generate getSchema() method source code\n */\n generateSchemaMethod(\n _objectDef: SmartObjectDefinition,\n schema: SchemaDefinition,\n ): string {\n const imports = this.generateImports();\n const method = this.generateMethod(schema);\n\n return `${imports}\\n\\n${method}`;\n }\n\n /**\n * Generate complete schema file with all methods\n */\n generateSchemaFile(schemas: Record<string, SchemaDefinition>): string {\n const imports = this.generateImports();\n const methods = Object.entries(schemas)\n .map(([className, schema]) => this.generateClassMethod(className, schema))\n .join('\\n\\n');\n\n return `${imports}\\n\\n${methods}`;\n }\n\n /**\n * Generate import statements\n */\n private generateImports(): string {\n return `import type { SchemaDefinition } from '@happyvertical/smrt-core';`;\n }\n\n /**\n * Generate getSchema method for a specific class\n */\n private generateClassMethod(\n className: string,\n schema: SchemaDefinition,\n ): string {\n const methodBody = this.generateSchemaObject(schema);\n\n return `export class ${className}Schema {\n static getSchema(): SchemaDefinition {\n return ${methodBody};\n }\n}`;\n }\n\n /**\n * Generate standalone getSchema method\n */\n private generateMethod(schema: SchemaDefinition): string {\n const methodBody = this.generateSchemaObject(schema);\n\n return `static getSchema(): SchemaDefinition {\n return ${methodBody};\n}`;\n }\n\n /**\n * Generate schema object definition\n */\n private generateSchemaObject(schema: SchemaDefinition): string {\n return `{\n tableName: ${JSON.stringify(schema.tableName)},\n columns: ${this.generateColumns(schema.columns)},\n indexes: ${this.generateIndexes(schema.indexes)},\n triggers: ${this.generateTriggers(schema.triggers)},\n foreignKeys: ${this.generateForeignKeys(schema.foreignKeys)},\n dependencies: ${JSON.stringify(schema.dependencies)},\n version: ${JSON.stringify(schema.version)},\n packageName: ${JSON.stringify(schema.packageName)},\n baseClass: ${JSON.stringify(schema.baseClass)},\n }`;\n }\n\n /**\n * Generate columns object\n */\n private generateColumns(columns: Record<string, ColumnDefinition>): string {\n const entries = Object.entries(columns).map(([name, def]) => {\n const defStr = JSON.stringify(def, null, 6).replace(/^/gm, ' ');\n return ` ${JSON.stringify(name)}: ${defStr}`;\n });\n\n return `{\n${entries.join(',\\n')}\n }`;\n }\n\n /**\n * Generate indexes array\n */\n private generateIndexes(indexes: IndexDefinition[]): string {\n if (indexes.length === 0) return '[]';\n\n const indexStrings = indexes.map((idx) =>\n JSON.stringify(idx, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${indexStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate triggers array\n */\n private generateTriggers(triggers: TriggerDefinition[]): string {\n if (triggers.length === 0) return '[]';\n\n const triggerStrings = triggers.map((trigger) =>\n JSON.stringify(trigger, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${triggerStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate foreign keys array\n */\n private generateForeignKeys(foreignKeys: ForeignKeyDefinition[]): string {\n if (foreignKeys.length === 0) return '[]';\n\n const fkStrings = foreignKeys.map((fk) =>\n JSON.stringify(fk, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${fkStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate TypeScript type definition file\n */\n generateTypeDefinitions(schemas: Record<string, SchemaDefinition>): string {\n const imports = `import type { SchemaDefinition } from '@happyvertical/smrt-core/schema';`;\n\n const interfaces = Object.keys(schemas)\n .map(\n (className) =>\n `export interface ${className}Schema {\n getSchema(): SchemaDefinition;\n}`,\n )\n .join('\\n\\n');\n\n return `${imports}\\n\\n${interfaces}`;\n }\n\n /**\n * Generate schema manifest file\n */\n generateManifest(\n packageName: string,\n schemas: Record<string, SchemaDefinition>,\n ): string {\n const manifest = {\n version: '1.0.0',\n timestamp:
|
|
1
|
+
{"version":3,"file":"code-generator.js","names":[],"sources":["../../src/schema/code-generator.ts"],"sourcesContent":["/**\n * Code generator for SMRT schema methods\n * Generates getSchema() static methods for SMRT objects\n */\n\nimport type { SmartObjectDefinition } from '../scanner/types.js';\nimport { MANIFEST_TIMESTAMP } from '../scanner/types.js';\nimport type {\n ColumnDefinition,\n ForeignKeyDefinition,\n IndexDefinition,\n SchemaDefinition,\n TriggerDefinition,\n} from './types.js';\n\nexport class SchemaCodeGenerator {\n /**\n * Generate getSchema() method source code\n */\n generateSchemaMethod(\n _objectDef: SmartObjectDefinition,\n schema: SchemaDefinition,\n ): string {\n const imports = this.generateImports();\n const method = this.generateMethod(schema);\n\n return `${imports}\\n\\n${method}`;\n }\n\n /**\n * Generate complete schema file with all methods\n */\n generateSchemaFile(schemas: Record<string, SchemaDefinition>): string {\n const imports = this.generateImports();\n const methods = Object.entries(schemas)\n .map(([className, schema]) => this.generateClassMethod(className, schema))\n .join('\\n\\n');\n\n return `${imports}\\n\\n${methods}`;\n }\n\n /**\n * Generate import statements\n */\n private generateImports(): string {\n return `import type { SchemaDefinition } from '@happyvertical/smrt-core';`;\n }\n\n /**\n * Generate getSchema method for a specific class\n */\n private generateClassMethod(\n className: string,\n schema: SchemaDefinition,\n ): string {\n const methodBody = this.generateSchemaObject(schema);\n\n return `export class ${className}Schema {\n static getSchema(): SchemaDefinition {\n return ${methodBody};\n }\n}`;\n }\n\n /**\n * Generate standalone getSchema method\n */\n private generateMethod(schema: SchemaDefinition): string {\n const methodBody = this.generateSchemaObject(schema);\n\n return `static getSchema(): SchemaDefinition {\n return ${methodBody};\n}`;\n }\n\n /**\n * Generate schema object definition\n */\n private generateSchemaObject(schema: SchemaDefinition): string {\n return `{\n tableName: ${JSON.stringify(schema.tableName)},\n columns: ${this.generateColumns(schema.columns)},\n indexes: ${this.generateIndexes(schema.indexes)},\n triggers: ${this.generateTriggers(schema.triggers)},\n foreignKeys: ${this.generateForeignKeys(schema.foreignKeys)},\n dependencies: ${JSON.stringify(schema.dependencies)},\n version: ${JSON.stringify(schema.version)},\n packageName: ${JSON.stringify(schema.packageName)},\n baseClass: ${JSON.stringify(schema.baseClass)},\n }`;\n }\n\n /**\n * Generate columns object\n */\n private generateColumns(columns: Record<string, ColumnDefinition>): string {\n const entries = Object.entries(columns).map(([name, def]) => {\n const defStr = JSON.stringify(def, null, 6).replace(/^/gm, ' ');\n return ` ${JSON.stringify(name)}: ${defStr}`;\n });\n\n return `{\n${entries.join(',\\n')}\n }`;\n }\n\n /**\n * Generate indexes array\n */\n private generateIndexes(indexes: IndexDefinition[]): string {\n if (indexes.length === 0) return '[]';\n\n const indexStrings = indexes.map((idx) =>\n JSON.stringify(idx, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${indexStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate triggers array\n */\n private generateTriggers(triggers: TriggerDefinition[]): string {\n if (triggers.length === 0) return '[]';\n\n const triggerStrings = triggers.map((trigger) =>\n JSON.stringify(trigger, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${triggerStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate foreign keys array\n */\n private generateForeignKeys(foreignKeys: ForeignKeyDefinition[]): string {\n if (foreignKeys.length === 0) return '[]';\n\n const fkStrings = foreignKeys.map((fk) =>\n JSON.stringify(fk, null, 4).replace(/^/gm, ' '),\n );\n\n return `[\n${fkStrings.join(',\\n')}\n ]`;\n }\n\n /**\n * Generate TypeScript type definition file\n */\n generateTypeDefinitions(schemas: Record<string, SchemaDefinition>): string {\n const imports = `import type { SchemaDefinition } from '@happyvertical/smrt-core/schema';`;\n\n const interfaces = Object.keys(schemas)\n .map(\n (className) =>\n `export interface ${className}Schema {\n getSchema(): SchemaDefinition;\n}`,\n )\n .join('\\n\\n');\n\n return `${imports}\\n\\n${interfaces}`;\n }\n\n /**\n * Generate schema manifest file\n */\n generateManifest(\n packageName: string,\n schemas: Record<string, SchemaDefinition>,\n ): string {\n const manifest = {\n version: '1.0.0',\n timestamp: MANIFEST_TIMESTAMP,\n packageName,\n schemas: Object.fromEntries(\n Object.entries(schemas).map(([className, schema]) => [\n className,\n {\n tableName: schema.tableName,\n version: schema.version,\n dependencies: schema.dependencies,\n packageName: schema.packageName,\n },\n ]),\n ),\n dependencies: Array.from(\n new Set(Object.values(schemas).flatMap((s) => s.dependencies)),\n ),\n };\n\n return `export default ${JSON.stringify(manifest, null, 2)};`;\n }\n}\n"],"mappings":"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"}
|
|
@@ -83,8 +83,16 @@ async function generateManifest() {
|
|
|
83
83
|
process.cwd(),
|
|
84
84
|
'src/manifest/smrt-knowledge.json',
|
|
85
85
|
);
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
// src/manifest/smrt-knowledge.json is gitignored build output that the
|
|
87
|
+
// package build copies verbatim to dist/smrt-knowledge.json, so it must
|
|
88
|
+
// not carry the clock: a fresh checkout has no previous file for
|
|
89
|
+
// preserveGeneratedAtIfUnchanged to carry a value forward from, and
|
|
90
|
+
// every build would emit different bytes (#2232). Mirrors
|
|
91
|
+
// DETERMINISTIC_GENERATED_AT in src/scanner/types.ts, duplicated as a
|
|
92
|
+
// literal because this script runs before core is built.
|
|
93
|
+
const DeterministicGeneratedAt = '1970-01-01T00:00:00.000Z';
|
|
94
|
+
const knowledge = withDeterministicGeneratedAt(
|
|
95
|
+
DeterministicGeneratedAt,
|
|
88
96
|
buildDomainKnowledgeManifest({
|
|
89
97
|
manifest,
|
|
90
98
|
rootDir: process.cwd(),
|
|
@@ -111,6 +119,10 @@ if (import.meta.url === `file://${process.argv[1]}`) {
|
|
|
111
119
|
generateManifest();
|
|
112
120
|
}
|
|
113
121
|
|
|
122
|
+
function withDeterministicGeneratedAt(generatedAt, nextKnowledge) {
|
|
123
|
+
return { ...nextKnowledge, generatedAt };
|
|
124
|
+
}
|
|
125
|
+
|
|
114
126
|
function preserveGeneratedAtIfUnchanged(path, nextKnowledge) {
|
|
115
127
|
if (!existsSync(path)) {
|
|
116
128
|
return nextKnowledge;
|
package/dist/smrt-knowledge.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "
|
|
3
|
+
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
4
4
|
"packageName": "@happyvertical/smrt-core",
|
|
5
|
-
"packageVersion": "0.40.
|
|
5
|
+
"packageVersion": "0.40.56",
|
|
6
6
|
"sourceManifestPath": "dist/manifest.json",
|
|
7
7
|
"agentDocPath": "AGENTS.md",
|
|
8
8
|
"sourceHashes": {
|
|
9
|
-
"manifest": "
|
|
10
|
-
"packageJson": "
|
|
9
|
+
"manifest": "15ef7419424a2c46b41404534f64397c85f08d7f14679a09796cb5f4f403bdc5",
|
|
10
|
+
"packageJson": "63edb51a79270a0ae2c431a707fd0de754265ae53adecd1226a5910334a377fa",
|
|
11
11
|
"agents": "ab30f2e4beb8d45e210d596794be5e7d93c99c21a517876f09d08d9a3b5f13df",
|
|
12
12
|
"moduleDoc:agents/change-feed.md": "5278797d6c049ea21071b011182a9fcd79d17f9d74e0f90a93caa4c05c25294f",
|
|
13
13
|
"moduleDoc:agents/change-signals.md": "d9cb6a5541728ffea46607a6b1d4fa61d4621849f2b4ea86a0645fbb0af892e9",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DomainKnowledgeConfig } from '@happyvertical/smrt-types';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
|
-
import { SmartObjectManifest } from '../scanner/types';
|
|
3
|
+
import { SmartObjectManifest } from '../scanner/types.js';
|
|
4
4
|
export type { CliApiCoherenceViolation, SvelteKitOptions, } from './sveltekit-generator.js';
|
|
5
5
|
export { findCliApiCoherenceViolations, generateSvelteKitRoutes, methodNameToKebab, resolveApiActionRouteConfig, resolveApiActionSet, validateCliIncludeAgainstApi, } from './sveltekit-generator.js';
|
|
6
6
|
export interface SmrtPluginOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAiC,MAAM,MAAM,CAAC;AAGlE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAiC,MAAM,MAAM,CAAC;AAGlE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AA2B7B,YAAY,EACV,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAalC,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE;QACV,yDAAyD;QACzD,OAAO,EAAE,OAAO,CAAC;QACjB,wEAAwE;QACxE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,qEAAqE;QACrE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mEAAmE;QACnE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mDAAmD;QACnD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;;;WAIG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB;;;WAGG;QACH,YAAY,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QACrC;;;;WAIG;QACH,WAAW,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,cAAc,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9D,CAAC;IACF,mEAAmE;IACnE,SAAS,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IAC1C;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AA+BD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,CAaR;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAo7BlE;AAwTD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,MAAM,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmZf"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DETERMINISTIC_GENERATED_AT } from "../scanner/types.js";
|
|
1
2
|
import { findCliApiCoherenceViolations, generateSvelteKitRoutes, methodNameToKebab, resolveApiActionRouteConfig, resolveApiActionSet, validateCliIncludeAgainstApi } from "./sveltekit-generator.js";
|
|
2
3
|
import { buildWebCollectionDefinition, buildWebToolDescriptors, computeWebManifestHash, selectWebCollectionEntries } from "./web-collections.js";
|
|
3
4
|
import { buildDomainKnowledgeManifest } from "../knowledge.js";
|
|
@@ -126,7 +127,16 @@ function smrtPlugin(options = {}) {
|
|
|
126
127
|
console.error("[smrt] Error writing local manifest:", error);
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
|
-
|
|
130
|
+
/**
|
|
131
|
+
* @param deterministic - Emit a fixed `generatedAt` instead of the clock.
|
|
132
|
+
* Set for artifacts written into the build output directory: `dist/` is
|
|
133
|
+
* compared byte-for-byte by downstream caches, and a fresh checkout has no
|
|
134
|
+
* previous file for {@link preserveKnowledgeGeneratedAt} to carry a value
|
|
135
|
+
* forward from, so every build would otherwise emit different bytes
|
|
136
|
+
* (#2223). The working copy under `.smrt/` keeps a real timestamp, which
|
|
137
|
+
* is where it is useful to a human and where preservation already works.
|
|
138
|
+
*/
|
|
139
|
+
async function writeDomainKnowledgeArtifact(m, rootDir, outputPath, manifestPath, deterministic = false) {
|
|
130
140
|
const resolvedKnowledge = await resolveKnowledgeConfig(rootDir, m);
|
|
131
141
|
if (resolvedKnowledge.enabled === false) return;
|
|
132
142
|
const { mkdirSync, writeFileSync } = await import("node:fs");
|
|
@@ -138,7 +148,11 @@ function smrtPlugin(options = {}) {
|
|
|
138
148
|
manifestPath,
|
|
139
149
|
config: resolvedKnowledge
|
|
140
150
|
});
|
|
141
|
-
|
|
151
|
+
const emitted = deterministic ? {
|
|
152
|
+
...artifact,
|
|
153
|
+
generatedAt: DETERMINISTIC_GENERATED_AT
|
|
154
|
+
} : preserveKnowledgeGeneratedAt(outputPath, artifact);
|
|
155
|
+
writeFileSync(outputPath, JSON.stringify(emitted, null, 2), "utf-8");
|
|
142
156
|
}
|
|
143
157
|
async function resolveKnowledgeConfig(rootDir, m) {
|
|
144
158
|
if (knowledge === false) return { enabled: false };
|
|
@@ -447,7 +461,7 @@ function smrtPlugin(options = {}) {
|
|
|
447
461
|
const knowledgePath = resolve(projectRoot, outDir, "smrt-knowledge.json");
|
|
448
462
|
mkdirSync(dirname(manifestPath), { recursive: true });
|
|
449
463
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
|
|
450
|
-
await writeDomainKnowledgeArtifact(manifest, projectRoot, knowledgePath, manifestPath);
|
|
464
|
+
await writeDomainKnowledgeArtifact(manifest, projectRoot, knowledgePath, manifestPath, true);
|
|
451
465
|
const objectCount = Object.keys(manifest.objects).length;
|
|
452
466
|
console.log(`[smrt] Wrote manifest with ${objectCount} objects to ${manifestPath}`);
|
|
453
467
|
} catch (error) {
|
|
@@ -1313,7 +1327,7 @@ async function generateSchemaModule(manifest) {
|
|
|
1313
1327
|
for (const [className, objectDef] of Object.entries(manifest.objects)) schemas[className] = schemaGenerator.generateSchema(objectDef);
|
|
1314
1328
|
const schemaManifest = {
|
|
1315
1329
|
version: "1.0.0",
|
|
1316
|
-
timestamp:
|
|
1330
|
+
timestamp: 0,
|
|
1317
1331
|
packageName: manifest.packageName || "unknown",
|
|
1318
1332
|
schemas,
|
|
1319
1333
|
dependencies: Array.from(new Set(Object.values(schemas).flatMap((s) => s.dependencies || [])))
|