@happyvertical/smrt-cli 0.60.10 → 0.60.11

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 (33) hide show
  1. package/AGENTS.md +7 -0
  2. package/README.md +5 -0
  3. package/agents/app-commands.md +2 -0
  4. package/dist/{AuditLogCollection-BBbvr8Qc-DU-QXhH5.js → AuditLogCollection-BBbvr8Qc-mcBSLXW9.js} +1 -1
  5. package/dist/{OidcIdentity-COeMidoC-BDr8b6iW.js → OidcIdentity-COeMidoC-ETkpZbIS.js} +2 -2
  6. package/dist/{OidcIdentityCollection-D4DIZv0K-BvsaDTZY.js → OidcIdentityCollection-D4DIZv0K-Do3bwRuw.js} +1 -1
  7. package/dist/{PasswordCredentialService-BSSP_kyT-DlxlWy6b.js → PasswordCredentialService-BSSP_kyT-t7bjBu4L.js} +14 -14
  8. package/dist/{ProfileAssetCollection-D5-tG9Mm-Be7hQJJq.js → ProfileAssetCollection-D5-tG9Mm-FbzWS3Fo.js} +3 -3
  9. package/dist/{ProfileCollection-CmRaiE9U-n8apgXIh.js → ProfileCollection-CmRaiE9U-BYvpJg0y.js} +17 -17
  10. package/dist/{ProfileLinkCollection-pvPTsysg-DCmnAd7m.js → ProfileLinkCollection-pvPTsysg-nDbgawOW.js} +2 -2
  11. package/dist/{ProfileMetadataCollection-CAgJyjze-BKpcvrnf.js → ProfileMetadataCollection-CAgJyjze-D-5QuGnR.js} +1 -1
  12. package/dist/{ProfileMetafieldCollection-19ae6Lpf-BuTJKzmz.js → ProfileMetafieldCollection-19ae6Lpf-CgEt1gPi.js} +1 -1
  13. package/dist/{ProfileRelationshipCollection-BFSlTQ7J-DBbNdauk.js → ProfileRelationshipCollection-BFSlTQ7J-Dv0ll9S1.js} +1 -1
  14. package/dist/{ProfileTypeCollection-BRLK8cHS-COCy6yqF.js → ProfileTypeCollection-BRLK8cHS-BKuh_ajh.js} +2 -2
  15. package/dist/app/portability-assets.d.ts +2 -0
  16. package/dist/app/portability-assets.d.ts.map +1 -1
  17. package/dist/app.js +2 -2
  18. package/dist/{cli-CtRx1_yP.js → cli-DXIN1FbA.js} +1 -1
  19. package/dist/commands/docs-claude.d.ts.map +1 -1
  20. package/dist/commands/docs-skills-install.d.ts +31 -0
  21. package/dist/commands/docs-skills-install.d.ts.map +1 -0
  22. package/dist/{commands-CGfM14Uj.js → commands-DD5gexRY.js} +138 -4
  23. package/dist/{dist-B00KCyNE.js → dist-CivxAJ6C.js} +2 -2
  24. package/dist/{dist-D7vejSNK.js → dist-DcYLLDwF.js} +4 -4
  25. package/dist/{dist-BGEMcSs-.js → dist-DjG0qPkx.js} +5 -5
  26. package/dist/index.js +12 -12
  27. package/dist/{oidcProvisioningPrimitives-KpIiLmG4-Csnh1ENp.js → oidcProvisioningPrimitives-KpIiLmG4-D5-0dAY3.js} +3 -3
  28. package/dist/{operator-DCwooIiI.js → operator-B0ZraSEE.js} +2 -2
  29. package/dist/{portability-CbMgEnD1.js → portability-sL8U5Hld.js} +21 -13
  30. package/dist/{resolveIdentity-j2WFuKDT-DZTwcb-u.js → resolveIdentity-j2WFuKDT-BieMIOLz.js} +14 -14
  31. package/dist/smrt-knowledge.okf.md +3 -2
  32. package/package.json +11 -10
  33. package/dist/dist-DEKj_L2B.js +0 -1908
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-B00KCyNE.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
- import { a as getOwnedAssetsFromCollection, o as removeOwnedAssetFromCollection, t as addOwnedAssetFromCollection } from "./dist-DEKj_L2B.js";
5
4
  import { SmrtJunction, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
5
+ import { addOwnedAssetFromCollection, getOwnedAssetsFromCollection, removeOwnedAssetFromCollection } from "@happyvertical/smrt-assets";
6
6
  //#region ../profiles/dist/chunks/ProfileAssetCollection-D5-tG9Mm.js
7
7
  var ProfileAssetCollection_D5_tG9Mm_exports = /* @__PURE__ */ __exportAll({
8
8
  n: () => ProfileAssetCollection_exports,
@@ -84,7 +84,7 @@ var ProfileAssetCollection = class extends SmrtJunction {
84
84
  profileCollectionPromise = null;
85
85
  async getProfileCollection() {
86
86
  if (!this.profileCollectionPromise) {
87
- const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-n8apgXIh.js").then((n) => n.i).then((n) => n.r);
87
+ const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-BYvpJg0y.js").then((n) => n.i).then((n) => n.r);
88
88
  this.profileCollectionPromise = ProfileCollection.create({ db: this.db });
89
89
  }
90
90
  return this.profileCollectionPromise;
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { d as getTenantId, i as tenantId, m as withSystemContext, n as resolvePrompt, o as queryGlobal, r as TenantScoped, s as queryWithGlobals, t as definePrompt } from "./dist-B00KCyNE.js";
2
+ import { d as getTenantId, i as tenantId, m as withSystemContext, n as resolvePrompt, o as queryGlobal, r as TenantScoped, s as queryWithGlobals, t as definePrompt } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
- import { a as getOwnedAssetsFromCollection, i as assertValidOwnedAssetSortOrder, n as assertAssetLinkable, o as removeOwnedAssetFromCollection, r as assertValidOwnedAssetRelationship, s as resolveOwnedAssetsById, t as addOwnedAssetFromCollection } from "./dist-DEKj_L2B.js";
5
4
  import { RuntimeError, SmrtCollection, SmrtObject, ValidationError, field, foreignKey, isAbortedTransactionError, oneToMany, smrt } from "@happyvertical/smrt-core";
6
5
  import { BackfillTableUnavailableError, BackfillTracker } from "@happyvertical/smrt-core/migrations";
6
+ import { addOwnedAssetFromCollection, assertAssetLinkable, assertValidOwnedAssetRelationship, assertValidOwnedAssetSortOrder, getOwnedAssetsFromCollection, removeOwnedAssetFromCollection, resolveOwnedAssetsById } from "@happyvertical/smrt-assets";
7
7
  //#region ../profiles/dist/chunks/ProfileCollection-CmRaiE9U.js
8
8
  var ProfileCollection_CmRaiE9U_exports = /* @__PURE__ */ __exportAll({
9
9
  _: () => smrtProfilesGenerateBioPrompt,
@@ -435,7 +435,7 @@ var Profile = class extends SmrtObject {
435
435
  async getTypeSlug() {
436
436
  const tenantId2 = this.tenantId || getTenantId();
437
437
  if (this.typeId && tenantId2) {
438
- const { ProfileTypeCollection } = await import("./ProfileTypeCollection-BRLK8cHS-COCy6yqF.js").then((n) => n.n).then((n) => n.n);
438
+ const { ProfileTypeCollection } = await import("./ProfileTypeCollection-BRLK8cHS-BKuh_ajh.js").then((n) => n.n).then((n) => n.n);
439
439
  return (await (await ProfileTypeCollection.create(this.options)).getAvailableById(this.typeId, tenantId2))?.slug ?? "";
440
440
  }
441
441
  return (await this.loadRelated("typeId"))?.slug || "";
@@ -458,8 +458,8 @@ var Profile = class extends SmrtObject {
458
458
  * @param value - The value to set
459
459
  */
460
460
  async addMetadata(metafieldSlug, value) {
461
- const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-BuTJKzmz.js").then((n) => n.t).then((n) => n.n);
462
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-BKpcvrnf.js").then((n) => n.t).then((n) => n.n);
461
+ const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-CgEt1gPi.js").then((n) => n.t).then((n) => n.n);
462
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-D-5QuGnR.js").then((n) => n.t).then((n) => n.n);
463
463
  const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
464
464
  if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
465
465
  await metafield.validateValue(value);
@@ -492,7 +492,7 @@ var Profile = class extends SmrtObject {
492
492
  * @returns Object with metafield slugs as keys
493
493
  */
494
494
  async getMetadata() {
495
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-BKpcvrnf.js").then((n) => n.t).then((n) => n.n);
495
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-D-5QuGnR.js").then((n) => n.t).then((n) => n.n);
496
496
  return await (await ProfileMetadataCollection.create(this.options)).getMetadataObject(this.id);
497
497
  }
498
498
  /**
@@ -509,8 +509,8 @@ var Profile = class extends SmrtObject {
509
509
  * @param metafieldSlug - The slug of the metafield to remove
510
510
  */
511
511
  async removeMetadata(metafieldSlug) {
512
- const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-BuTJKzmz.js").then((n) => n.t).then((n) => n.n);
513
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-BKpcvrnf.js").then((n) => n.t).then((n) => n.n);
512
+ const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-CgEt1gPi.js").then((n) => n.t).then((n) => n.n);
513
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-D-5QuGnR.js").then((n) => n.t).then((n) => n.n);
514
514
  const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
515
515
  if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
516
516
  const existing = await (await ProfileMetadataCollection.create(this.options)).list({
@@ -535,7 +535,7 @@ var Profile = class extends SmrtObject {
535
535
  return candidates.find((candidate) => ownerTenantId && candidate.tenantId === ownerTenantId) ?? candidates.find((candidate) => !candidate.tenantId) ?? null;
536
536
  }
537
537
  async getProfileLinkCollection() {
538
- const { ProfileLinkCollection } = await import("./ProfileLinkCollection-pvPTsysg-DCmnAd7m.js").then((n) => n.t).then((n) => n.r);
538
+ const { ProfileLinkCollection } = await import("./ProfileLinkCollection-pvPTsysg-nDbgawOW.js").then((n) => n.t).then((n) => n.r);
539
539
  return ProfileLinkCollection.create({ db: this.db });
540
540
  }
541
541
  /** This profile's web links in display order. */
@@ -552,7 +552,7 @@ var Profile = class extends SmrtObject {
552
552
  return (await this.getProfileLinkCollection()).replaceForProfile(this.id, links);
553
553
  }
554
554
  async getProfileAssetCollection() {
555
- const { ProfileAssetCollection } = await import("./ProfileAssetCollection-D5-tG9Mm-Be7hQJJq.js").then((n) => n.t).then((n) => n.n);
555
+ const { ProfileAssetCollection } = await import("./ProfileAssetCollection-D5-tG9Mm-FbzWS3Fo.js").then((n) => n.t).then((n) => n.n);
556
556
  return ProfileAssetCollection.create({ db: this.db });
557
557
  }
558
558
  async getAssets(relationship) {
@@ -584,7 +584,7 @@ var Profile = class extends SmrtObject {
584
584
  */
585
585
  async addRelationship(toProfile, relationshipSlug, contextProfile) {
586
586
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-BRBpX00F-D78l9V1y.js").then((n) => n.t).then((n) => n.n);
587
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-DBbNdauk.js").then((n) => n.t).then((n) => n.n);
587
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-Dv0ll9S1.js").then((n) => n.t).then((n) => n.n);
588
588
  const { ProfileRelationshipType } = await import("./ProfileRelationshipType-Cevy-vaF-G82Gg40q.js").then((n) => n.n).then((n) => n.n);
589
589
  const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
590
590
  if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
@@ -609,7 +609,7 @@ var Profile = class extends SmrtObject {
609
609
  * @returns Array of ProfileRelationship instances
610
610
  */
611
611
  async getRelationships(options) {
612
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-DBbNdauk.js").then((n) => n.t).then((n) => n.n);
612
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-Dv0ll9S1.js").then((n) => n.t).then((n) => n.n);
613
613
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-BRBpX00F-D78l9V1y.js").then((n) => n.t).then((n) => n.n);
614
614
  const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
615
615
  const direction = options?.direction || "all";
@@ -654,7 +654,7 @@ var Profile = class extends SmrtObject {
654
654
  */
655
655
  async removeRelationship(toProfile, relationshipSlug) {
656
656
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-BRBpX00F-D78l9V1y.js").then((n) => n.t).then((n) => n.n);
657
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-DBbNdauk.js").then((n) => n.t).then((n) => n.n);
657
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-Dv0ll9S1.js").then((n) => n.t).then((n) => n.n);
658
658
  const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
659
659
  if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
660
660
  const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
@@ -778,7 +778,7 @@ var Profile = class extends SmrtObject {
778
778
  * @returns Array of OIDC identity records
779
779
  */
780
780
  async getOidcIdentities() {
781
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-BvsaDTZY.js").then((n) => n.r).then((n) => n.r);
781
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-Do3bwRuw.js").then((n) => n.r).then((n) => n.r);
782
782
  return await (await OidcIdentityCollection.create(this.options)).findByProfile(this.id);
783
783
  }
784
784
  /**
@@ -791,7 +791,7 @@ var Profile = class extends SmrtObject {
791
791
  * type, but refuses to create or rebind authority.
792
792
  */
793
793
  async linkOidcIdentity(oidcData) {
794
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-BvsaDTZY.js").then((n) => n.r).then((n) => n.r);
794
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-Do3bwRuw.js").then((n) => n.r).then((n) => n.r);
795
795
  return await (await OidcIdentityCollection.create(this.options)).linkToProfile(this, oidcData);
796
796
  }
797
797
  /**
@@ -820,7 +820,7 @@ var Profile = class extends SmrtObject {
820
820
  * @returns Array of audit log entries
821
821
  */
822
822
  async getAuditLogs(limit = 50) {
823
- const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-DU-QXhH5.js").then((n) => n.t).then((n) => n.n);
823
+ const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-mcBSLXW9.js").then((n) => n.t).then((n) => n.n);
824
824
  return await (await AuditLogCollection.create(this.options)).getRecentActivity(this.id, limit);
825
825
  }
826
826
  /**
@@ -830,7 +830,7 @@ var Profile = class extends SmrtObject {
830
830
  * @returns The created audit log entry
831
831
  */
832
832
  async recordAction(options) {
833
- const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-DU-QXhH5.js").then((n) => n.t).then((n) => n.n);
833
+ const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-mcBSLXW9.js").then((n) => n.t).then((n) => n.n);
834
834
  return await (await AuditLogCollection.create(this.options)).record({
835
835
  profile: this,
836
836
  ...options
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-B00KCyNE.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
4
  import { SmrtCollection, SmrtObject, field, foreignKey, isEmbeddedDatabase, smrt, withEmbeddedWriteTransaction } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileLinkCollection-pvPTsysg.js
@@ -203,7 +203,7 @@ var ProfileLinkCollection = class ProfileLinkCollection extends SmrtCollection {
203
203
  /** The profile's tenant; throws when the profile is not visible here. */
204
204
  async requireProfileTenant(profileId) {
205
205
  if (!profileId) throw new Error("A profile link needs a profile");
206
- const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-n8apgXIh.js").then((n) => n.i).then((n) => n.r);
206
+ const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-BYvpJg0y.js").then((n) => n.i).then((n) => n.r);
207
207
  const profile = await (await ProfileCollection.create({ db: this.db })).get({ id: profileId });
208
208
  if (!profile) throw new Error(`Profile '${profileId}' not found`);
209
209
  return profile.tenantId ?? null;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-B00KCyNE.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
4
  import { SmrtCollection, SmrtObject, field, foreignKey, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileMetadataCollection-CAgJyjze.js
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-B00KCyNE.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
4
  import { SmrtCollection, SmrtObject, field, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileMetafieldCollection-19ae6Lpf.js
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-B00KCyNE.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
4
  import { SmrtCollection, SmrtObject, foreignKey, oneToMany, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileRelationshipCollection-BFSlTQ7J.js
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { l as withTenantGlobalRead, p as isSystemContext } from "./dist-B00KCyNE.js";
2
+ import { l as withTenantGlobalRead, p as isSystemContext } from "./dist-CivxAJ6C.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
4
- import { a as ProfileType } from "./ProfileCollection-CmRaiE9U-n8apgXIh.js";
4
+ import { a as ProfileType } from "./ProfileCollection-CmRaiE9U-BYvpJg0y.js";
5
5
  import { SmrtCollection } from "@happyvertical/smrt-core";
6
6
  //#region ../profiles/dist/chunks/ProfileTypeCollection-BRLK8cHS.js
7
7
  var ProfileTypeCollection_BRLK8cHS_exports = /* @__PURE__ */ __exportAll({
@@ -24,6 +24,8 @@ export interface AssetManifestEntry {
24
24
  byteLength: number;
25
25
  contentDigest: string;
26
26
  payloadPath: string;
27
+ /** Omitted for bundles whose assets import as absolute file URLs. */
28
+ locator?: 'relative';
27
29
  }
28
30
  /** One embedded asset payload. */
29
31
  export interface AssetPayload {
@@ -1 +1 @@
1
- {"version":3,"file":"portability-assets.d.ts","sourceRoot":"","sources":["../../src/app/portability-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portability-assets.d.ts","sourceRoot":"","sources":["../../src/app/portability-assets.ts"],"names":[],"mappings":"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"}
package/dist/app.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as assertExternalArtifactPath, C as prepareMigration, D as cliExecutablePath, E as validateMcpAppsIfPresent, F as AppCommandError, I as ApplicationStartError, M as resolveApplicationId, N as resolveApplicationStateRoot, O as runtimeEnvironment, P as runtimeConfigurationFingerprint, R as redactSecrets, S as launchVite, T as runWorker, _ as sendTerminationSignal, a as renderAppHelp, b as ViteLauncherError, c as parseTokenLifetime, d as START_OUTPUT_TAIL_BYTES, f as runApplicationOperation, g as readOwnedProcess, h as matchesApplicationProcess, i as errorEnvelope, j as prepareApplicationStateRoot, k as webLauncherPath, l as runTokenOperation, m as checkOwnedProcess, n as APP_RECOVERY, o as runAppCommand, p as WEB_LAUNCHER_NAME, s as TOKEN_USAGE, t as APP_COMMANDS, u as APP_OPERATIONS, v as verifyOwnedProcess, w as resolveViteEntry, x as devServerArguments, y as writeProcessRecord } from "./cli-CtRx1_yP.js";
2
- import { C as publishFilesystemAssets, D as stageFilesystemAssets, E as rollbackFilesystemAssets, O as verifyFilesystemAssets, S as markFilesystemAssetsCommitted, T as recoverFilesystemAssets, _ as bundleContentDigest, a as manifestTables, b as finishFilesystemAssets, c as serializeExportBundle, d as AssetPortabilityError, f as MAX_ASSET_BYTES, g as assertAssetRoot, h as MAX_TOTAL_ASSET_BYTES, i as importedRowsMatchBundle, k as verifyPublishedFilesystemAssets, l as validateImportBundle, m as MAX_BUNDLE_BYTES, n as exportApplication, o as planImportTables, p as MAX_ASSET_COUNT, r as importApplication, t as executeImportPlan, u as ASSET_MANIFEST_SCHEMA_VERSION, v as collectFilesystemAssets, w as readSensitiveBundle, x as hasCommittedImportJournal, y as digestBytes } from "./portability-CbMgEnD1.js";
1
+ import { A as assertExternalArtifactPath, C as prepareMigration, D as cliExecutablePath, E as validateMcpAppsIfPresent, F as AppCommandError, I as ApplicationStartError, M as resolveApplicationId, N as resolveApplicationStateRoot, O as runtimeEnvironment, P as runtimeConfigurationFingerprint, R as redactSecrets, S as launchVite, T as runWorker, _ as sendTerminationSignal, a as renderAppHelp, b as ViteLauncherError, c as parseTokenLifetime, d as START_OUTPUT_TAIL_BYTES, f as runApplicationOperation, g as readOwnedProcess, h as matchesApplicationProcess, i as errorEnvelope, j as prepareApplicationStateRoot, k as webLauncherPath, l as runTokenOperation, m as checkOwnedProcess, n as APP_RECOVERY, o as runAppCommand, p as WEB_LAUNCHER_NAME, s as TOKEN_USAGE, t as APP_COMMANDS, u as APP_OPERATIONS, v as verifyOwnedProcess, w as resolveViteEntry, x as devServerArguments, y as writeProcessRecord } from "./cli-DXIN1FbA.js";
2
+ import { C as publishFilesystemAssets, D as stageFilesystemAssets, E as rollbackFilesystemAssets, O as verifyFilesystemAssets, S as markFilesystemAssetsCommitted, T as recoverFilesystemAssets, _ as bundleContentDigest, a as manifestTables, b as finishFilesystemAssets, c as serializeExportBundle, d as AssetPortabilityError, f as MAX_ASSET_BYTES, g as assertAssetRoot, h as MAX_TOTAL_ASSET_BYTES, i as importedRowsMatchBundle, k as verifyPublishedFilesystemAssets, l as validateImportBundle, m as MAX_BUNDLE_BYTES, n as exportApplication, o as planImportTables, p as MAX_ASSET_COUNT, r as importApplication, t as executeImportPlan, u as ASSET_MANIFEST_SCHEMA_VERSION, v as collectFilesystemAssets, w as readSensitiveBundle, x as hasCommittedImportJournal, y as digestBytes } from "./portability-sL8U5Hld.js";
3
3
  import { PROVIDER_READINESS_SETTINGS, RECLAIM_MUTEX_FILE, acquireWriterLease, createProviderReadinessProbe, findInstalledPackage, isStaleOperationLock, lockOwnerPid, processExists, readActiveWriterLease, reclaimStaleRecord, resolveReadinessModule, withOperationLock } from "@happyvertical/smrt-app-runtime";
4
4
  export { APP_COMMANDS, APP_OPERATIONS, APP_RECOVERY, ASSET_MANIFEST_SCHEMA_VERSION, AppCommandError, ApplicationStartError, AssetPortabilityError, MAX_ASSET_BYTES, MAX_ASSET_COUNT, MAX_BUNDLE_BYTES, MAX_TOTAL_ASSET_BYTES, PROVIDER_READINESS_SETTINGS, RECLAIM_MUTEX_FILE, START_OUTPUT_TAIL_BYTES, TOKEN_USAGE, ViteLauncherError, WEB_LAUNCHER_NAME, acquireWriterLease, assertAssetRoot, assertExternalArtifactPath, bundleContentDigest, checkOwnedProcess, cliExecutablePath, collectFilesystemAssets, createProviderReadinessProbe, devServerArguments, digestBytes, errorEnvelope, executeImportPlan, exportApplication, findInstalledPackage, finishFilesystemAssets, hasCommittedImportJournal, importApplication, importedRowsMatchBundle, isStaleOperationLock, launchVite, lockOwnerPid, manifestTables, markFilesystemAssetsCommitted, matchesApplicationProcess, parseTokenLifetime, planImportTables, prepareApplicationStateRoot, prepareMigration, processExists, publishFilesystemAssets, readActiveWriterLease, readOwnedProcess, readSensitiveBundle, reclaimStaleRecord, recoverFilesystemAssets, redactSecrets, renderAppHelp, resolveApplicationId, resolveApplicationStateRoot, resolveReadinessModule, resolveViteEntry, rollbackFilesystemAssets, runAppCommand, runApplicationOperation, runTokenOperation, runWorker, runtimeConfigurationFingerprint, runtimeEnvironment, sendTerminationSignal, serializeExportBundle, stageFilesystemAssets, validateImportBundle, validateMcpAppsIfPresent, verifyFilesystemAssets, verifyOwnedProcess, verifyPublishedFilesystemAssets, webLauncherPath, withOperationLock, writeProcessRecord };
@@ -1292,7 +1292,7 @@ async function backup(context, args) {
1292
1292
  async function loadPortabilityAdapter(context) {
1293
1293
  const override = join(context.sourceRoot, "scripts", "smrt-portability.mjs");
1294
1294
  if (existsSync(override)) return await import(pathToFileURL(override).href);
1295
- return import("./portability-CbMgEnD1.js").then((n) => n.s);
1295
+ return import("./portability-sL8U5Hld.js").then((n) => n.s);
1296
1296
  }
1297
1297
  async function portability(context, operation, args, operationLock) {
1298
1298
  const adapter = await loadPortabilityAdapter(context);
@@ -1 +1 @@
1
- {"version":3,"file":"docs-claude.d.ts","sourceRoot":"","sources":["../../src/commands/docs-claude.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAWtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAC7C,gEAAgE;IAChE,UAAU,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACxC,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAgOD,eAAO,MAAM,iBAAiB,EAAE,UAM9B,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,UAO9B,CAAC;AAyHH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAyBlD;AA6BD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8CxB;AAiDD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,WAAW,CAAC,EAAE,WAAW,EAAE,EAC3B,WAAW,SAAqB,EAChC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC7D,MAAM,CAuGR;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAGnD,CAAC"}
1
+ {"version":3,"file":"docs-claude.d.ts","sourceRoot":"","sources":["../../src/commands/docs-claude.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAYtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAC7C,gEAAgE;IAChE,UAAU,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACxC,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiQD,eAAO,MAAM,iBAAiB,EAAE,UAM9B,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,UAO9B,CAAC;AAyIH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAyBlD;AA6BD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8CxB;AAiDD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,WAAW,CAAC,EAAE,WAAW,EAAE,EAC3B,WAAW,SAAqB,EAChC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC7D,MAAM,CAuGR;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAGnD,CAAC"}
@@ -0,0 +1,31 @@
1
+ /** Harness directories that receive each skill, relative to the project root. */
2
+ export declare const SKILL_INSTALL_DIRS: readonly [".claude/skills", ".agents/skills"];
3
+ export declare const SKILL_MARKER_PREFIX = "<!-- smrt-generated:";
4
+ export type SkillInstallStatus = 'installed' | 'updated' | 'unchanged' | 'skipped-hand-edited';
5
+ export interface SkillInstallResult {
6
+ skill: string;
7
+ path: string;
8
+ status: SkillInstallStatus;
9
+ }
10
+ /**
11
+ * Inserts the generated marker after the frontmatter, which must stay the
12
+ * first thing in the file for skill-aware harnesses.
13
+ */
14
+ export declare function withGeneratedMarker(markdown: string, skill: string, version: string, generatedBy: string): string;
15
+ /**
16
+ * Installs `skills` under every harness directory of `projectRoot`. Existing
17
+ * unmarked copies are skipped (and reported through `warn`) unless they are
18
+ * already byte-identical to what would be written.
19
+ */
20
+ export declare function installAgentSkills(options: {
21
+ projectRoot: string;
22
+ skills: string[];
23
+ /**
24
+ * Bundle directory relative to `projectRoot` (default `.agents/smrt-knowledge`).
25
+ * The shipped skill text names the default; other locations are substituted.
26
+ */
27
+ bundleDir?: string;
28
+ generatedBy: string;
29
+ warn?: (message: string) => void;
30
+ }): SkillInstallResult[];
31
+ //# sourceMappingURL=docs-skills-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-skills-install.d.ts","sourceRoot":"","sources":["../../src/commands/docs-skills-install.ts"],"names":[],"mappings":"AAsBA,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,+CAAgD,CAAC;AAMhF,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,SAAS,GACT,WAAW,GACX,qBAAqB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAMR;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,GAAG,kBAAkB,EAAE,CA+DvB"}
@@ -22,6 +22,7 @@ import { getPackageConfig, loadConfig, toAIClientOptions, tryResolveConfiguredAI
22
22
  import { toSnakeCase as toSnakeCase$1 } from "@happyvertical/smrt-core/utils";
23
23
  import { checkKnowledgeGraphFreshness, discoverScopedPackageDirectories, readAgentModuleDocs, readPackageAgentDoc, resolveAgentModuleDocPaths } from "@happyvertical/smrt-core/knowledge";
24
24
  import { OKF_BUNDLE_DIR_NAME, OKF_BUNDLE_FORMAT, OKF_BUNDLE_MANIFEST, OKF_SHIPPED_COMPONENT_PAGE, OKF_SHIPPED_INTENTS_DIR, buildArchitectureContext, buildKnowledgeIndex, buildReviewContext, checkKnowledgeFreshness, compactContextResult, diffKnowledgeIndex, readOkfBundleManifest, renderFreshnessResult, renderKnowledgeIndexMarkdown, stampPackageVersion } from "@happyvertical/smrt-dev-mcp/knowledge";
25
+ import { getAgentSkill, getAgentSkillsPackageVersion } from "@happyvertical/smrt-dev-mcp/agent-skills";
25
26
  import { MCPGenerator } from "@happyvertical/smrt-core/generators";
26
27
  import { generateDeclarationsFromCLI } from "@happyvertical/smrt-core/prebuild";
27
28
  import https from "node:https";
@@ -4436,6 +4437,114 @@ function exportKnowledgeBundle(options) {
4436
4437
  };
4437
4438
  }
4438
4439
  //#endregion
4440
+ //#region src/commands/docs-skills-install.ts
4441
+ /**
4442
+ * Skill-installation half of `smrt docs:agents` (#4708).
4443
+ *
4444
+ * Writes the bundled smrt skills from `@happyvertical/smrt-dev-mcp` into the
4445
+ * consumer's harness directories so a harness discovers them without the MCP
4446
+ * server: `.claude/skills/<name>/SKILL.md` (Claude Code) and the
4447
+ * harness-neutral `.agents/skills/<name>/SKILL.md` (Codex, Gemini, others).
4448
+ *
4449
+ * Ownership: an installed copy carries a generated marker with the
4450
+ * smrt-dev-mcp version. A rerun replaces a marked copy; an unmarked copy was
4451
+ * hand-edited (or hand-written) and is left alone with a warning. Writes obey
4452
+ * the bundle writer's rules: contained under the project root, never through
4453
+ * a symlink.
4454
+ */
4455
+ /** Harness directories that receive each skill, relative to the project root. */
4456
+ var SKILL_INSTALL_DIRS = [".claude/skills", ".agents/skills"];
4457
+ /** Prefix of the marker line; the rest carries the producer and version. */
4458
+ /** Where the shipped skill text says the knowledge bundle lives. */
4459
+ var DEFAULT_BUNDLE_DIR = ".agents/smrt-knowledge";
4460
+ var SKILL_MARKER_PREFIX = "<!-- smrt-generated:";
4461
+ /**
4462
+ * Inserts the generated marker after the frontmatter, which must stay the
4463
+ * first thing in the file for skill-aware harnesses.
4464
+ */
4465
+ function withGeneratedMarker(markdown, skill, version, generatedBy) {
4466
+ const marker = `${SKILL_MARKER_PREFIX} ${generatedBy} from @happyvertical/smrt-dev-mcp@${version}; ${skill}; edits are overwritten on rerun, remove this line to keep a local copy -->`;
4467
+ const frontmatter = /^---\r?\n[\s\S]*?\r?\n---\r?\n/.exec(markdown);
4468
+ if (!frontmatter) return `${marker}\n${markdown}`;
4469
+ const end = frontmatter[0].length;
4470
+ return `${markdown.slice(0, end)}\n${marker}\n${markdown.slice(end)}`;
4471
+ }
4472
+ function hasMarker(text) {
4473
+ return text.split(/\r?\n/).some((line) => line.startsWith(SKILL_MARKER_PREFIX));
4474
+ }
4475
+ /** Refuses when the file or any directory between `root` and it is a symlink. */
4476
+ function assertNoSymlinkOnPath(root, target) {
4477
+ const rel = relative(resolve(root), target);
4478
+ let current = resolve(root);
4479
+ for (const segment of rel.split(/[\\/]/).filter(Boolean)) {
4480
+ current = join(current, segment);
4481
+ assertNotSymlink(current);
4482
+ }
4483
+ }
4484
+ /**
4485
+ * Installs `skills` under every harness directory of `projectRoot`. Existing
4486
+ * unmarked copies are skipped (and reported through `warn`) unless they are
4487
+ * already byte-identical to what would be written.
4488
+ */
4489
+ function installAgentSkills(options) {
4490
+ const warn = options.warn ?? console.warn;
4491
+ const version = getAgentSkillsPackageVersion();
4492
+ const normalizedBundle = options.bundleDir?.split(sep).join("/").replace(/\/+$/, "");
4493
+ const bundleRef = normalizedBundle && normalizedBundle !== DEFAULT_BUNDLE_DIR ? normalizedBundle : void 0;
4494
+ const results = [];
4495
+ const plan = options.skills.flatMap((skill) => {
4496
+ const shipped = getAgentSkill({
4497
+ name: skill,
4498
+ includeReferences: false
4499
+ }).skillMarkdown;
4500
+ const source = bundleRef ? shipped.split(DEFAULT_BUNDLE_DIR).join(bundleRef) : shipped;
4501
+ const body = withGeneratedMarker(source, skill, version, options.generatedBy);
4502
+ return SKILL_INSTALL_DIRS.map((dir) => {
4503
+ const target = containedPath(options.projectRoot, join(dir, skill, "SKILL.md"));
4504
+ assertNoSymlinkOnPath(options.projectRoot, target);
4505
+ return {
4506
+ skill,
4507
+ target,
4508
+ body,
4509
+ source
4510
+ };
4511
+ });
4512
+ });
4513
+ for (const { skill, target, body, source } of plan) {
4514
+ const shown = relative(resolve(options.projectRoot), target);
4515
+ let status = "installed";
4516
+ if (existsSync(target)) {
4517
+ const existing = readFileSync(target, "utf8");
4518
+ if (existing === body || existing === source) {
4519
+ results.push({
4520
+ skill,
4521
+ path: shown,
4522
+ status: "unchanged"
4523
+ });
4524
+ continue;
4525
+ }
4526
+ if (!hasMarker(existing)) {
4527
+ warn(` ⚠️ ${shown} has no smrt-generated marker; leaving it alone (delete it to let docs:agents manage it)`);
4528
+ results.push({
4529
+ skill,
4530
+ path: shown,
4531
+ status: "skipped-hand-edited"
4532
+ });
4533
+ continue;
4534
+ }
4535
+ status = "updated";
4536
+ }
4537
+ mkdirSync(dirname(target), { recursive: true });
4538
+ writeFileSync(target, body, "utf8");
4539
+ results.push({
4540
+ skill,
4541
+ path: shown,
4542
+ status
4543
+ });
4544
+ }
4545
+ return results;
4546
+ }
4547
+ //#endregion
4439
4548
  //#region src/commands/docs-claude.ts
4440
4549
  /**
4441
4550
  * docs:agents / docs:claude commands
@@ -4461,6 +4570,11 @@ function createDocsCommand(config) {
4461
4570
  description: "Include every linked module document in the snapshot",
4462
4571
  default: false
4463
4572
  },
4573
+ "no-install-skills": {
4574
+ type: "boolean",
4575
+ description: "Do not install the smrt agent skills into .claude/skills and .agents/skills (installed by default)",
4576
+ default: false
4577
+ },
4464
4578
  "dry-run": {
4465
4579
  type: "boolean",
4466
4580
  description: "Print to stdout without writing file",
@@ -4524,6 +4638,12 @@ function createDocsCommand(config) {
4524
4638
  graphExported = true;
4525
4639
  }
4526
4640
  }
4641
+ const skillResults = options["no-install-skills"] ? [] : installAgentSkills({
4642
+ projectRoot: process.cwd(),
4643
+ bundleDir: relative(process.cwd(), join(outputDir, bundleDirName)),
4644
+ skills: isSmrtRepository(monorepoRoot) ? ["smrt-catalog", "smrt-contribute"] : ["smrt-catalog"],
4645
+ generatedBy: config.generatedBy
4646
+ });
4527
4647
  const totalPackages = packages.length + sdkPackages.length;
4528
4648
  console.log(`\n✅ Generated ${outputPath}`);
4529
4649
  console.log(` ${totalPackages} packages documented`);
@@ -4540,6 +4660,8 @@ function createDocsCommand(config) {
4540
4660
  console.log(` knowledge bundle exported to ${bundle.bundleDir} (${bundle.components} component pages, ${bundle.intents} intent pages)`);
4541
4661
  if (bundle.withoutPages.length > 0) console.log(` ${bundle.withoutPages.length} installed packages ship no knowledge page`);
4542
4662
  }
4663
+ const written = skillResults.filter((result) => result.status === "installed" || result.status === "updated");
4664
+ if (written.length > 0) console.log(` ${written.length} agent skill files written (${[...new Set(written.map((result) => result.skill))].join(", ")})`);
4543
4665
  console.log("");
4544
4666
  } catch (error) {
4545
4667
  console.error("\n❌ Failed to generate agent documentation:");
@@ -4630,6 +4752,18 @@ function loadPackageInfo(packagePath, dirName, complete, specifier) {
4630
4752
  return null;
4631
4753
  }
4632
4754
  }
4755
+ /**
4756
+ * Whether `root` is the smrt repository itself (not just any pnpm monorepo):
4757
+ * only its root package is named `@happyvertical/smrt`.
4758
+ */
4759
+ function isSmrtRepository(root) {
4760
+ if (!root) return false;
4761
+ try {
4762
+ return JSON.parse(readFileSync(join(root, "package.json"), "utf-8")).name === "@happyvertical/smrt";
4763
+ } catch {
4764
+ return false;
4765
+ }
4766
+ }
4633
4767
  function detectMonorepoRoot() {
4634
4768
  try {
4635
4769
  let currentDir = realpathSync(process.cwd());
@@ -8684,7 +8818,7 @@ var dbMaterializeTenantHierarchyCommand = {
8684
8818
  if (!config.database?.url || config.database.url === ":memory:") throw new Error("Database configuration required for db:materialize-tenant-hierarchy. Configure database.url in smrt.config.ts (or DATABASE_URL).");
8685
8819
  const dbType = config.database.type || "sqlite";
8686
8820
  const { getDatabase } = await import("@happyvertical/sql");
8687
- const { materializeTenantHierarchy, TenantHierarchyMaterializationError } = await import("./dist-D7vejSNK.js");
8821
+ const { materializeTenantHierarchy, TenantHierarchyMaterializationError } = await import("./dist-DcYLLDwF.js");
8688
8822
  db = await getDatabase({
8689
8823
  type: dbType,
8690
8824
  url: config.database.url
@@ -8893,7 +9027,7 @@ var dbMigrateLedgerAccountsCommand = {
8893
9027
  if (dbType !== "postgres") throw new Error("db:migrate-ledger-accounts currently supports PostgreSQL only; no changes were made. See the smrt-ledgers README for SQLite.");
8894
9028
  await autoDiscoverAndLoad();
8895
9029
  const { getDatabase } = await import("@happyvertical/sql");
8896
- const { migrateLedgerAccountsTable, planLedgerAccountsTableMove } = await import("./dist-BGEMcSs-.js");
9030
+ const { migrateLedgerAccountsTable, planLedgerAccountsTableMove } = await import("./dist-DjG0qPkx.js");
8897
9031
  db = await getDatabase({
8898
9032
  type: dbType,
8899
9033
  url: config.database.url
@@ -11119,7 +11253,7 @@ var usersProvisionOwnerCommand = {
11119
11253
  const config = getPackageConfig("cli", DEFAULT_CLI_CONFIG);
11120
11254
  if (config.database?.type !== "postgres" || !config.database.url) throw new Error(FAILURE);
11121
11255
  const { getDatabase } = await import("@happyvertical/sql");
11122
- const { provisionPasswordOwner } = await import("./operator-DCwooIiI.js");
11256
+ const { provisionPasswordOwner } = await import("./operator-B0ZraSEE.js");
11123
11257
  db = await getDatabase({
11124
11258
  type: "postgres",
11125
11259
  url: config.database.url
@@ -11482,7 +11616,7 @@ var utilityCommands = {
11482
11616
  description: "Application operations: install, setup, recover, start, stop, doctor, open, backup, export, import, migrate, worker, dev, build (`smrt app help`)",
11483
11617
  args: ["[operation]", "[args...]"],
11484
11618
  handler: async (args) => {
11485
- const { runAppCommand } = await import("./cli-CtRx1_yP.js").then((n) => n.r);
11619
+ const { runAppCommand } = await import("./cli-DXIN1FbA.js").then((n) => n.r);
11486
11620
  const code = await runAppCommand(args);
11487
11621
  if (code !== 0) process.exitCode = code;
11488
11622
  }