agents-inc 0.157.0 → 0.158.0

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 (97) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{chunk-PXGDA2SY.js → chunk-2PN4QXON.js} +2 -2
  3. package/dist/{chunk-WENBESZO.js → chunk-3NBXQSW2.js} +5 -5
  4. package/dist/{chunk-RVXI5VQU.js → chunk-3PJLLBUS.js} +61 -257
  5. package/dist/{chunk-RVXI5VQU.js.map → chunk-3PJLLBUS.js.map} +1 -1
  6. package/dist/{chunk-YG5YPVTJ.js → chunk-3Q2N7CSY.js} +4 -4
  7. package/dist/{chunk-PVPNVK3W.js → chunk-4ABNXKAR.js} +2 -2
  8. package/dist/{chunk-DCIC35R7.js → chunk-54QLV3OH.js} +4 -4
  9. package/dist/{chunk-QXPMQBEI.js → chunk-6DBE562W.js} +3 -3
  10. package/dist/{chunk-IGOFZG3S.js → chunk-7Z4N4JWQ.js} +1 -241
  11. package/dist/{chunk-IGOFZG3S.js.map → chunk-7Z4N4JWQ.js.map} +1 -1
  12. package/dist/{chunk-3E52LCYC.js → chunk-DAUY2SB3.js} +10 -10
  13. package/dist/{chunk-CEGHC7L5.js → chunk-DP6YQFVO.js} +4 -4
  14. package/dist/{chunk-MU2TQ5KK.js → chunk-EEAX7E2X.js} +2 -2
  15. package/dist/{chunk-ZAQ6WMJV.js → chunk-H25VRR2T.js} +5 -5
  16. package/dist/{chunk-Z3H2K5PK.js → chunk-H2DHTJKW.js} +8 -8
  17. package/dist/{chunk-4KHUHPX4.js → chunk-H4CL23HG.js} +3 -3
  18. package/dist/{chunk-RLU2IXD3.js → chunk-IK6YOXZH.js} +3 -3
  19. package/dist/{chunk-V7PMQDDU.js → chunk-JG3B47P3.js} +4 -4
  20. package/dist/{chunk-QO4XD5V5.js → chunk-KVVXINCJ.js} +3 -3
  21. package/dist/{chunk-4EPJWN7C.js → chunk-L4FHSOL5.js} +3 -3
  22. package/dist/{chunk-24IGOJ7E.js → chunk-LKI3ENGQ.js} +3 -3
  23. package/dist/{chunk-K2VTGT45.js → chunk-OQB2CKBT.js} +5 -5
  24. package/dist/{chunk-XOZAKFTS.js → chunk-PNRLBPGS.js} +11 -11
  25. package/dist/{chunk-VI6U2PJG.js → chunk-PZNXBORZ.js} +3 -3
  26. package/dist/{chunk-YKFCUVHG.js → chunk-Q7CAE5NN.js} +3 -3
  27. package/dist/{chunk-ZBYVDXZG.js → chunk-SJ4T5YLG.js} +2 -2
  28. package/dist/{chunk-4CIAZOTD.js → chunk-TPQ5M3BW.js} +2 -2
  29. package/dist/{chunk-O4K42CJB.js → chunk-TUXXBEBB.js} +2 -2
  30. package/dist/{chunk-LDBVIPTP.js → chunk-WMVOJY6V.js} +3 -3
  31. package/dist/{chunk-KTXVQ7OM.js → chunk-X52QUV4U.js} +3 -3
  32. package/dist/{chunk-PGZSNNDA.js → chunk-XNYHMRVJ.js} +4 -4
  33. package/dist/commands/build/marketplace.js +5 -5
  34. package/dist/commands/build/plugins.js +5 -5
  35. package/dist/commands/compile.js +8 -8
  36. package/dist/commands/doctor.js +9 -9
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/edit.js +27 -27
  39. package/dist/commands/eject.js +8 -8
  40. package/dist/commands/init.js +27 -27
  41. package/dist/commands/list.js +6 -6
  42. package/dist/commands/new/marketplace.js +5 -5
  43. package/dist/commands/search.js +8 -8
  44. package/dist/commands/share.js +6 -6
  45. package/dist/commands/uninstall.js +8 -8
  46. package/dist/commands/update.js +4 -4
  47. package/dist/components/wizard/category-grid.js +2 -2
  48. package/dist/components/wizard/domain-selection.js +5 -5
  49. package/dist/components/wizard/run-wizard-session.js +18 -18
  50. package/dist/components/wizard/skill-agent-summary.js +4 -4
  51. package/dist/components/wizard/source-grid.js +2 -2
  52. package/dist/components/wizard/stack-selection.js +4 -4
  53. package/dist/components/wizard/step-agents.js +5 -5
  54. package/dist/components/wizard/step-build.js +5 -5
  55. package/dist/components/wizard/step-confirm.js +7 -7
  56. package/dist/components/wizard/step-sources.js +5 -5
  57. package/dist/components/wizard/step-stack.js +5 -5
  58. package/dist/components/wizard/summary-panel.js +6 -6
  59. package/dist/components/wizard/wizard-layout.js +7 -7
  60. package/dist/components/wizard/wizard.js +17 -17
  61. package/dist/hooks/init.js +27 -27
  62. package/dist/load-agent-defs-2VYAV5GL.js +13 -0
  63. package/dist/{recompile-project-agents-G7ZM25PC.js → recompile-project-agents-NG5DCPHJ.js} +7 -7
  64. package/dist/{source-loader-BIAEDR5R.js → source-loader-CO2FZ3OO.js} +3 -3
  65. package/dist/stores/wizard-store.js +3 -3
  66. package/package.json +2 -4
  67. package/dist/load-agent-defs-M6LRVISN.js +0 -13
  68. /package/dist/{chunk-PXGDA2SY.js.map → chunk-2PN4QXON.js.map} +0 -0
  69. /package/dist/{chunk-WENBESZO.js.map → chunk-3NBXQSW2.js.map} +0 -0
  70. /package/dist/{chunk-YG5YPVTJ.js.map → chunk-3Q2N7CSY.js.map} +0 -0
  71. /package/dist/{chunk-PVPNVK3W.js.map → chunk-4ABNXKAR.js.map} +0 -0
  72. /package/dist/{chunk-DCIC35R7.js.map → chunk-54QLV3OH.js.map} +0 -0
  73. /package/dist/{chunk-QXPMQBEI.js.map → chunk-6DBE562W.js.map} +0 -0
  74. /package/dist/{chunk-3E52LCYC.js.map → chunk-DAUY2SB3.js.map} +0 -0
  75. /package/dist/{chunk-CEGHC7L5.js.map → chunk-DP6YQFVO.js.map} +0 -0
  76. /package/dist/{chunk-MU2TQ5KK.js.map → chunk-EEAX7E2X.js.map} +0 -0
  77. /package/dist/{chunk-ZAQ6WMJV.js.map → chunk-H25VRR2T.js.map} +0 -0
  78. /package/dist/{chunk-Z3H2K5PK.js.map → chunk-H2DHTJKW.js.map} +0 -0
  79. /package/dist/{chunk-4KHUHPX4.js.map → chunk-H4CL23HG.js.map} +0 -0
  80. /package/dist/{chunk-RLU2IXD3.js.map → chunk-IK6YOXZH.js.map} +0 -0
  81. /package/dist/{chunk-V7PMQDDU.js.map → chunk-JG3B47P3.js.map} +0 -0
  82. /package/dist/{chunk-QO4XD5V5.js.map → chunk-KVVXINCJ.js.map} +0 -0
  83. /package/dist/{chunk-4EPJWN7C.js.map → chunk-L4FHSOL5.js.map} +0 -0
  84. /package/dist/{chunk-24IGOJ7E.js.map → chunk-LKI3ENGQ.js.map} +0 -0
  85. /package/dist/{chunk-K2VTGT45.js.map → chunk-OQB2CKBT.js.map} +0 -0
  86. /package/dist/{chunk-XOZAKFTS.js.map → chunk-PNRLBPGS.js.map} +0 -0
  87. /package/dist/{chunk-VI6U2PJG.js.map → chunk-PZNXBORZ.js.map} +0 -0
  88. /package/dist/{chunk-YKFCUVHG.js.map → chunk-Q7CAE5NN.js.map} +0 -0
  89. /package/dist/{chunk-ZBYVDXZG.js.map → chunk-SJ4T5YLG.js.map} +0 -0
  90. /package/dist/{chunk-4CIAZOTD.js.map → chunk-TPQ5M3BW.js.map} +0 -0
  91. /package/dist/{chunk-O4K42CJB.js.map → chunk-TUXXBEBB.js.map} +0 -0
  92. /package/dist/{chunk-LDBVIPTP.js.map → chunk-WMVOJY6V.js.map} +0 -0
  93. /package/dist/{chunk-KTXVQ7OM.js.map → chunk-X52QUV4U.js.map} +0 -0
  94. /package/dist/{chunk-PGZSNNDA.js.map → chunk-XNYHMRVJ.js.map} +0 -0
  95. /package/dist/{load-agent-defs-M6LRVISN.js.map → load-agent-defs-2VYAV5GL.js.map} +0 -0
  96. /package/dist/{recompile-project-agents-G7ZM25PC.js.map → recompile-project-agents-NG5DCPHJ.js.map} +0 -0
  97. /package/dist/{source-loader-BIAEDR5R.js.map → source-loader-CO2FZ3OO.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,26 @@ Each release has detailed notes in its own file under [`changelogs/`](./changelo
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [0.158.0] - 2026-08-24
11
+
12
+ **A rule author's reason reaches the grid, three defects leave the shipped surface, and the E2E suite stops describing states the CLI cannot produce**
13
+
14
+ - The grid now says WHY a requirement is needed, in the rule author's own words. `requires[].reason` has been required by the schema all along and nothing rendered it; it is clipped at 60 characters because the cell wraps rather than elides and the catalogue's longest reason is 242 (CLI-757)
15
+ - `uninstall` survives a `metadata.yaml` it cannot parse instead of dying before it deletes anything, a skill you eject is one you can edit, and `doctor` counts one skill as one skill (CLI-790, CLI-814)
16
+ - Two compiler-API checkers land — boundary-union casts and `symbol | file` doc tables — and the five the row argued against stay unbuilt with its reasons intact (CLI-652, CLI-679)
17
+ - The E2E suite shares two frozen fixtures instead of building one per file: 87 files lose the `beforeAll`/`afterAll` ceremony, and a plain source measures at 10ms, so the per-file sharing had bought nothing (CLI-736)
18
+ - A fixture's `config.ts` is now rendered by the product's own writer. The two disagreed on field order, entry spacing, the hoisted variables and the stack compaction — so every assertion over a fixture config was pinned to the fixture rather than to the product (CLI-730)
19
+ - `flattenCliOutput` and `globalHomeFor` were each written twice; both are now single, tested helpers (CLI-770, CLI-689)
20
+ - The slug map has one direction, because nothing read the other, and a synthesised category keeps the domain the source declared (CLI-650)
21
+ - One build per task: three `pretest*` hooks were a second build racing turbo's first, and two `tsup` runs with `clean: true` on one `dist/` aborted a push with no legible error (CLI-771, CLI-793, CLI-795, CLI-813)
22
+ - Six assertions that could not have failed, each repaired and mutation-proved — a `?? []` that cannot tell absence from emptiness, a `toBeGreaterThan(0)` no swap can redden, a `toContain(``)` true of every string (CLI-647, CLI-803, CLI-804, CLI-807, CLI-810, CLI-788)
23
+ - Removed: `expectCompiledAgents`, with zero call sites, and an options bag on `expectValidAgentMarkdown` that no caller could reach (CLI-778)
24
+ - The task-ID backlog closes to its irreducible core, an eighth of the size the row claimed (CLI-547, CLI-742)
25
+ - Web: the editor offers a loaded marketplace's own categories as placements, and the site header reads at the type system's scale (CLI-815, WWW-08)
26
+ - Retired by measurement rather than by work, each with its evidence in `todo/archive.md` (CLI-557, CLI-596, CLI-613, CLI-648, CLI-692, CLI-746, CLI-761, CLI-789, CLI-796, CLI-797, CLI-801, CLI-802, CLI-805, CLI-806, CLI-808, CLI-809, CLI-812, CLI-817)
27
+
28
+ See [changelogs/0.158.0.md](./changelogs/0.158.0.md) for full details.
29
+
10
30
  ## [0.157.0] - 2026-08-23
11
31
 
12
32
  **The accuracy programme lands: scope travels end to end, every command prints the name the installation configured, and a run that cannot finish says so**
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-WCZNQECQ.js";
13
13
  import {
14
14
  getSkillById
15
- } from "./chunk-IGOFZG3S.js";
15
+ } from "./chunk-7Z4N4JWQ.js";
16
16
  import {
17
17
  CLI_COLORS
18
18
  } from "./chunk-G6G2FT2G.js";
@@ -265,4 +265,4 @@ var CategoryGrid = ({
265
265
  export {
266
266
  CategoryGrid
267
267
  };
268
- //# sourceMappingURL=chunk-PXGDA2SY.js.map
268
+ //# sourceMappingURL=chunk-2PN4QXON.js.map
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDomainDisplayName
4
- } from "./chunk-QO4XD5V5.js";
4
+ } from "./chunk-KVVXINCJ.js";
5
5
  import {
6
6
  CheckboxGrid
7
7
  } from "./chunk-KUZBMEWR.js";
8
8
  import {
9
9
  orderDomains,
10
10
  useWizardStore
11
- } from "./chunk-RLU2IXD3.js";
11
+ } from "./chunk-IK6YOXZH.js";
12
12
  import {
13
13
  DOMAIN_DESCRIPTIONS
14
- } from "./chunk-RVXI5VQU.js";
14
+ } from "./chunk-3PJLLBUS.js";
15
15
  import {
16
16
  matrix,
17
17
  typedEntries
18
- } from "./chunk-IGOFZG3S.js";
18
+ } from "./chunk-7Z4N4JWQ.js";
19
19
 
