@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
package/AGENTS.md CHANGED
@@ -296,6 +296,7 @@ skipping it: agents/db-drop-framework-base-tables.md.
296
296
  - `src/discovery/manifest-discovery.ts` — manifest auto-discovery
297
297
  - `src/commands/docs-claude.ts` — downstream AGENTS.md generation + Claude alias; no object scanning
298
298
  - `src/commands/docs-knowledge-bundle.ts` — knowledge-bundle half of `docs:agents`
299
+ - `src/commands/docs-skills-install.ts` — skill-installation half of `docs:agents` (#4708)
299
300
 
300
301
  ## docs:agents knowledge bundle (consumer contract)
301
302
 
@@ -309,6 +310,12 @@ artifacts — `scripts/ship-knowledge-pages.mjs` (root `pnpm build`, `prepack-pa
309
310
  runs fall back to `docs/knowledge`). Links to uninstalled packages' pages dangle by design. The shape lives in
310
311
  `@happyvertical/smrt-dev-mcp/knowledge` (`okf-bundle.ts`); `dev:knowledge-check` reads it (`stale-okf-bundle`).
311
312
 
313
+ Skill install (#4708): unless `--no-install-skills`, `docs:agents` also writes the `smrt-catalog` skill from
314
+ `@happyvertical/smrt-dev-mcp` to `.claude/skills/smrt-catalog/SKILL.md` and `.agents/skills/smrt-catalog/SKILL.md`
315
+ under the working directory (skipped on `--dry-run`). The copy carries a `<!-- smrt-generated: … smrt-dev-mcp@<version> … -->`
316
+ marker after the frontmatter: a rerun replaces a marked copy, a copy without the marker is left alone with a warning.
317
+ The shipped text names `.agents/smrt-knowledge/`; the installer substitutes the real bundle dir (`docs:claude`, custom `--output`). Only the smrt repository itself (root `package.json` name `@happyvertical/smrt`, not any pnpm monorepo) also gets `smrt-contribute`; an unmarked copy byte-identical to the shipped skill (the repo's own `.agents/skills/smrt-contribute`) counts as current. Destinations go through `containedPath` and are refused when any path segment is a symlink, before any write.
318
+
312
319
  ## Gotchas
313
320
 
314
321
  - **Test mode detection**: checks `NODE_ENV=test`, `VITEST=true`, `global.it`/`describe` — may conflict with other test runners
package/README.md CHANGED
@@ -186,6 +186,11 @@ alias supports the same flag and retains its historical output path.
186
186
  Regenerate snapshots after moving the project or updating dependencies so the
187
187
  local source paths remain current.
188
188
 
189
+ `docs:agents` also installs the `smrt-catalog` agent skill into
190
+ `.claude/skills/` and `.agents/skills/` so an agent consults the knowledge
191
+ catalog before hand-rolling infrastructure. Pass `--no-install-skills` to skip
192
+ it. A copy you edited (the generated marker removed) is never overwritten.
193
+
189
194
  Review and architecture prompt bundles include package guidance and modules
190
195
  matched by file or focus hints. Add `--complete` to either context command to
191
196
  include every module for the selected packages. These commands still build the
@@ -97,6 +97,8 @@ config loading; `bin/smrt.js` imports `dist/` in-process so SIGTERM reaches
97
97
  publishes via `link()` (never replaces); import requires a 0600 regular
98
98
  bundle for the same app, an exactly matching manifest schema, and an empty
99
99
  target; deployed import requires `SMRT_MAINTENANCE_MODE=true`.
100
+ Local relative asset locators resolve against the approved asset root during
101
+ export and stay relative after import. Legacy file URLs import as file URLs.
100
102
  - **Process identity**: `app.pid` is trusted only when the live command
101
103
  line's last two tokens are a path with basename `smrt-web.mjs` and exactly
102
104
  `--smrt-instance=<record instance>` (an app started by the template's former
@@ -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/AuditLogCollection-BBbvr8Qc.js
@@ -42,7 +42,7 @@ var OidcIdentity = class extends SmrtObject {
42
42
  * Find identity by issuer and subject
43
43
  */
44
44
  static async findBySubject(issuer, subject, options = {}) {
45
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-BvsaDTZY.js").then((n) => n.r).then((n) => n.r);
45
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-D4DIZv0K-Do3bwRuw.js").then((n) => n.r).then((n) => n.r);
46
46
  return await (await OidcIdentityCollection.create(options)).findBySubject(issuer, subject);
47
47
  }
48
48
  /** Build the collision-free natural key for one OIDC issuer subject. */
@@ -65,7 +65,7 @@ var OidcIdentity = class extends SmrtObject {
65
65
  static async findOrCreate(profile, oidcData, options = {}) {
66
66
  const profileId = profile.id;
67
67
  if (typeof profileId !== "string" || !profileId) throw new Error("OidcIdentity.findOrCreate() requires a saved Profile.");
68
- const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-j2WFuKDT-DZTwcb-u.js").then((n) => n.t).then((n) => n.i);
68
+ const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-j2WFuKDT-BieMIOLz.js").then((n) => n.t).then((n) => n.i);
69
69
  const profileOptions = profile.options ?? {};
70
70
  return (await reuseExistingOidcIdentityForProfile(profileId, {
71
71
  email: oidcData.email,
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { n as __exportAll$1 } from "./NostrIdentity-RJaATTCt-BbRHWyee.js";
3
- import { t as OidcIdentity } from "./OidcIdentity-COeMidoC-BDr8b6iW.js";
3
+ import { t as OidcIdentity } from "./OidcIdentity-COeMidoC-ETkpZbIS.js";
4
4
  import { SmrtCollection } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/OidcIdentityCollection-D4DIZv0K.js
6
6
  var OidcIdentityCollection_D4DIZv0K_exports = /* @__PURE__ */ __exportAll({