@happyvertical/smrt-cli 0.60.10 → 0.60.12
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 +7 -0
- package/README.md +5 -0
- package/agents/app-commands.md +2 -0
- package/dist/{AuditLogCollection-BBbvr8Qc-DU-QXhH5.js → AuditLogCollection-BBbvr8Qc-vKb0VQnR.js} +1 -1
- package/dist/{OidcIdentity-COeMidoC-BDr8b6iW.js → OidcIdentity-COeMidoC-ou8ulS56.js} +2 -2
- package/dist/{OidcIdentityCollection-D4DIZv0K-BvsaDTZY.js → OidcIdentityCollection-D4DIZv0K-CDtom8IP.js} +1 -1
- package/dist/{PasswordCredentialService-BSSP_kyT-DlxlWy6b.js → PasswordCredentialService-BSSP_kyT-CCXYv09q.js} +14 -14
- package/dist/{ProfileAssetCollection-D5-tG9Mm-Be7hQJJq.js → ProfileAssetCollection-D5-tG9Mm-3KXpJivM.js} +3 -3
- package/dist/{ProfileCollection-CmRaiE9U-n8apgXIh.js → ProfileCollection-CmRaiE9U-oA-87ioN.js} +17 -17
- package/dist/{ProfileLinkCollection-pvPTsysg-DCmnAd7m.js → ProfileLinkCollection-pvPTsysg-Djb4JC2d.js} +2 -2
- package/dist/{ProfileMetadataCollection-CAgJyjze-BKpcvrnf.js → ProfileMetadataCollection-CAgJyjze-dPvbXSv3.js} +1 -1
- package/dist/{ProfileMetafieldCollection-19ae6Lpf-BuTJKzmz.js → ProfileMetafieldCollection-19ae6Lpf-CMEYQehx.js} +1 -1
- package/dist/{ProfileRelationshipCollection-BFSlTQ7J-DBbNdauk.js → ProfileRelationshipCollection-BFSlTQ7J-JB4edzdN.js} +1 -1
- package/dist/{ProfileTypeCollection-BRLK8cHS-COCy6yqF.js → ProfileTypeCollection-BRLK8cHS-Dj1fAp2N.js} +2 -2
- package/dist/app/portability-assets.d.ts +2 -0
- package/dist/app/portability-assets.d.ts.map +1 -1
- package/dist/app.js +2 -2
- package/dist/{cli-CtRx1_yP.js → cli-DXIN1FbA.js} +1 -1
- package/dist/commands/docs-claude.d.ts.map +1 -1
- package/dist/commands/docs-skills-install.d.ts +31 -0
- package/dist/commands/docs-skills-install.d.ts.map +1 -0
- package/dist/{commands-CGfM14Uj.js → commands-CInFW-FU.js} +138 -4
- package/dist/{dist-B00KCyNE.js → dist-BN2kcmgm.js} +2 -2
- package/dist/{dist-D7vejSNK.js → dist-BPpS7FPO.js} +4 -4
- package/dist/{dist-BGEMcSs-.js → dist-c3-qNy0h.js} +5 -5
- package/dist/index.js +12 -12
- package/dist/{oidcProvisioningPrimitives-KpIiLmG4-Csnh1ENp.js → oidcProvisioningPrimitives-KpIiLmG4-D1a2bRf8.js} +3 -3
- package/dist/{operator-DCwooIiI.js → operator-n6zKS1br.js} +2 -2
- package/dist/{portability-CbMgEnD1.js → portability-sL8U5Hld.js} +21 -13
- package/dist/{resolveIdentity-j2WFuKDT-DZTwcb-u.js → resolveIdentity-j2WFuKDT-C2w7Bklk.js} +14 -14
- package/dist/smrt-knowledge.okf.md +3 -2
- package/package.json +11 -10
- 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-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-BN2kcmgm.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-
|
|
87
|
+
const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-oA-87ioN.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;
|
package/dist/{ProfileCollection-CmRaiE9U-n8apgXIh.js → ProfileCollection-CmRaiE9U-oA-87ioN.js}
RENAMED
|
@@ -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-
|
|
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-BN2kcmgm.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-
|
|
438
|
+
const { ProfileTypeCollection } = await import("./ProfileTypeCollection-BRLK8cHS-Dj1fAp2N.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-
|
|
462
|
-
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-
|
|
461
|
+
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-CMEYQehx.js").then((n) => n.t).then((n) => n.n);
|
|
462
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-dPvbXSv3.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-
|
|
495
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-dPvbXSv3.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-
|
|
513
|
-
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-
|
|
512
|
+
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-19ae6Lpf-CMEYQehx.js").then((n) => n.t).then((n) => n.n);
|
|
513
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-CAgJyjze-dPvbXSv3.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-
|
|
538
|
+
const { ProfileLinkCollection } = await import("./ProfileLinkCollection-pvPTsysg-Djb4JC2d.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-
|
|
555
|
+
const { ProfileAssetCollection } = await import("./ProfileAssetCollection-D5-tG9Mm-3KXpJivM.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-
|
|
587
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-JB4edzdN.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-
|
|
612
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-JB4edzdN.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-
|
|
657
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-BFSlTQ7J-JB4edzdN.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-
|
|
781
|
+
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-CDtom8IP.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-
|
|
794
|
+
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-CDtom8IP.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-
|
|
823
|
+
const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-vKb0VQnR.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-
|
|
833
|
+
const { AuditLogCollection } = await import("./AuditLogCollection-BBbvr8Qc-vKb0VQnR.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-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-BN2kcmgm.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-
|
|
206
|
+
const { ProfileCollection } = await import("./ProfileCollection-CmRaiE9U-oA-87ioN.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-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-BN2kcmgm.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-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-BN2kcmgm.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-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-BN2kcmgm.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-
|
|
2
|
+
import { l as withTenantGlobalRead, p as isSystemContext } from "./dist-BN2kcmgm.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
|
|
4
|
-
import { a as ProfileType } from "./ProfileCollection-CmRaiE9U-
|
|
4
|
+
import { a as ProfileType } from "./ProfileCollection-CmRaiE9U-oA-87ioN.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":"AAAA;;;;;;GAMG;
|
|
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-
|
|
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-
|
|
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-
|
|
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;
|
|
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-
|
|
8821
|
+
const { materializeTenantHierarchy, TenantHierarchyMaterializationError } = await import("./dist-BPpS7FPO.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-
|
|
9030
|
+
const { migrateLedgerAccountsTable, planLedgerAccountsTableMove } = await import("./dist-c3-qNy0h.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-
|
|
11256
|
+
const { provisionPasswordOwner } = await import("./operator-n6zKS1br.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-
|
|
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
|
}
|