20
20
  // src/cli/components/wizard/domain-selection.tsx
21
21
  import { useMemo } from "react";
@@ -56,4 +56,4 @@ var DomainSelection = () => {
56
56
  export {
57
57
  DomainSelection
58
58
  };
59
- //# sourceMappingURL=chunk-WENBESZO.js.map
59
+ //# sourceMappingURL=chunk-3NBXQSW2.js.map
@@ -12,7 +12,7 @@ import {
12
12
  typedFromEntries,
13
13
  typedKeys,
14
14
  typedValues
15
- } from "./chunk-IGOFZG3S.js";
15
+ } from "./chunk-7Z4N4JWQ.js";
16
16
  import {
17
17
  AUTHOR_HANDLE_PATTERN,
18
18
  CACHE_HASH_LENGTH,
@@ -208,6 +208,15 @@ async function removeDirIfEmpty(dir) {
208
208
  }
209
209
  async function copy(src, dest) {
210
210
  await fs2.copy(src, dest);
211
+ await grantOwnerWrite(dest);
212
+ }
213
+ var OWNER_WRITE = 128;
214
+ async function grantOwnerWrite(target) {
215
+ const entry = await fs2.stat(target);
216
+ await fs2.chmod(target, entry.mode | OWNER_WRITE);
217
+ if (!entry.isDirectory()) return;
218
+ const children = await fs2.readdir(target);
219
+ await Promise.all(children.map((child) => grantOwnerWrite(path.join(target, child))));
211
220
  }
212
221
 
213
222
  // src/cli/utils/logger.ts
@@ -11970,246 +11979,6 @@ var BUILT_IN_MATRIX2 = {
11970
11979
  "native-js": "web-utilities-native-js",
11971
11980
  rxjs: "web-utilities-rxjs",
11972
11981
  vueuse: "web-utilities-vueuse"
11973
- },
11974
- idToSlug: {
11975
- "ai-infrastructure-huggingface-inference": "huggingface-inference",
11976
- "ai-infrastructure-litellm": "litellm",
11977
- "ai-infrastructure-modal": "modal",
11978
- "ai-infrastructure-ollama": "ollama",
11979
- "ai-infrastructure-replicate": "replicate",
11980
- "ai-infrastructure-together-ai": "together-ai",
11981
- "ai-observability-langfuse": "langfuse",
11982
- "ai-observability-promptfoo": "promptfoo",
11983
- "ai-orchestration-langchain": "langchain",
11984
- "ai-orchestration-llamaindex": "llamaindex",
11985
- "ai-orchestration-vercel-ai-sdk": "vercel-ai-sdk",
11986
- "ai-patterns-tool-use-patterns": "tool-use-patterns",
11987
- "ai-provider-anthropic-sdk": "anthropic-sdk",
11988
- "ai-provider-claude-vision": "claude-vision",
11989
- "ai-provider-cohere-sdk": "cohere-sdk",
11990
- "ai-provider-elevenlabs": "elevenlabs",
11991
- "ai-provider-google-gemini-sdk": "google-gemini-sdk",
11992
- "ai-provider-mistral-sdk": "mistral-sdk",
11993
- "ai-provider-openai-sdk": "openai-sdk",
11994
- "ai-provider-openai-whisper": "openai-whisper",
11995
- "api-analytics-posthog-analytics": "posthog-analytics",
11996
- "api-analytics-setup-posthog": "setup-posthog",
11997
- "api-auth-better-auth-drizzle-hono": "better-auth-drizzle-hono",
11998
- "api-auth-clerk": "clerk",
11999
- "api-auth-nextauth": "nextauth",
12000
- "api-baas-appwrite": "appwrite",
12001
- "api-baas-firebase": "firebase",
12002
- "api-baas-neon": "neon",
12003
- "api-baas-planetscale": "planetscale",
12004
- "api-baas-supabase": "supabase",
12005
- "api-baas-turso": "turso",
12006
- "api-caching-strategies": "strategies",
12007
- "api-cms-payload": "payload",
12008
- "api-cms-sanity": "sanity",
12009
- "api-cms-strapi": "strapi",
12010
- "api-commerce-stripe": "stripe",
12011
- "api-database-cockroachdb": "cockroachdb",
12012
- "api-database-drizzle": "drizzle",
12013
- "api-database-edgedb": "edgedb",
12014
- "api-database-knex": "knex",
12015
- "api-database-mongodb": "mongodb",
12016
- "api-database-mongoose": "mongoose",
12017
- "api-database-mysql": "mysql",
12018
- "api-database-postgresql": "postgresql",
12019
- "api-database-prisma": "prisma",
12020
- "api-database-redis": "redis",
12021
- "api-database-sequelize": "sequelize",
12022
- "api-database-surrealdb": "surrealdb",
12023
- "api-database-typeorm": "typeorm",
12024
- "api-database-upstash": "upstash",
12025
- "api-database-vercel-kv": "vercel-kv",
12026
- "api-database-vercel-postgres": "vercel-postgres",
12027
- "api-email-resend-react-email": "resend-react-email",
12028
- "api-email-setup-resend": "setup-resend",
12029
- "api-flags-posthog-flags": "posthog-flags",
12030
- "api-framework-elysia": "elysia",
12031
- "api-framework-express": "express",
12032
- "api-framework-fastify": "fastify",
12033
- "api-framework-hono": "hono",
12034
- "api-framework-nestjs": "nestjs",
12035
- "api-graphql-apollo-server": "apollo-server",
12036
- "api-graphql-mercurius": "mercurius",
12037
- "api-graphql-yoga": "yoga",
12038
- "api-messaging-webhooks": "webhooks",
12039
- "api-observability-axiom-pino-sentry": "axiom-pino-sentry",
12040
- "api-observability-setup-axiom-pino-sentry": "setup-axiom-pino-sentry",
12041
- "api-performance-api-performance": "api-performance",
12042
- "api-queue-bullmq": "bullmq",
12043
- "api-search-elasticsearch": "elasticsearch",
12044
- "api-search-meilisearch": "meilisearch",
12045
- "api-search-xquik": "xquik",
12046
- "api-specs-openapi": "openapi",
12047
- "api-vector-db-chroma": "chroma",
12048
- "api-vector-db-pinecone": "pinecone",
12049
- "api-vector-db-qdrant": "qdrant",
12050
- "api-vector-db-weaviate": "weaviate",
12051
- "cli-framework-cli-commander": "cli-commander",
12052
- "cli-framework-oclif-ink": "oclif-ink",
12053
- "cli-prompts-clack": "clack",
12054
- "desktop-backend-tauri": "tauri-backend",
12055
- "desktop-framework-electron": "electron",
12056
- "desktop-framework-tauri": "tauri",
12057
- "desktop-ipc-electron": "electron-ipc",
12058
- "desktop-mobile-tauri": "tauri-mobile",
12059
- "desktop-multiwindow-electron": "electron-multiwindow",
12060
- "desktop-multiwindow-tauri": "tauri-multiwindow",
12061
- "desktop-packaging-electron-forge": "electron-forge",
12062
- "desktop-packaging-tauri": "tauri-bundling",
12063
- "desktop-plugins-tauri": "tauri-plugins",
12064
- "desktop-security-electron": "electron-security",
12065
- "desktop-security-tauri": "tauri-security",
12066
- "desktop-storage-electron": "electron-storage",
12067
- "desktop-testing-electron": "electron-testing",
12068
- "desktop-ui-electron": "electron-ui",
12069
- "desktop-updates-electron-updater": "electron-updater",
12070
- "infra-ci-cd-docker": "docker",
12071
- "infra-ci-cd-github-actions": "github-actions",
12072
- "infra-ci-cd-turborepo-ci": "turborepo-ci",
12073
- "infra-config-setup-env": "setup-env",
12074
- "infra-containers-kubernetes": "kubernetes",
12075
- "infra-iac-pulumi": "pulumi",
12076
- "infra-iac-sst": "sst",
12077
- "infra-iac-terraform": "terraform",
12078
- "infra-platform-aws-sdk": "aws-sdk",
12079
- "infra-platform-cloudflare-workers": "cloudflare-workers",
12080
- "infra-platform-netlify": "netlify",
12081
- "infra-platform-vercel": "vercel",
12082
- "meta-config-stack-detect": "stack-detect",
12083
- "meta-design-composable-components": "composable-components",
12084
- "meta-design-expressive-typescript": "expressive-typescript",
12085
- "meta-methodology-research-methodology": "research-methodology",
12086
- "meta-planning-ai-planning": "ai-planning",
12087
- "meta-planning-api-planning": "api-planning",
12088
- "meta-planning-cli-planning": "cli-planning",
12089
- "meta-planning-web-planning": "web-planning",
12090
- "meta-reviewing-ai-reviewing": "ai-reviewing",
12091
- "meta-reviewing-api-reviewing": "api-reviewing",
12092
- "meta-reviewing-cli-reviewing": "cli-reviewing",
12093
- "meta-reviewing-infra-reviewing": "infra-reviewing",
12094
- "meta-reviewing-reviewing": "reviewing",
12095
- "meta-reviewing-web-reviewing": "web-reviewing",
12096
- "mobile-animation-gesture-handler": "gesture-handler",
12097
- "mobile-animation-reanimated": "reanimated",
12098
- "mobile-animation-skia": "skia",
12099
- "mobile-background-tasks": "tasks",
12100
- "mobile-camera-vision-camera": "vision-camera",
12101
- "mobile-deep-linking-app-links": "app-links",
12102
- "mobile-deployment-eas": "eas",
12103
- "mobile-framework-expo": "expo",
12104
- "mobile-framework-react-native": "react-native",
12105
- "mobile-hardware-ble-nfc": "ble-nfc",
12106
- "mobile-navigation-expo-router": "expo-router",
12107
- "mobile-navigation-react-navigation": "react-navigation",
12108
- "mobile-notifications-push": "push",
12109
- "mobile-performance-react-native": "react-native-performance",
12110
- "mobile-security-react-native": "react-native-security",
12111
- "mobile-storage-mmkv": "mmkv",
12112
- "mobile-storage-sqlite-powersync": "sqlite-powersync",
12113
- "mobile-storage-watermelondb": "watermelondb",
12114
- "mobile-styling-nativewind": "nativewind",
12115
- "mobile-styling-unistyles": "unistyles",
12116
- "mobile-testing-detox": "detox",
12117
- "mobile-testing-maestro": "maestro",
12118
- "mobile-ui-components-react-native-paper": "react-native-paper",
12119
- "mobile-ui-components-tamagui": "tamagui",
12120
- "shared-monorepo-nx": "nx",
12121
- "shared-monorepo-pnpm-workspaces": "pnpm-workspaces",
12122
- "shared-monorepo-turborepo": "turborepo",
12123
- "shared-security-auth-security": "auth-security",
12124
- "shared-tooling-biome": "biome",
12125
- "shared-tooling-changesets": "changesets",
12126
- "shared-tooling-eslint-prettier": "eslint-prettier",
12127
- "shared-tooling-git-hooks": "git-hooks",
12128
- "shared-tooling-typescript-config": "typescript-config",
12129
- "web-3d-react-three-fiber": "react-three-fiber",
12130
- "web-accessibility-web-accessibility": "web-accessibility",
12131
- "web-animation-css-animations": "css-animations",
12132
- "web-animation-framer-motion": "framer-motion",
12133
- "web-animation-view-transitions": "view-transitions",
12134
- "web-data-fetching-graphql-apollo": "graphql-apollo",
12135
- "web-data-fetching-graphql-urql": "graphql-urql",
12136
- "web-data-fetching-swr": "swr",
12137
- "web-data-fetching-trpc": "trpc",
12138
- "web-dataviz-d3": "d3",
12139
- "web-dataviz-recharts": "recharts",
12140
- "web-dnd-dnd-kit": "dnd-kit",
12141
- "web-editor-lexical": "lexical",
12142
- "web-editor-tiptap": "tiptap",
12143
- "web-error-handling-error-boundaries": "error-boundaries",
12144
- "web-error-handling-result-types": "result-types",
12145
- "web-files-file-upload-patterns": "file-upload-patterns",
12146
- "web-files-image-handling": "image-handling",
12147
- "web-forms-react-hook-form": "react-hook-form",
12148
- "web-forms-tanstack-form": "tanstack-form",
12149
- "web-forms-vee-validate": "vee-validate",
12150
- "web-forms-zod-validation": "zod-validation",
12151
- "web-framework-angular-standalone": "angular-standalone",
12152
- "web-framework-react": "react",
12153
- "web-framework-solidjs": "solidjs",
12154
- "web-framework-svelte": "svelte",
12155
- "web-framework-vue-composition-api": "vue-composition-api",
12156
- "web-i18n-next-intl": "next-intl",
12157
- "web-i18n-react-intl": "react-intl",
12158
- "web-i18n-vue-i18n": "vue-i18n",
12159
- "web-maps-leaflet": "leaflet",
12160
- "web-maps-mapbox": "mapbox",
12161
- "web-meta-framework-astro": "astro",
12162
- "web-meta-framework-docusaurus": "docusaurus",
12163
- "web-meta-framework-nextjs": "nextjs",
12164
- "web-meta-framework-nuxt": "nuxt",
12165
- "web-meta-framework-qwik": "qwik",
12166
- "web-meta-framework-remix": "remix",
12167
- "web-meta-framework-sveltekit": "sveltekit",
12168
- "web-meta-framework-vitepress": "vitepress",
12169
- "web-mocks-msw": "msw",
12170
- "web-performance-web-performance": "web-performance",
12171
- "web-pwa-offline-first": "offline-first",
12172
- "web-pwa-service-workers": "service-workers",
12173
- "web-realtime-socket-io": "socket-io",
12174
- "web-realtime-sse": "sse",
12175
- "web-realtime-websockets": "websockets",
12176
- "web-routing-react-router": "react-router",
12177
- "web-routing-tanstack-router": "tanstack-router",
12178
- "web-server-state-react-query": "react-query",
12179
- "web-state-jotai": "jotai",
12180
- "web-state-mobx": "mobx",
12181
- "web-state-ngrx-signalstore": "ngrx-signalstore",
12182
- "web-state-pinia": "pinia",
12183
- "web-state-redux-toolkit": "redux-toolkit",
12184
- "web-state-zustand": "zustand",
12185
- "web-styling-cva": "cva",
12186
- "web-styling-design-tokens": "design-tokens",
12187
- "web-styling-scss-modules": "scss-modules",
12188
- "web-styling-tailwind": "tailwind",
12189
- "web-styling-theming": "theming",
12190
- "web-testing-cypress-e2e": "cypress-e2e",
12191
- "web-testing-playwright-e2e": "playwright-e2e",
12192
- "web-testing-react-testing-library": "react-testing-library",
12193
- "web-testing-visual-regression": "visual-regression",
12194
- "web-testing-vitest": "vitest",
12195
- "web-testing-vue-test-utils": "vue-test-utils",
12196
- "web-tooling-component-library": "component-library",
12197
- "web-tooling-storybook": "storybook",
12198
- "web-tooling-vite": "vite",
12199
- "web-ui-ant-design": "ant-design",
12200
- "web-ui-base-ui": "base-ui",
12201
- "web-ui-chakra-ui": "chakra-ui",
12202
- "web-ui-headless-ui": "headless-ui",
12203
- "web-ui-mantine": "mantine",
12204
- "web-ui-mui": "mui",
12205
- "web-ui-radix-ui": "radix-ui",
12206
- "web-ui-shadcn-ui": "shadcn-ui",
12207
- "web-ui-tanstack-table": "tanstack-table",
12208
- "web-ui-vuetify": "vuetify",
12209
- "web-utilities-date-fns": "date-fns",
12210
- "web-utilities-native-js": "native-js",
12211
- "web-utilities-rxjs": "rxjs",
12212
- "web-utilities-vueuse": "vueuse"
12213
11982
  }
12214
11983
  },
