@happyvertical/smrt-core 0.51.25 → 0.51.26
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 +14 -5
- package/dist/manifest/manifest-loader.d.ts +37 -0
- package/dist/manifest/manifest-loader.d.ts.map +1 -1
- package/dist/manifest/manifest-loader.js +45 -14
- package/dist/manifest/manifest-loader.js.map +1 -1
- package/dist/manifest/static-manifest.js +1 -1
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/registry/__tests__/helpers/consumer-workspace.d.ts +42 -0
- package/dist/registry/__tests__/helpers/consumer-workspace.d.ts.map +1 -0
- package/dist/registry/class-registration.d.ts +15 -0
- package/dist/registry/class-registration.d.ts.map +1 -1
- package/dist/registry/class-registration.js +129 -19
- package/dist/registry/class-registration.js.map +1 -1
- package/dist/registry/collection-resolution.d.ts +8 -2
- package/dist/registry/collection-resolution.d.ts.map +1 -1
- package/dist/registry/collection-resolution.js +12 -2
- package/dist/registry/collection-resolution.js.map +1 -1
- package/dist/registry/collision-policy.d.ts +10 -0
- package/dist/registry/collision-policy.d.ts.map +1 -1
- package/dist/registry/collision-policy.js +7 -1
- package/dist/registry/collision-policy.js.map +1 -1
- package/dist/registry/shared-state.d.ts.map +1 -1
- package/dist/registry/shared-state.js +3 -4
- package/dist/registry/shared-state.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +16 -3
- package/dist/registry.js.map +1 -1
- package/dist/smrt-knowledge.json +5 -5
- package/dist/utils/stack-frames.d.ts +19 -0
- package/dist/utils/stack-frames.d.ts.map +1 -1
- package/dist/utils/stack-frames.js +59 -1
- package/dist/utils/stack-frames.js.map +1 -1
- package/package.json +4 -4
package/dist/smrt-knowledge.json
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sensitiveFieldsExcluded": true,
|
|
4
4
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
5
5
|
"packageName": "@happyvertical/smrt-core",
|
|
6
|
-
"packageVersion": "0.51.
|
|
6
|
+
"packageVersion": "0.51.26",
|
|
7
7
|
"sourceManifestPath": "dist/manifest.json",
|
|
8
8
|
"agentDocPath": "AGENTS.md",
|
|
9
9
|
"sourceHashes": {
|
|
10
|
-
"manifest": "
|
|
11
|
-
"packageJson": "
|
|
12
|
-
"agents": "
|
|
10
|
+
"manifest": "ee15e86f1022b8e9e6afe4b27e8c72df3aeb2c44f22b141cbffeebc9104f420d",
|
|
11
|
+
"packageJson": "af171c2738aab9a14a2b84605e01995229dc8a5cb06b72b856ba68cfb9cdaf0a",
|
|
12
|
+
"agents": "1efb8ea1972b5aeb847cc857d464c9a4f50bbf6116a05db2bc8e33126c91a6c7",
|
|
13
13
|
"moduleDoc:agents/object-runtime.md": "34a4e740c109467cd5486c4af0e3bf4b63915697721ab584df0e5506ea9290ca",
|
|
14
14
|
"moduleDoc:agents/revision-guard.md": "aa6b1ddb5b6b49fa27ebbe575ec7fcd6d5ceb35ee25acc702f877a226eb9a99a",
|
|
15
15
|
"moduleDoc:agents/collection-reads.md": "e5bb79b59c17e79a85a71580a019e6b0b641e498ac4d850073fd5ad634b57cb7",
|
|
@@ -1047,7 +1047,7 @@
|
|
|
1047
1047
|
"polymorphicAssociations": 1,
|
|
1048
1048
|
"uuidColumns": 3
|
|
1049
1049
|
},
|
|
1050
|
-
"agentDoc": "# @happyvertical/smrt-core\n\nFoundation ORM, registry, schema/code generation, AI integration, and DispatchBus.\nRead the module for the subsystem being edited; root AGENTS covers shared model\nand repository rules.\n\n## Modules\n\n| Source | Scope | Module doc |\n|---|---|---|\n| `src/object.ts`, `src/collection.ts`, `src/child-accessors.ts` | Lifecycle, hydration, operators, STI, child accessors, dispatch | [agents/object-runtime.md](agents/object-runtime.md) |\n| `src/revision-guard.ts` | Guarded writes and PostgreSQL revision precision | [agents/revision-guard.md](agents/revision-guard.md) |\n| `src/collection.ts` | Projections, latest-related, facets, counts, read plans | [agents/collection-reads.md](agents/collection-reads.md) |\n| `src/collection.ts` | Limits, sort whitelist, generated list order | [agents/query-bounds.md](agents/query-bounds.md) |\n| `src/data-query.ts` | Transport-neutral bounded query normalization | [agents/data-query.md](agents/data-query.md) |\n| `src/schema/`, `src/migrations/`, `src/cascade.ts`, `src/system/` | DDL parity, indexes, migrations, delete integrity, retention | [agents/schema-paths.md](agents/schema-paths.md) |\n| `src/postgres-permissions.ts` | Explicit PostgreSQL ACL plans and atomic reconciliation | [deployment permission contract](../../docs/content/postgres-permissions.md) |\n| `src/change-feed.ts` | Durable changes, cursors, table versions, retention | [agents/change-feed.md](agents/change-feed.md) |\n| `src/change-signals.ts` | Signal bus, replica fan-out, SSE | [agents/change-signals.md](agents/change-signals.md) |\n| `src/generators/`, `src/vite-plugin/web-collections.ts` | REST/CLI/MCP generation, manifest hashes, ETags | [agents/generators.md](agents/generators.md) |\n| `src/vite-plugin/`, `src/consumer-plugin/`, `src/knowledge.ts` | Decorator UI hints, knowledge projection, generation snapshots | [agents/build-knowledge.md](agents/build-knowledge.md) |\n| `src/knowledge-graph.ts` | Cross-package knowledge graph merge and freshness check (#2863) — see [standards](../../docs/content/standards.md) | — |\n| `src/object.ts`, `src/collection.ts`, `src/learning/memory.ts` | Context memory and semantic search | [agents/memory.md](agents/memory.md) |\n| `src/system/diagnostics.ts` | SELECT-only `_smrt_*` diagnostics reader behind smrt-dev-mcp runtime tools (#1824) | [agents/system-diagnostics.md](agents/system-diagnostics.md) |\n| `src/system/registry-snapshot.ts` | Sanitized plain-JSON projection of the booted `ObjectRegistry` for the smrt-dev-mcp runtime dev-plane (#1831); never constructors, validators, values, or absolute paths | [agents/registry-snapshot.md](agents/registry-snapshot.md) |\n\n## Cross-module invariants\n\n- `ObjectRegistry` is a `globalThis` singleton so registration survives HMR.\n- Per-class registry work on the hydration path (manifest reconciliation in\n `ensureManifestLoaded()`, the simple-name index behind `findClass()`) is\n memoized per registry generation (`src/registry/generation.ts`, #3047). Any\n new writer of registered classes, their field/method metadata, or loaded\n manifests must go through the tracked maps or call\n `bumpRegistryGeneration()`; `issue-3047-hydration-registry-work.test.ts`\n guards that hydration does not repeat this work per row.\n\n- Production DDL uses manifest generators; `getTestDatabase()` uses registry\n generators. Keep columns, indexes, FK actions, and runtime conflict targets in\n parity (`src/schema/schema-path-parity.test.ts`). Every new query predicate\n needs its index or an explicit reason none is needed.\n- Tenant scoping covers every read and every unique/conflict key. Explicit\n conflict columns are not rewritten; their author must include tenant scope.\n- Persisted saves use `id` and loaded `updated_at`; new saves use natural keys.\n Preserve revision compare-and-swap ordering through public `save()`,\n `claimRevision()`, and transaction APIs. Embedded saves, deletes, and complete\n `withTransaction()` callbacks share a process-local write queue.\n- Collection model hydration is serial in result order: initialization may query\n the same transaction-bound PostgreSQL client. Use projections for plain rows.\n- Native DuckDB UUIDs must be cast coherently on read before identity reuse;\n custom embedded revision paths use `getCanonicalPersistedRow()`. Never replay\n a mutation to discover result types.\n- `withDatabase(db, callback)` restores only database bindings (including public\n `options.db`); `withTransaction(callback)` also restores identity/revision\n metadata after rollback. Do not use a bound instance concurrently.\n- `ensureSystemTables(db, typeHint?)` provisions framework tables idempotently;\n call it on a base PostgreSQL connection before caller-owned transactions.\n Bootstrap uses a transaction-scoped advisory lock, taken only when the\n PostgreSQL schema version is not yet stamped: inside a caller's transaction it\n is held until that transaction ends (#2868). Application tables still require migrations;\n runtime table verification checks existence only.\n- Manifest generation fails closed on scanner errors, including unresolved\n decorator spreads. Never emit partial, default-open registration.\n- Generated registration repairs bundled class identity using the exact imported\n constructor, explicit package, and isolated one-object manifest. Never infer\n ownership from paths, simple names, or table names; packages can share names.\n Consumer regression gate: `packages/bundle-gate/src/__tests__/registry-identity.spec.ts`.\n- Decorator registration trusts a class's stack-derived package only when that\n package declares the class (stub, own manifest entry, or explicit\n `packageName`); it then matches the qualified key and never adopts another\n package's same-named registration. Stack attribution skips smrt-core,\n decorator-helper, and module-runner frames. Instance and collection registry\n lookups pass the qualified name. The schema planner rejects a table claimed\n by two unrelated classes (`CONFIG_TABLE_NAME_COLLISION`): only one STI family\n shares a table (#3098).\n- API custom-action eligibility has ONE resolver, `resolveApiMethodExposure()`\n in `generators/custom-action.ts`: both SvelteKit route emitters,\n `resolveApiActionSet`, and `knowledge.ts` read it, and a new consumer must too\n — a local mirror is how a method gets reported unavailable while its route\n file is still written. A public method routes by default only when every\n parameter is JSON-shaped; `@method({ expose })` overrides in both directions,\n `expose: true` bypasses the heuristic ALONE, and an explicit `api.include` or\n `api.routes` entry keeps its pre-#2686 route. Fail closed on scanner\n uncertainty: read `parameters[].typeUnresolved`, never the `'any'` it\n substitutes. Accepting `Date` as wire-able and hydrating it\n (`toCustomActionDate`) are one decision — changing either breaks the other.\n The runtime `APIGenerator` transport stays declaration-gated: `rest.ts`\n dispatch and `preflight-route.ts` prediction both read\n `declaresRuntimeRestRoute()`, which must accept every `ApiCustomRouteConfig`\n option so a sweep moving one onto its method cannot delete the endpoint. Its\n twin `declaresRuntimeRestRouteShape()` deliberately ignores `expose: false`:\n the dispatcher must still SEE a withheld declaration to answer 404, because\n `POST /<collection>/<segment>` resolves to `create` when nothing claims the\n segment. Split unions and type arguments with `splitTopLevel()` — a naive\n `split('|')` truncates `Record<string, Asset | null>` into fragments that\n match no rule and are then accepted, widening the gate. `extractTypeName`\n returns `null` for a generic with an unresolvable ARGUMENT or a union with an\n unresolvable BRANCH so those reach that fail-closed path instead of arriving\n as a bare `'Array'`. Runtime transports read\n `ObjectRegistry.resolveRuntimeMethod()`, which tries the item class's manifest\n entry, then the COLLECTION class's (where a collection-hosted action's\n parameters live), then the live `@method()` store — keyed by CONSTRUCTOR,\n never by simple name (`Account` exists in two packages), and recording\n `isStatic` because an unscanned runtime has no manifest to recover the\n receiver from. `isRestActionRoutable` ANDs \"declared\" with that receiver, so\n it never predicts `allow` for an action dispatch refuses. A declared action\n with no receiver is refused (501 collection-scoped, 404 item-scoped), never\n allowed to fall through into `create`. All eight consumers read the resolver,\n including `packages/smrt-workbench/src/discovery.ts`; it imports the\n `./generators/custom-action` LEAF subpath, not `./generators`, because that\n barrel value-re-exports `MCPGenerator` and so drags `@happyvertical/ai` and\n `@happyvertical/sql` into a build-time helper (2 modules vs 109). Keep\n `custom-action.ts` free of value imports outside `tools/tool-generator`.\n\n## Gotchas\n\n- Optional filesystem support stays lazy: use `createFilesystemAdapter()` in\n `src/filesystem-loader.ts`, not a static files-SDK import. Fully bundled apps\n import `@happyvertical/smrt-core/filesystem` at startup. Use\n `importOptionalDependency()` for similarly heavy optional dependencies.\n- Database retries are transient-only, four attempts total for `get`/`upsert`.\n Use `src/db-errors.ts` classifiers through the cause chain, never message\n matching (SDK driver text can live in `context.originalError`). Constraints,\n bad input, missing tables, and aborted PostgreSQL transactions fail immediately.\n Unique/PK violations become `VALIDATION_UNIQUE_CONSTRAINT`, NOT NULL becomes\n `VALIDATION_REQUIRED_FIELD`; other failures keep the driver error as `cause`.\n- Property initializers precede option values; options win. Arrays/objects are\n shallow-cloned. Collection creation caches fields; table verification caches\n by DB URL and table. Preserve these scopes when changing initialization.\n- The Vite plugin loads scanner/schema code from `dist/` when present. Rebuild\n core after editing those sources before testing consumer manifest generation.\n Vite 8 requires `oxc.decorator: { legacy: true, emitDecoratorMetadata: true }`.\n\n## Validation\n\nRun focused tests first, then applicable package checks:\n\n```bash\npnpm --filter @happyvertical/smrt-core test\npnpm --filter @happyvertical/smrt-core typecheck\npnpm --filter @happyvertical/smrt-core build\npnpm --filter @happyvertical/smrt-core test:postgres\npnpm check:agents-chain\npnpm smrt dev:knowledge-check\n```\n\nThe PostgreSQL lane is required for numeric types, UUID casts, conflict targets,\ntimestamps, and migrations. Tests generate their manifest before Vitest; restart\nwatch mode after adding decorated classes. Documentation-only changes need\ninstruction-chain and knowledge freshness checks, not the runtime test suite.\n",
|
|
1050
|
+
"agentDoc": "# @happyvertical/smrt-core\n\nFoundation ORM, registry, schema/code generation, AI integration, and DispatchBus.\nRead the module for the subsystem being edited; root AGENTS covers shared model\nand repository rules.\n\n## Modules\n\n| Source | Scope | Module doc |\n|---|---|---|\n| `src/object.ts`, `src/collection.ts`, `src/child-accessors.ts` | Lifecycle, hydration, operators, STI, child accessors, dispatch | [agents/object-runtime.md](agents/object-runtime.md) |\n| `src/revision-guard.ts` | Guarded writes and PostgreSQL revision precision | [agents/revision-guard.md](agents/revision-guard.md) |\n| `src/collection.ts` | Projections, latest-related, facets, counts, read plans | [agents/collection-reads.md](agents/collection-reads.md) |\n| `src/collection.ts` | Limits, sort whitelist, generated list order | [agents/query-bounds.md](agents/query-bounds.md) |\n| `src/data-query.ts` | Transport-neutral bounded query normalization | [agents/data-query.md](agents/data-query.md) |\n| `src/schema/`, `src/migrations/`, `src/cascade.ts`, `src/system/` | DDL parity, indexes, migrations, delete integrity, retention | [agents/schema-paths.md](agents/schema-paths.md) |\n| `src/postgres-permissions.ts` | Explicit PostgreSQL ACL plans and atomic reconciliation | [deployment permission contract](../../docs/content/postgres-permissions.md) |\n| `src/change-feed.ts` | Durable changes, cursors, table versions, retention | [agents/change-feed.md](agents/change-feed.md) |\n| `src/change-signals.ts` | Signal bus, replica fan-out, SSE | [agents/change-signals.md](agents/change-signals.md) |\n| `src/generators/`, `src/vite-plugin/web-collections.ts` | REST/CLI/MCP generation, manifest hashes, ETags | [agents/generators.md](agents/generators.md) |\n| `src/vite-plugin/`, `src/consumer-plugin/`, `src/knowledge.ts` | Decorator UI hints, knowledge projection, generation snapshots | [agents/build-knowledge.md](agents/build-knowledge.md) |\n| `src/knowledge-graph.ts` | Cross-package knowledge graph merge and freshness check (#2863) — see [standards](../../docs/content/standards.md) | — |\n| `src/object.ts`, `src/collection.ts`, `src/learning/memory.ts` | Context memory and semantic search | [agents/memory.md](agents/memory.md) |\n| `src/system/diagnostics.ts` | SELECT-only `_smrt_*` diagnostics reader behind smrt-dev-mcp runtime tools (#1824) | [agents/system-diagnostics.md](agents/system-diagnostics.md) |\n| `src/system/registry-snapshot.ts` | Sanitized plain-JSON projection of the booted `ObjectRegistry` for the smrt-dev-mcp runtime dev-plane (#1831); never constructors, validators, values, or absolute paths | [agents/registry-snapshot.md](agents/registry-snapshot.md) |\n\n## Cross-module invariants\n\n- `ObjectRegistry` is a `globalThis` singleton so registration survives HMR.\n- Per-class registry work on the hydration path (manifest reconciliation in\n `ensureManifestLoaded()`, the simple-name index behind `findClass()`) is\n memoized per registry generation (`src/registry/generation.ts`, #3047). Any\n new writer of registered classes, their field/method metadata, or loaded\n manifests must go through the tracked maps or call\n `bumpRegistryGeneration()`; `issue-3047-hydration-registry-work.test.ts`\n guards that hydration does not repeat this work per row.\n\n- Production DDL uses manifest generators; `getTestDatabase()` uses registry\n generators. Keep columns, indexes, FK actions, and runtime conflict targets in\n parity (`src/schema/schema-path-parity.test.ts`). Every new query predicate\n needs its index or an explicit reason none is needed.\n- Tenant scoping covers every read and every unique/conflict key. Explicit\n conflict columns are not rewritten; their author must include tenant scope.\n- Persisted saves use `id` and loaded `updated_at`; new saves use natural keys.\n Preserve revision compare-and-swap ordering through public `save()`,\n `claimRevision()`, and transaction APIs. Embedded saves, deletes, and complete\n `withTransaction()` callbacks share a process-local write queue.\n- Collection model hydration is serial in result order: initialization may query\n the same transaction-bound PostgreSQL client. Use projections for plain rows.\n- Native DuckDB UUIDs must be cast coherently on read before identity reuse;\n custom embedded revision paths use `getCanonicalPersistedRow()`. Never replay\n a mutation to discover result types.\n- `withDatabase(db, callback)` restores only database bindings (including public\n `options.db`); `withTransaction(callback)` also restores identity/revision\n metadata after rollback. Do not use a bound instance concurrently.\n- `ensureSystemTables(db, typeHint?)` provisions framework tables idempotently;\n call it on a base PostgreSQL connection before caller-owned transactions.\n Bootstrap uses a transaction-scoped advisory lock, taken only when the\n PostgreSQL schema version is not yet stamped: inside a caller's transaction it\n is held until that transaction ends (#2868). Application tables still require migrations;\n runtime table verification checks existence only.\n- Manifest generation fails closed on scanner errors, including unresolved\n decorator spreads. Never emit partial, default-open registration.\n- Generated registration repairs bundled class identity using the exact imported\n constructor, explicit package, and isolated one-object manifest. Never infer\n ownership from paths, simple names, or table names; packages can share names.\n Consumer regression gate: `packages/bundle-gate/src/__tests__/registry-identity.spec.ts`.\n- Decorator registration trusts a class's stack-derived package only when that\n package declares the class (stub, own manifest entry, or explicit\n `packageName`); it then matches the qualified key and never adopts another\n package's same-named registration. Otherwise a loaded (or the cwd project's)\n manifest entry describing the declaring file supplies the identity — apps\n scan workspace-package sources under the app's name (#3110). A class of\n another known package coexists under its qualified key\n (`decorator-different-packages-qualified-coexist`); bundled output needs\n a resolved table that differs first (#3106). Stack\n attribution skips smrt-core (including source-mapped installed\n `smrt-core/src` frames, #3109), decorator-helper, and module-runner frames.\n Instance and collection registry lookups pass the qualified name. The schema\n planner rejects a table claimed by two unrelated classes\n (`CONFIG_TABLE_NAME_COLLISION`): only one STI family shares a table (#3098);\n collections (including `SmrtReportCollection`) never claim one. Consumer\n gates: `registry/__tests__/issue-3110-*.test.ts`, `issue-3109-*.test.ts`,\n `packages/bundle-gate/src/__tests__/consumer-same-name.spec.ts`.\n- API custom-action eligibility has ONE resolver, `resolveApiMethodExposure()`\n in `generators/custom-action.ts`: both SvelteKit route emitters,\n `resolveApiActionSet`, and `knowledge.ts` read it, and a new consumer must too\n — a local mirror is how a method gets reported unavailable while its route\n file is still written. A public method routes by default only when every\n parameter is JSON-shaped; `@method({ expose })` overrides in both directions,\n `expose: true` bypasses the heuristic ALONE, and an explicit `api.include` or\n `api.routes` entry keeps its pre-#2686 route. Fail closed on scanner\n uncertainty: read `parameters[].typeUnresolved`, never the `'any'` it\n substitutes. Accepting `Date` as wire-able and hydrating it\n (`toCustomActionDate`) are one decision — changing either breaks the other.\n The runtime `APIGenerator` transport stays declaration-gated: `rest.ts`\n dispatch and `preflight-route.ts` prediction both read\n `declaresRuntimeRestRoute()`, which must accept every `ApiCustomRouteConfig`\n option so a sweep moving one onto its method cannot delete the endpoint. Its\n twin `declaresRuntimeRestRouteShape()` deliberately ignores `expose: false`:\n the dispatcher must still SEE a withheld declaration to answer 404, because\n `POST /<collection>/<segment>` resolves to `create` when nothing claims the\n segment. Split unions and type arguments with `splitTopLevel()` — a naive\n `split('|')` truncates `Record<string, Asset | null>` into fragments that\n match no rule and are then accepted, widening the gate. `extractTypeName`\n returns `null` for a generic with an unresolvable ARGUMENT or a union with an\n unresolvable BRANCH so those reach that fail-closed path instead of arriving\n as a bare `'Array'`. Runtime transports read\n `ObjectRegistry.resolveRuntimeMethod()`, which tries the item class's manifest\n entry, then the COLLECTION class's (where a collection-hosted action's\n parameters live), then the live `@method()` store — keyed by CONSTRUCTOR,\n never by simple name (`Account` exists in two packages), and recording\n `isStatic` because an unscanned runtime has no manifest to recover the\n receiver from. `isRestActionRoutable` ANDs \"declared\" with that receiver, so\n it never predicts `allow` for an action dispatch refuses. A declared action\n with no receiver is refused (501 collection-scoped, 404 item-scoped), never\n allowed to fall through into `create`. All eight consumers read the resolver,\n including `packages/smrt-workbench/src/discovery.ts`; it imports the\n `./generators/custom-action` LEAF subpath, not `./generators`, because that\n barrel value-re-exports `MCPGenerator` and so drags `@happyvertical/ai` and\n `@happyvertical/sql` into a build-time helper (2 modules vs 109). Keep\n `custom-action.ts` free of value imports outside `tools/tool-generator`.\n\n## Gotchas\n\n- Optional filesystem support stays lazy: use `createFilesystemAdapter()` in\n `src/filesystem-loader.ts`, not a static files-SDK import. Fully bundled apps\n import `@happyvertical/smrt-core/filesystem` at startup. Use\n `importOptionalDependency()` for similarly heavy optional dependencies.\n- Database retries are transient-only, four attempts total for `get`/`upsert`.\n Use `src/db-errors.ts` classifiers through the cause chain, never message\n matching (SDK driver text can live in `context.originalError`). Constraints,\n bad input, missing tables, and aborted PostgreSQL transactions fail immediately.\n Unique/PK violations become `VALIDATION_UNIQUE_CONSTRAINT`, NOT NULL becomes\n `VALIDATION_REQUIRED_FIELD`; other failures keep the driver error as `cause`.\n- Property initializers precede option values; options win. Arrays/objects are\n shallow-cloned. Collection creation caches fields; table verification caches\n by DB URL and table. Preserve these scopes when changing initialization.\n- The Vite plugin loads scanner/schema code from `dist/` when present. Rebuild\n core after editing those sources before testing consumer manifest generation.\n Vite 8 requires `oxc.decorator: { legacy: true, emitDecoratorMetadata: true }`.\n\n## Validation\n\nRun focused tests first, then applicable package checks:\n\n```bash\npnpm --filter @happyvertical/smrt-core test\npnpm --filter @happyvertical/smrt-core typecheck\npnpm --filter @happyvertical/smrt-core build\npnpm --filter @happyvertical/smrt-core test:postgres\npnpm check:agents-chain\npnpm smrt dev:knowledge-check\n```\n\nThe PostgreSQL lane is required for numeric types, UUID casts, conflict targets,\ntimestamps, and migrations. Tests generate their manifest before Vitest; restart\nwatch mode after adding decorated classes. Documentation-only changes need\ninstruction-chain and knowledge freshness checks, not the runtime test suite.\n",
|
|
1051
1051
|
"moduleDocs": [
|
|
1052
1052
|
{
|
|
1053
1053
|
"path": "agents/object-runtime.md",
|
|
@@ -54,4 +54,23 @@ export declare function isModuleRunnerFramePath(path: string): boolean;
|
|
|
54
54
|
* @param name - A scoped package name, e.g. `@oxc-project/runtime`.
|
|
55
55
|
*/
|
|
56
56
|
export declare function isDecoratorRuntimePackageName(name: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether a stack-frame path is smrt-core's own code, which applies decorators
|
|
59
|
+
* but never declares an application class. Both stack walks (source-file
|
|
60
|
+
* identity in `registry/shared-state.ts` and package attribution in
|
|
61
|
+
* `manifest/manifest-loader.ts`) skip these frames.
|
|
62
|
+
*
|
|
63
|
+
* Matched by where core actually lives, never by a generic substring: a
|
|
64
|
+
* consumer's own `packages/core` workspace package (ergot's `@ergot/core`) or
|
|
65
|
+
* a file named like a core module declares classes too. That is this core's
|
|
66
|
+
* package directory (outside its `__tests__` fixtures) and any installed
|
|
67
|
+
* `node_modules/@happyvertical/smrt-core` copy. With source maps enabled —
|
|
68
|
+
* `tsx`, `node --enable-source-maps`, Vite SSR — an installed core's frames
|
|
69
|
+
* report mapped `.../node_modules/@happyvertical/smrt-core/src/...` paths;
|
|
70
|
+
* missing them attributed every class to `@happyvertical/smrt-core` (#3109,
|
|
71
|
+
* #3110).
|
|
72
|
+
*
|
|
73
|
+
* @param path - A file path from a stack frame (already normalized to `/`).
|
|
74
|
+
*/
|
|
75
|
+
export declare function isSmrtCoreFramePath(path: string): boolean;
|
|
57
76
|
//# sourceMappingURL=stack-frames.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-frames.d.ts","sourceRoot":"","sources":["../../src/utils/stack-frames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAKvD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjE;AAYD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnE"}
|
|
1
|
+
{"version":3,"file":"stack-frames.d.ts","sourceRoot":"","sources":["../../src/utils/stack-frames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAKvD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjE;AAYD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnE;AAqDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUzD"}
|
|
@@ -77,7 +77,65 @@ function isModuleRunnerFramePath(path) {
|
|
|
77
77
|
function isDecoratorRuntimePackageName(name) {
|
|
78
78
|
return DECORATOR_RUNTIME_PACKAGES.includes(name);
|
|
79
79
|
}
|
|
80
|
+
var smrtCoreRoot;
|
|
81
|
+
/**
|
|
82
|
+
* The directory of the smrt-core package this module belongs to (its
|
|
83
|
+
* `package.json` names `@happyvertical/smrt-core`), or `null` when it cannot
|
|
84
|
+
* be determined (a browser, or core inlined into a consumer's bundle).
|
|
85
|
+
* Resolved once from this module's own location, so it follows the monorepo
|
|
86
|
+
* checkout, a linked checkout, or an installed copy alike.
|
|
87
|
+
*/
|
|
88
|
+
function getSmrtCoreRoot() {
|
|
89
|
+
if (smrtCoreRoot !== void 0) return smrtCoreRoot;
|
|
90
|
+
smrtCoreRoot = null;
|
|
91
|
+
try {
|
|
92
|
+
const getBuiltinModule = globalThis.process?.getBuiltinModule;
|
|
93
|
+
const fs = getBuiltinModule?.("node:fs");
|
|
94
|
+
const path = getBuiltinModule?.("node:path");
|
|
95
|
+
const url = getBuiltinModule?.("node:url");
|
|
96
|
+
if (!fs || !path || !url || !import.meta.url.startsWith("file:")) return smrtCoreRoot;
|
|
97
|
+
let dir = path.dirname(url.fileURLToPath(import.meta.url));
|
|
98
|
+
for (let depth = 0; depth < 16; depth++) {
|
|
99
|
+
const manifest = path.join(dir, "package.json");
|
|
100
|
+
if (fs.existsSync(manifest) && JSON.parse(fs.readFileSync(manifest, "utf8")).name === "@happyvertical/smrt-core") {
|
|
101
|
+
smrtCoreRoot = dir.replace(/\\/g, "/");
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
const parent = path.dirname(dir);
|
|
105
|
+
if (parent === dir) break;
|
|
106
|
+
dir = parent;
|
|
107
|
+
}
|
|
108
|
+
} catch {
|
|
109
|
+
smrtCoreRoot = null;
|
|
110
|
+
}
|
|
111
|
+
return smrtCoreRoot;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Whether a stack-frame path is smrt-core's own code, which applies decorators
|
|
115
|
+
* but never declares an application class. Both stack walks (source-file
|
|
116
|
+
* identity in `registry/shared-state.ts` and package attribution in
|
|
117
|
+
* `manifest/manifest-loader.ts`) skip these frames.
|
|
118
|
+
*
|
|
119
|
+
* Matched by where core actually lives, never by a generic substring: a
|
|
120
|
+
* consumer's own `packages/core` workspace package (ergot's `@ergot/core`) or
|
|
121
|
+
* a file named like a core module declares classes too. That is this core's
|
|
122
|
+
* package directory (outside its `__tests__` fixtures) and any installed
|
|
123
|
+
* `node_modules/@happyvertical/smrt-core` copy. With source maps enabled —
|
|
124
|
+
* `tsx`, `node --enable-source-maps`, Vite SSR — an installed core's frames
|
|
125
|
+
* report mapped `.../node_modules/@happyvertical/smrt-core/src/...` paths;
|
|
126
|
+
* missing them attributed every class to `@happyvertical/smrt-core` (#3109,
|
|
127
|
+
* #3110).
|
|
128
|
+
*
|
|
129
|
+
* @param path - A file path from a stack frame (already normalized to `/`).
|
|
130
|
+
*/
|
|
131
|
+
function isSmrtCoreFramePath(path) {
|
|
132
|
+
const normalized = path.replace(/^file:\/\//, "").replace(/\\/g, "/");
|
|
133
|
+
if (normalized.toLowerCase().includes("/node_modules/@happyvertical/smrt-core/")) return true;
|
|
134
|
+
const root = getSmrtCoreRoot();
|
|
135
|
+
if (!root || !normalized.startsWith(`${root}/`)) return false;
|
|
136
|
+
return !normalized.slice(root.length + 1).includes("__tests__");
|
|
137
|
+
}
|
|
80
138
|
//#endregion
|
|
81
|
-
export { DECORATOR_RUNTIME_PACKAGES, isDecoratorRuntimeFramePath, isDecoratorRuntimePackageName, isModuleRunnerFramePath };
|
|
139
|
+
export { DECORATOR_RUNTIME_PACKAGES, isDecoratorRuntimeFramePath, isDecoratorRuntimePackageName, isModuleRunnerFramePath, isSmrtCoreFramePath };
|
|
82
140
|
|
|
83
141
|
//# sourceMappingURL=stack-frames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-frames.js","names":[],"sources":["../../src/utils/stack-frames.ts"],"sourcesContent":["/**\n * Decorator-runtime stack-frame detection (#1785).\n *\n * ObjectRegistry attributes a `@smrt()` class to its declaring package by\n * walking the registration call stack for the first frame OUTSIDE smrt-core —\n * the module that applied the decorator. Decorator *lowering* breaks that\n * assumption: the compiler inserts a runtime-helper frame between the `@smrt()`\n * decorator and the consumer module that declares the class.\n *\n * Under Vite 8, oxc's legacy-decorator lowering routes the decorator application\n * through `@oxc-project/runtime`'s helper (e.g.\n * `.../@oxc-project/runtime/src/helpers/esm/applyDecoratedDescriptor.js`), so a\n * naive walk stops at that frame and misattributes the class to\n * `@oxc-project/runtime` instead of the consumer package. `tslib` (tsc's\n * `__decorate`), `@swc/helpers`, and `@babel/runtime` insert the identical kind\n * of frame under their respective toolchains.\n *\n * These are pure plumbing packages — a class is applied THROUGH them, never\n * DECLARED in them — so both stack walks (source-file identity in\n * `registry/shared-state.ts` and package attribution in\n * `manifest/manifest-loader.ts`) skip them and continue to the real declaring\n * module. Kept as a leaf module (no smrt imports) so both walkers can share it\n * without risking an import cycle.\n */\n\n/**\n * Runtime-helper packages that decorator lowering routes the decorator\n * application through. Frames from these packages are never the module that\n * declares a decorated class.\n */\nexport const DECORATOR_RUNTIME_PACKAGES: readonly string[] = [\n '@oxc-project/runtime',\n '@swc/helpers',\n '@babel/runtime',\n 'tslib',\n];\n\n/**\n * Whether a file path (normalized to forward slashes) lives inside a\n * decorator-runtime helper package — i.e. a stack frame introduced by decorator\n * lowering rather than the module that declares the decorated class.\n *\n * Matches both the plain installed form (`.../node_modules/tslib/...`) and the\n * pnpm form (`.../node_modules/.pnpm/tslib@2/node_modules/tslib/...`) because\n * the real `/<package>/` segment appears in both. Case-insensitive.\n *\n * @param path - A file path from a stack frame (already normalized to `/`).\n */\nexport function isDecoratorRuntimeFramePath(path: string): boolean {\n const lower = path.toLowerCase();\n return DECORATOR_RUNTIME_PACKAGES.some(\n (pkg) =>\n lower.includes(`/${pkg}/`) ||\n // Vite serves the helper as a virtual module whose id flattens the\n // scope separator and appends the version, e.g.\n // `<root>/\\0@oxc-project+runtime@0.138.0/helpers/esm/decorate.js`.\n // Missing it attributed every class Vitest loads to the project root's\n // package (#3098).\n lower.includes(`\\0${pkg.replace('/', '+')}@`),\n );\n}\n\n/**\n * Module and test runners that evaluate a module and so appear below it on\n * the stack. Like decorator helpers, they never declare a class.\n */\nconst MODULE_RUNNER_PATH_SEGMENTS: readonly string[] = [\n '/node_modules/@vitest/',\n '/node_modules/vitest/',\n '/node_modules/vite/dist/node/module-runner',\n];\n\n/**\n * Whether a stack-frame path belongs to a module or test runner (Vitest, the\n * Vite module runner) rather than to code that could declare a class (#3098).\n *\n * @param path - A file path from a stack frame (already normalized to `/`).\n */\nexport function isModuleRunnerFramePath(path: string): boolean {\n const lower = path.toLowerCase();\n return MODULE_RUNNER_PATH_SEGMENTS.some((segment) => lower.includes(segment));\n}\n\n/**\n * Whether a scoped package name (as captured from a `node_modules/@scope/name`\n * stack match) is a decorator-runtime helper package.\n *\n * @param name - A scoped package name, e.g. `@oxc-project/runtime`.\n */\nexport function isDecoratorRuntimePackageName(name: string): boolean {\n return DECORATOR_RUNTIME_PACKAGES.includes(name);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAa,6BAAgD;CAC3D;CACA;CACA;CACA;AACF;;;;;;;;;;;;AAaA,SAAgB,4BAA4B,MAAuB;CACjE,MAAM,QAAQ,KAAK,YAAY;CAC/B,OAAO,2BAA2B,MAC/B,QACC,MAAM,SAAS,IAAI,IAAI,EAAE,KAMzB,MAAM,SAAS,KAAK,IAAI,QAAQ,KAAK,GAAG,EAAE,EAAE,CAChD;AACF;;;;;AAMA,IAAM,8BAAiD;CACrD;CACA;CACA;AACF;;;;;;;AAQA,SAAgB,wBAAwB,MAAuB;CAC7D,MAAM,QAAQ,KAAK,YAAY;CAC/B,OAAO,4BAA4B,MAAM,YAAY,MAAM,SAAS,OAAO,CAAC;AAC9E;;;;;;;AAQA,SAAgB,8BAA8B,MAAuB;CACnE,OAAO,2BAA2B,SAAS,IAAI;AACjD"}
|
|
1
|
+
{"version":3,"file":"stack-frames.js","names":[],"sources":["../../src/utils/stack-frames.ts"],"sourcesContent":["/**\n * Decorator-runtime stack-frame detection (#1785).\n *\n * ObjectRegistry attributes a `@smrt()` class to its declaring package by\n * walking the registration call stack for the first frame OUTSIDE smrt-core —\n * the module that applied the decorator. Decorator *lowering* breaks that\n * assumption: the compiler inserts a runtime-helper frame between the `@smrt()`\n * decorator and the consumer module that declares the class.\n *\n * Under Vite 8, oxc's legacy-decorator lowering routes the decorator application\n * through `@oxc-project/runtime`'s helper (e.g.\n * `.../@oxc-project/runtime/src/helpers/esm/applyDecoratedDescriptor.js`), so a\n * naive walk stops at that frame and misattributes the class to\n * `@oxc-project/runtime` instead of the consumer package. `tslib` (tsc's\n * `__decorate`), `@swc/helpers`, and `@babel/runtime` insert the identical kind\n * of frame under their respective toolchains.\n *\n * These are pure plumbing packages — a class is applied THROUGH them, never\n * DECLARED in them — so both stack walks (source-file identity in\n * `registry/shared-state.ts` and package attribution in\n * `manifest/manifest-loader.ts`) skip them and continue to the real declaring\n * module. Kept as a leaf module (no smrt imports) so both walkers can share it\n * without risking an import cycle.\n */\n\n/**\n * Runtime-helper packages that decorator lowering routes the decorator\n * application through. Frames from these packages are never the module that\n * declares a decorated class.\n */\nexport const DECORATOR_RUNTIME_PACKAGES: readonly string[] = [\n '@oxc-project/runtime',\n '@swc/helpers',\n '@babel/runtime',\n 'tslib',\n];\n\n/**\n * Whether a file path (normalized to forward slashes) lives inside a\n * decorator-runtime helper package — i.e. a stack frame introduced by decorator\n * lowering rather than the module that declares the decorated class.\n *\n * Matches both the plain installed form (`.../node_modules/tslib/...`) and the\n * pnpm form (`.../node_modules/.pnpm/tslib@2/node_modules/tslib/...`) because\n * the real `/<package>/` segment appears in both. Case-insensitive.\n *\n * @param path - A file path from a stack frame (already normalized to `/`).\n */\nexport function isDecoratorRuntimeFramePath(path: string): boolean {\n const lower = path.toLowerCase();\n return DECORATOR_RUNTIME_PACKAGES.some(\n (pkg) =>\n lower.includes(`/${pkg}/`) ||\n // Vite serves the helper as a virtual module whose id flattens the\n // scope separator and appends the version, e.g.\n // `<root>/\\0@oxc-project+runtime@0.138.0/helpers/esm/decorate.js`.\n // Missing it attributed every class Vitest loads to the project root's\n // package (#3098).\n lower.includes(`\\0${pkg.replace('/', '+')}@`),\n );\n}\n\n/**\n * Module and test runners that evaluate a module and so appear below it on\n * the stack. Like decorator helpers, they never declare a class.\n */\nconst MODULE_RUNNER_PATH_SEGMENTS: readonly string[] = [\n '/node_modules/@vitest/',\n '/node_modules/vitest/',\n '/node_modules/vite/dist/node/module-runner',\n];\n\n/**\n * Whether a stack-frame path belongs to a module or test runner (Vitest, the\n * Vite module runner) rather than to code that could declare a class (#3098).\n *\n * @param path - A file path from a stack frame (already normalized to `/`).\n */\nexport function isModuleRunnerFramePath(path: string): boolean {\n const lower = path.toLowerCase();\n return MODULE_RUNNER_PATH_SEGMENTS.some((segment) => lower.includes(segment));\n}\n\n/**\n * Whether a scoped package name (as captured from a `node_modules/@scope/name`\n * stack match) is a decorator-runtime helper package.\n *\n * @param name - A scoped package name, e.g. `@oxc-project/runtime`.\n */\nexport function isDecoratorRuntimePackageName(name: string): boolean {\n return DECORATOR_RUNTIME_PACKAGES.includes(name);\n}\n\nlet smrtCoreRoot: string | null | undefined;\n\n/**\n * The directory of the smrt-core package this module belongs to (its\n * `package.json` names `@happyvertical/smrt-core`), or `null` when it cannot\n * be determined (a browser, or core inlined into a consumer's bundle).\n * Resolved once from this module's own location, so it follows the monorepo\n * checkout, a linked checkout, or an installed copy alike.\n */\nfunction getSmrtCoreRoot(): string | null {\n if (smrtCoreRoot !== undefined) return smrtCoreRoot;\n smrtCoreRoot = null;\n try {\n const getBuiltinModule = (\n globalThis as {\n process?: { getBuiltinModule?: (id: string) => unknown };\n }\n ).process?.getBuiltinModule;\n const fs = getBuiltinModule?.('node:fs') as\n | typeof import('node:fs')\n | undefined;\n const path = getBuiltinModule?.('node:path') as\n | typeof import('node:path')\n | undefined;\n const url = getBuiltinModule?.('node:url') as\n | typeof import('node:url')\n | undefined;\n if (!fs || !path || !url || !import.meta.url.startsWith('file:')) {\n return smrtCoreRoot;\n }\n let dir = path.dirname(url.fileURLToPath(import.meta.url));\n for (let depth = 0; depth < 16; depth++) {\n const manifest = path.join(dir, 'package.json');\n if (\n fs.existsSync(manifest) &&\n (JSON.parse(fs.readFileSync(manifest, 'utf8')) as { name?: string })\n .name === '@happyvertical/smrt-core'\n ) {\n smrtCoreRoot = dir.replace(/\\\\/g, '/');\n break;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n } catch {\n smrtCoreRoot = null;\n }\n return smrtCoreRoot;\n}\n\n/**\n * Whether a stack-frame path is smrt-core's own code, which applies decorators\n * but never declares an application class. Both stack walks (source-file\n * identity in `registry/shared-state.ts` and package attribution in\n * `manifest/manifest-loader.ts`) skip these frames.\n *\n * Matched by where core actually lives, never by a generic substring: a\n * consumer's own `packages/core` workspace package (ergot's `@ergot/core`) or\n * a file named like a core module declares classes too. That is this core's\n * package directory (outside its `__tests__` fixtures) and any installed\n * `node_modules/@happyvertical/smrt-core` copy. With source maps enabled —\n * `tsx`, `node --enable-source-maps`, Vite SSR — an installed core's frames\n * report mapped `.../node_modules/@happyvertical/smrt-core/src/...` paths;\n * missing them attributed every class to `@happyvertical/smrt-core` (#3109,\n * #3110).\n *\n * @param path - A file path from a stack frame (already normalized to `/`).\n */\nexport function isSmrtCoreFramePath(path: string): boolean {\n const normalized = path.replace(/^file:\\/\\//, '').replace(/\\\\/g, '/');\n if (\n normalized.toLowerCase().includes('/node_modules/@happyvertical/smrt-core/')\n ) {\n return true;\n }\n const root = getSmrtCoreRoot();\n if (!root || !normalized.startsWith(`${root}/`)) return false;\n return !normalized.slice(root.length + 1).includes('__tests__');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAa,6BAAgD;CAC3D;CACA;CACA;CACA;AACF;;;;;;;;;;;;AAaA,SAAgB,4BAA4B,MAAuB;CACjE,MAAM,QAAQ,KAAK,YAAY;CAC/B,OAAO,2BAA2B,MAC/B,QACC,MAAM,SAAS,IAAI,IAAI,EAAE,KAMzB,MAAM,SAAS,KAAK,IAAI,QAAQ,KAAK,GAAG,EAAE,EAAE,CAChD;AACF;;;;;AAMA,IAAM,8BAAiD;CACrD;CACA;CACA;AACF;;;;;;;AAQA,SAAgB,wBAAwB,MAAuB;CAC7D,MAAM,QAAQ,KAAK,YAAY;CAC/B,OAAO,4BAA4B,MAAM,YAAY,MAAM,SAAS,OAAO,CAAC;AAC9E;;;;;;;AAQA,SAAgB,8BAA8B,MAAuB;CACnE,OAAO,2BAA2B,SAAS,IAAI;AACjD;AAEA,IAAI;;;;;;;;AASJ,SAAS,kBAAiC;CACxC,IAAI,iBAAiB,KAAA,GAAW,OAAO;CACvC,eAAe;CACf,IAAI;EACF,MAAM,mBACJ,WAGA,SAAS;EACX,MAAM,KAAK,mBAAmB,SAAS;EAGvC,MAAM,OAAO,mBAAmB,WAAW;EAG3C,MAAM,MAAM,mBAAmB,UAAU;EAGzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,WAAW,OAAO,GAC7D,OAAO;EAET,IAAI,MAAM,KAAK,QAAQ,IAAI,cAAc,OAAO,KAAK,GAAG,CAAC;EACzD,KAAK,IAAI,QAAQ,GAAG,QAAQ,IAAI,SAAS;GACvC,MAAM,WAAW,KAAK,KAAK,KAAK,cAAc;GAC9C,IACE,GAAG,WAAW,QAAQ,KACrB,KAAK,MAAM,GAAG,aAAa,UAAU,MAAM,CAAC,CAAC,CAC3C,SAAS,4BACZ;IACA,eAAe,IAAI,QAAQ,OAAO,GAAG;IACrC;GACF;GACA,MAAM,SAAS,KAAK,QAAQ,GAAG;GAC/B,IAAI,WAAW,KAAK;GACpB,MAAM;EACR;CACF,QAAQ;EACN,eAAe;CACjB;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,oBAAoB,MAAuB;CACzD,MAAM,aAAa,KAAK,QAAQ,cAAc,EAAE,CAAC,CAAC,QAAQ,OAAO,GAAG;CACpE,IACE,WAAW,YAAY,CAAC,CAAC,SAAS,yCAAyC,GAE3E,OAAO;CAET,MAAM,OAAO,gBAAgB;CAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,WAAW,GAAG,KAAK,EAAE,GAAG,OAAO;CACxD,OAAO,CAAC,WAAW,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,WAAW;AAChE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-core",
|
|
3
|
-
"version": "0.51.
|
|
3
|
+
"version": "0.51.26",
|
|
4
4
|
"description": "Core AI agent framework with standardized collections, object-relational mapping, and code generators",
|
|
5
5
|
"author": "HappyVertical",
|
|
6
6
|
"type": "module",
|
|
@@ -154,9 +154,9 @@
|
|
|
154
154
|
"@happyvertical/files": "^0.90.0",
|
|
155
155
|
"@happyvertical/json": "^0.90.0",
|
|
156
156
|
"@happyvertical/logger": "^0.90.0",
|
|
157
|
-
"@happyvertical/smrt-config": "0.51.
|
|
158
|
-
"@happyvertical/smrt-scanner": "0.51.
|
|
159
|
-
"@happyvertical/smrt-types": "0.51.
|
|
157
|
+
"@happyvertical/smrt-config": "0.51.26",
|
|
158
|
+
"@happyvertical/smrt-scanner": "0.51.26",
|
|
159
|
+
"@happyvertical/smrt-types": "0.51.26",
|
|
160
160
|
"@happyvertical/sql": "^0.90.0",
|
|
161
161
|
"@happyvertical/utils": "^0.90.0",
|
|
162
162
|
"@oxc-project/runtime": "^0.150.0",
|