12215
11984
  generatedAt: "build"
@@ -14430,7 +14199,12 @@ async function readLocalSkillMetadata(skillDir) {
14430
14199
  return null;
14431
14200
  }
14432
14201
  const content = await readFile(metadataPath);
14433
- const result = localSkillMetadataSchema.safeParse(parseYaml(content));
14202
+ const read = readYaml(content);
14203
+ if (!read.parsed) {
14204
+ warn(`Invalid metadata.yaml at ${metadataPath}: ${read.reason}`);
14205
+ return null;
14206
+ }
14207
+ const result = localSkillMetadataSchema.safeParse(read.value);
14434
14208
  if (!result.success) {
14435
14209
  warn(`Invalid metadata.yaml at ${metadataPath}: ${formatZodIssues(result.error.issues)}`);
14436
14210
  return null;
@@ -14441,12 +14215,8 @@ async function injectForkedFromMetadata(destPath, skillId, contentHash, origin =
14441
14215
  const metadataPath = path9.join(destPath, STANDARD_FILES.METADATA_YAML);
14442
14216
  const rawContent = await readFile(metadataPath);
14443
14217
  const { yamlContent } = stripYamlSchemaComment(rawContent);
14444
- const parseResult = localSkillMetadataSchema.safeParse(parseYaml(yamlContent));
14445
- if (!parseResult.success) {
14446
- warn(`Malformed metadata.yaml at '${metadataPath}' \u2014 existing fields may be lost`);
14447
- }
14448
14218
  const metadata = {
14449
- ...parseResult.success ? parseResult.data : {},
14219
+ ...existingMetadataFields(yamlContent, metadataPath),
14450
14220
  forkedFrom: {
14451
14221
  skillId,
14452
14222
  contentHash,
@@ -14462,6 +14232,22 @@ async function writeMetadataYaml(filePath, metadata, schemaComment = "") {
14462
14232
  const yamlContent = stringifyYaml(metadata, { lineWidth: YAML_FORMATTING.LINE_WIDTH_NONE });
14463
14233
  await writeFile(filePath, schemaComment + yamlContent);
14464
14234
  }
14235
+ function readYaml(content) {
14236
+ try {
14237
+ return { parsed: true, value: parseYaml(content) };
14238
+ } catch (error) {
14239
+ return { parsed: false, reason: getErrorMessage(error) };
14240
+ }
14241
+ }
14242
+ function existingMetadataFields(yamlContent, metadataPath) {
14243
+ const read = readYaml(yamlContent);
14244
+ if (read.parsed) {
14245
+ const result = localSkillMetadataSchema.safeParse(read.value);
14246
+ if (result.success) return result.data;
14247
+ }
14248
+ warn(`Malformed metadata.yaml at '${metadataPath}' \u2014 existing fields may be lost`);
14249
+ return {};
14250
+ }
14465
14251
 
14466
14252
  // src/cli/lib/skills/skill-copier.ts
14467
14253
  import path10 from "path";
@@ -16800,6 +16586,12 @@ async function extractAllSkills(skillsDir) {
16800
16586
  // src/cli/lib/matrix/skill-resolution.ts
16801
16587
  import { unique as unique5, uniqueBy as uniqueBy3 } from "remeda";
16802
16588
  var AUTO_SYNTH_ORDER = 999;
16589
+ function warnOnDomainDisagreement(skill, decidedBy) {
16590
+ if (skill.domain === decidedBy.domain) return;
16591
+ warn(
16592
+ `Category '${skill.category}' has no definition, so its domain was taken from the first skill naming it \u2014 '${decidedBy.id}' (${decidedBy.domain}). '${skill.id}' declares '${skill.domain}' and will be filed under '${decidedBy.domain}'. Declare the category in the marketplace's own config, or make the two skills agree.`
16593
+ );
16594
+ }
16803
16595
  function synthesizeCategory(category, domain) {
16804
16596
  verbose(
16805
16597
  `Category '${category}' has no definition in skill-categories.ts \u2014 using auto-generated placeholder`
@@ -16823,10 +16615,9 @@ function claimSlug(slugMap, slug, id) {
16823
16615
  return;
16824
16616
  }
16825
16617
  slugMap.slugToId[slug] = id;
16826
- slugMap.idToSlug[id] = slug;
16827
16618
  }
16828
16619
  function buildSlugMap(skills) {
16829
- const slugMap = { slugToId: {}, idToSlug: {} };
16620
+ const slugMap = { slugToId: {} };
16830
16621
  for (const skill of skills) {
16831
16622
  claimSlug(slugMap, skill.slug, skill.id);
16832
16623
  }
@@ -16898,13 +16689,18 @@ function mergeMatrixWithSkills(categories, relationships, skills) {
16898
16689
  const slugMap = buildSlugMap(skills);
16899
16690
  const resolvedSkills = buildResolvedSkillMap(skills, categories, relationships, slugMap);
16900
16691
  const synthesizedCategories = { ...categories };
16692
+ const synthesizedFrom = /* @__PURE__ */ new Map();
16901
16693
  for (const skill of skills) {
16902
16694
  if (skill.category === LOCAL_PSEUDO_CATEGORY) continue;
16903
- if (!synthesizedCategories[skill.category]) {
16904
- const synthesized = synthesizeCategory(skill.category, skill.domain);
16905
- synthesizedCategories[skill.category] = synthesized;
16695
+ if (categories[skill.category]) continue;
16696
+ const already = synthesizedFrom.get(skill.category);
16697
+ if (already === void 0) {
16698
+ synthesizedCategories[skill.category] = synthesizeCategory(skill.category, skill.domain);
16699
+ synthesizedFrom.set(skill.category, skill);
16906
16700
  verbose(`Auto-synthesized category '${skill.category}' for skill '${skill.id}'`);
16701
+ continue;
16907
16702
  }
16703
+ warnOnDomainDisagreement(skill, already);
16908
16704
  }
16909
16705
  const unresolvedSlugs = collectUnresolvedSlugs(relationships, slugMap.slugToId);
16910
16706
  const merged = {
@@ -17097,10 +16893,19 @@ function getUnmetRequirementsReason(skillId, currentSelections) {
17097
16893
  const s = matrix.skills[id];
17098
16894
  return s ? getLabel(s) : id;
17099
16895
  });
17100
- return requirement.needsAny ? `requires ${joinWithConjunction(names, "or")}` : `requires ${joinWithConjunction(names, "and")}`;
16896
+ return withAuthorsReason(namesTheMissing(names, requirement.needsAny), requirement.reason);
17101
16897
  }
17102
16898
  return void 0;
17103
16899
  }
16900
+ function namesTheMissing(names, needsAny) {
16901
+ return `requires ${joinWithConjunction(names, needsAny ? "or" : "and")}`;
16902
+ }
16903
+ var REASON_BUDGET = 60;
16904
+ function withAuthorsReason(synthesised, reason) {
16905
+ const stated = reason.trim();
16906
+ if (stated === "") return synthesised;
16907
+ return `${synthesised} \u2014 ${truncateText(stated, REASON_BUDGET)}`;
16908
+ }
17104
16909
  function unmetRequirementsReasonFor(isSelected, skillId, currentSelections) {
17105
16910
  if (!isSelected) return {};
17106
16911
  const reason = getUnmetRequirementsReason(skillId, currentSelections);
@@ -18083,7 +17888,7 @@ var skillAudit = {
18083
17888
  classification: { class: "C", frameworks: ["nextjs"] },
18084
17889
  sources: [
18085
17890
  "skill body (next-axiom, @sentry/nextjs, next.config.ts wrapped withAxiom(withSentryConfig(...)), instrumentation.ts, sentry.{client,server,edge}.config.ts)",
18086
- 'SKILLS-09 (todo/skills.md) \u2014 "Next-only in all but name"'
17891
+ 'todo/skills.md \u2014 "Next-only in all but name"'
18087
17892
  ]
18088
17893
  },
18089
17894
  "api-observability-axiom-pino-sentry": {
@@ -18919,8 +18724,7 @@ function copyOfBuiltInMatrix() {
18919
18724
  categories: { ...BUILT_IN_MATRIX.categories },
18920
18725
  suggestedStacks: [...BUILT_IN_MATRIX.suggestedStacks],
18921
18726
  slugMap: {
18922
- slugToId: { ...BUILT_IN_MATRIX.slugMap.slugToId },
18923
- idToSlug: { ...BUILT_IN_MATRIX.slugMap.idToSlug }
18727
+ slugToId: { ...BUILT_IN_MATRIX.slugMap.slugToId }
18924
18728
  }
18925
18729
  };
18926
18730
  }
@@ -19429,4 +19233,4 @@ export {
19429
19233
  detectMigrations,
19430
19234
  executeMigration
19431
19235
  };
19432
- //# sourceMappingURL=chunk-RVXI5VQU.js.map
19236
+ //# sourceMappingURL=chunk-3PJLLBUS.js.map