agents-inc 0.166.0 → 0.168.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 (134) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{chunk-TZ2YJJKK.js → chunk-23DNVNFP.js} +5 -5
  3. package/dist/{chunk-ZXKBERQU.js → chunk-27AVGFXH.js} +2 -2
  4. package/dist/{chunk-SXVHSOTH.js → chunk-3DIDV6H3.js} +4 -4
  5. package/dist/{chunk-GE3WKJ6Q.js → chunk-3LZNY46H.js} +4 -4
  6. package/dist/{chunk-Y47EV74W.js → chunk-4DRFEYCE.js} +10 -13
  7. package/dist/chunk-4DRFEYCE.js.map +1 -0
  8. package/dist/{chunk-MPTNC32T.js → chunk-4HWOYYY7.js} +3 -3
  9. package/dist/{chunk-MAWNVT2C.js → chunk-4UKMQUAU.js} +4 -4
  10. package/dist/{chunk-G6UREQ4V.js → chunk-5JUQKGCP.js} +9 -9
  11. package/dist/{chunk-T6UWJAB3.js → chunk-6WGXTB2L.js} +2 -2
  12. package/dist/{chunk-SAYZWCH6.js → chunk-7PYXS2QU.js} +2 -2
  13. package/dist/{chunk-ENGYJCTF.js → chunk-AG3ZVM3B.js} +35 -45
  14. package/dist/{chunk-ENGYJCTF.js.map → chunk-AG3ZVM3B.js.map} +1 -1
  15. package/dist/{chunk-A4KDXNOT.js → chunk-C2UISKIM.js} +66 -104
  16. package/dist/chunk-C2UISKIM.js.map +1 -0
  17. package/dist/{chunk-RZDXDMT6.js → chunk-CMJBKQUH.js} +2 -2
  18. package/dist/{chunk-XZEVWPX6.js → chunk-DJEO3F2H.js} +7 -7
  19. package/dist/{chunk-V3I7VQ7N.js → chunk-EH2PGPLP.js} +5 -5
  20. package/dist/chunk-EH2PGPLP.js.map +1 -0
  21. package/dist/{chunk-PMJWD27C.js → chunk-GE7NUPMI.js} +3 -3
  22. package/dist/{chunk-PNB3524H.js → chunk-GRL73YPF.js} +5 -5
  23. package/dist/{chunk-Y3VIRVVE.js → chunk-H4ZKGGTE.js} +6 -6
  24. package/dist/{chunk-LFWLEDUG.js → chunk-HI6YB7XP.js} +6 -6
  25. package/dist/{chunk-SCOQ34YM.js → chunk-HL3GYRMR.js} +2 -2
  26. package/dist/{chunk-NBXXFIIW.js → chunk-HR7TK2XW.js} +3 -3
  27. package/dist/{chunk-ZR4YPKXQ.js → chunk-JIBCVXXL.js} +4 -4
  28. package/dist/{chunk-JQRJQ4SS.js → chunk-JPMV4E4E.js} +3 -3
  29. package/dist/{chunk-4NDBUJHK.js → chunk-JVUN6AOO.js} +8 -8
  30. package/dist/{chunk-RAHSOJQ2.js → chunk-KQ3PDARZ.js} +2 -2
  31. package/dist/{chunk-PXWG7KFO.js → chunk-KTLKR4YY.js} +2 -2
  32. package/dist/{chunk-6L75SQZU.js → chunk-L3W2JWBA.js} +2 -2
  33. package/dist/{chunk-TTY6DPJN.js → chunk-LFUJCRCT.js} +3 -3
  34. package/dist/{chunk-V5WXIM2F.js → chunk-NU2K5G54.js} +2 -2
  35. package/dist/{chunk-G4JK7WVO.js → chunk-P6I72PR3.js} +15 -15
  36. package/dist/{chunk-WWIFNPJG.js → chunk-PCFUXQJA.js} +12 -12
  37. package/dist/{chunk-DAIEQJIF.js → chunk-PLX2FLEQ.js} +3 -3
  38. package/dist/{chunk-2VUYFTUB.js → chunk-QWFG7Y3R.js} +6 -6
  39. package/dist/{chunk-WVUDLKIO.js → chunk-SLBL3WIP.js} +2 -2
  40. package/dist/{chunk-HWEKHVLE.js → chunk-TW35AEB4.js} +6 -6
  41. package/dist/{chunk-VAPTVR3J.js → chunk-VVRI35SK.js} +3 -3
  42. package/dist/{chunk-6LF4CQBY.js → chunk-W5KEYSOL.js} +2 -2
  43. package/dist/{chunk-TODCQFRB.js → chunk-W6GO2CYX.js} +2 -2
  44. package/dist/{chunk-7JNJ52CD.js → chunk-WNLF5EDZ.js} +7 -16
  45. package/dist/chunk-WNLF5EDZ.js.map +1 -0
  46. package/dist/{chunk-HHIYT3PI.js → chunk-X6ZZEYO3.js} +4 -4
  47. package/dist/{chunk-QHDPLLK6.js → chunk-YN3SWF53.js} +3 -3
  48. package/dist/{chunk-25MPBIK3.js → chunk-ZUGH4MQG.js} +3 -3
  49. package/dist/commands/build/marketplace.js +6 -6
  50. package/dist/commands/build/plugins.js +8 -8
  51. package/dist/commands/compile.js +14 -14
  52. package/dist/commands/doctor.js +13 -13
  53. package/dist/commands/edit.js +71 -242
  54. package/dist/commands/edit.js.map +1 -1
  55. package/dist/commands/eject.js +12 -12
  56. package/dist/commands/init.js +39 -39
  57. package/dist/commands/list.js +9 -9
  58. package/dist/commands/new/marketplace.js +6 -6
  59. package/dist/commands/search.js +11 -11
  60. package/dist/commands/share.js +11 -11
  61. package/dist/commands/uninstall.js +13 -13
  62. package/dist/commands/update.js +8 -8
  63. package/dist/components/common/removal-plan-confirm.js +2 -2
  64. package/dist/components/common/select-list.js +2 -2
  65. package/dist/components/wizard/category-grid.js +4 -4
  66. package/dist/components/wizard/checkbox-grid.js +4 -4
  67. package/dist/components/wizard/domain-selection.js +9 -9
  68. package/dist/components/wizard/run-wizard-session.js +26 -26
  69. package/dist/components/wizard/scroll-affordance.js +2 -2
  70. package/dist/components/wizard/skill-agent-summary.js +5 -5
  71. package/dist/components/wizard/source-grid.js +5 -5
  72. package/dist/components/wizard/stack-selection.js +7 -7
  73. package/dist/components/wizard/step-agents.js +8 -8
  74. package/dist/components/wizard/step-build.js +7 -7
  75. package/dist/components/wizard/step-confirm.js +9 -9
  76. package/dist/components/wizard/step-sources.js +8 -8
  77. package/dist/components/wizard/step-stack.js +8 -8
  78. package/dist/components/wizard/summary-panel.js +8 -8
  79. package/dist/components/wizard/toast.js +2 -2
  80. package/dist/components/wizard/wizard-layout.js +12 -12
  81. package/dist/components/wizard/wizard-tabs.js +2 -2
  82. package/dist/components/wizard/wizard.js +25 -25
  83. package/dist/hooks/init.js +39 -39
  84. package/dist/load-agent-defs-5XMVB3MU.js +14 -0
  85. package/dist/recompile-project-agents-7PQWYQ6B.js +18 -0
  86. package/dist/{source-loader-7KZ3MD5O.js → source-loader-FRJTCSDL.js} +4 -4
  87. package/dist/stores/wizard-store.js +4 -4
  88. package/package.json +5 -2
  89. package/dist/chunk-7JNJ52CD.js.map +0 -1
  90. package/dist/chunk-A4KDXNOT.js.map +0 -1
  91. package/dist/chunk-V3I7VQ7N.js.map +0 -1
  92. package/dist/chunk-Y47EV74W.js.map +0 -1
  93. package/dist/load-agent-defs-3C27ENC7.js +0 -14
  94. package/dist/recompile-project-agents-DGNBCU3N.js +0 -18
  95. /package/dist/{chunk-TZ2YJJKK.js.map → chunk-23DNVNFP.js.map} +0 -0
  96. /package/dist/{chunk-ZXKBERQU.js.map → chunk-27AVGFXH.js.map} +0 -0
  97. /package/dist/{chunk-SXVHSOTH.js.map → chunk-3DIDV6H3.js.map} +0 -0
  98. /package/dist/{chunk-GE3WKJ6Q.js.map → chunk-3LZNY46H.js.map} +0 -0
  99. /package/dist/{chunk-MPTNC32T.js.map → chunk-4HWOYYY7.js.map} +0 -0
  100. /package/dist/{chunk-MAWNVT2C.js.map → chunk-4UKMQUAU.js.map} +0 -0
  101. /package/dist/{chunk-G6UREQ4V.js.map → chunk-5JUQKGCP.js.map} +0 -0
  102. /package/dist/{chunk-T6UWJAB3.js.map → chunk-6WGXTB2L.js.map} +0 -0
  103. /package/dist/{chunk-SAYZWCH6.js.map → chunk-7PYXS2QU.js.map} +0 -0
  104. /package/dist/{chunk-RZDXDMT6.js.map → chunk-CMJBKQUH.js.map} +0 -0
  105. /package/dist/{chunk-XZEVWPX6.js.map → chunk-DJEO3F2H.js.map} +0 -0
  106. /package/dist/{chunk-PMJWD27C.js.map → chunk-GE7NUPMI.js.map} +0 -0
  107. /package/dist/{chunk-PNB3524H.js.map → chunk-GRL73YPF.js.map} +0 -0
  108. /package/dist/{chunk-Y3VIRVVE.js.map → chunk-H4ZKGGTE.js.map} +0 -0
  109. /package/dist/{chunk-LFWLEDUG.js.map → chunk-HI6YB7XP.js.map} +0 -0
  110. /package/dist/{chunk-SCOQ34YM.js.map → chunk-HL3GYRMR.js.map} +0 -0
  111. /package/dist/{chunk-NBXXFIIW.js.map → chunk-HR7TK2XW.js.map} +0 -0
  112. /package/dist/{chunk-ZR4YPKXQ.js.map → chunk-JIBCVXXL.js.map} +0 -0
  113. /package/dist/{chunk-JQRJQ4SS.js.map → chunk-JPMV4E4E.js.map} +0 -0
  114. /package/dist/{chunk-4NDBUJHK.js.map → chunk-JVUN6AOO.js.map} +0 -0
  115. /package/dist/{chunk-RAHSOJQ2.js.map → chunk-KQ3PDARZ.js.map} +0 -0
  116. /package/dist/{chunk-PXWG7KFO.js.map → chunk-KTLKR4YY.js.map} +0 -0
  117. /package/dist/{chunk-6L75SQZU.js.map → chunk-L3W2JWBA.js.map} +0 -0
  118. /package/dist/{chunk-TTY6DPJN.js.map → chunk-LFUJCRCT.js.map} +0 -0
  119. /package/dist/{chunk-V5WXIM2F.js.map → chunk-NU2K5G54.js.map} +0 -0
  120. /package/dist/{chunk-G4JK7WVO.js.map → chunk-P6I72PR3.js.map} +0 -0
  121. /package/dist/{chunk-WWIFNPJG.js.map → chunk-PCFUXQJA.js.map} +0 -0
  122. /package/dist/{chunk-DAIEQJIF.js.map → chunk-PLX2FLEQ.js.map} +0 -0
  123. /package/dist/{chunk-2VUYFTUB.js.map → chunk-QWFG7Y3R.js.map} +0 -0
  124. /package/dist/{chunk-WVUDLKIO.js.map → chunk-SLBL3WIP.js.map} +0 -0
  125. /package/dist/{chunk-HWEKHVLE.js.map → chunk-TW35AEB4.js.map} +0 -0
  126. /package/dist/{chunk-VAPTVR3J.js.map → chunk-VVRI35SK.js.map} +0 -0
  127. /package/dist/{chunk-6LF4CQBY.js.map → chunk-W5KEYSOL.js.map} +0 -0
  128. /package/dist/{chunk-TODCQFRB.js.map → chunk-W6GO2CYX.js.map} +0 -0
  129. /package/dist/{chunk-HHIYT3PI.js.map → chunk-X6ZZEYO3.js.map} +0 -0
  130. /package/dist/{chunk-QHDPLLK6.js.map → chunk-YN3SWF53.js.map} +0 -0
  131. /package/dist/{chunk-25MPBIK3.js.map → chunk-ZUGH4MQG.js.map} +0 -0
  132. /package/dist/{load-agent-defs-3C27ENC7.js.map → load-agent-defs-5XMVB3MU.js.map} +0 -0
  133. /package/dist/{recompile-project-agents-DGNBCU3N.js.map → recompile-project-agents-7PQWYQ6B.js.map} +0 -0
  134. /package/dist/{source-loader-7KZ3MD5O.js.map → source-loader-FRJTCSDL.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  typedFromEntries,
10
10
  typedKeys,
11
11
  typedValues
12
- } from "./chunk-V5WXIM2F.js";
12
+ } from "./chunk-NU2K5G54.js";
13
13
  import {
14
14
  AGENT_NAMES,
15
15
  AUTHOR_HANDLE_PATTERN,
@@ -17,6 +17,7 @@ import {
17
17
  CACHE_READABLE_PREFIX_LENGTH,
18
18
  CLAUDE_DIR,
19
19
  CLI_INVOKE_COMMAND,
20
+ CODEX_MODEL_NAMES,
20
21
  DEFAULT_BRANDING,
21
22
  DEFAULT_PLUGIN_NAME,
22
23
  DEFAULT_PUBLIC_SOURCE_NAME,
@@ -69,6 +70,7 @@ import {
69
70
  editorConfigUrl,
70
71
  effectivelyExcludedSkillIds,
71
72
  globalInstallRoot,
73
+ inAnEnglishList,
72
74
  isActiveAt,
73
75
  isExclusiveCategory,
74
76
  isGlobalTombstone,
@@ -78,11 +80,12 @@ import {
78
80
  orderDomains,
79
81
  resolveAssignment,
80
82
  resolveLoadState,
83
+ seatDiagnostics,
81
84
  seatedCatalog,
82
85
  seedAgentScope,
83
86
  sourceDirName,
84
87
  validateSelection
85
- } from "./chunk-ENGYJCTF.js";
88
+ } from "./chunk-AG3ZVM3B.js";
86
89
  import {
87
90
  defaultCategories,
88
91
  defaultRules,
@@ -168,21 +171,33 @@ function renderAgentRoleToml(agent, body) {
168
171
  refuseBlankInstructions(agent.name, body);
169
172
  return [
170
173
  ...scalarLines(agent, body),
171
- // Last, always: every bare key after a table header belongs to that table, so a scalar
172
- // emitted below `[features]` would become `features.model` and take the file with it.
174
+ // Last: every bare key after a table header belongs to that table.
173
175
  ...shellToolTable(agent)
174
176
  ].join("\n");
175
177
  }
176
178
  var CODEX_DEVELOPER_INSTRUCTIONS_OPENER = `developer_instructions = """`;
177
179
  var CODEX_EFFORT_KEY = "model_reasoning_effort";
180
+ var PINNED_MODEL_RESTING_EFFORT = "medium";
178
181
  function scalarLines(agent, body) {
179
182
  return [
180
183
  `name = ${basicString(agent.name)}`,
181
184
  `description = ${basicString(agent.description)}`,
182
- ...agent.effort === void 0 ? [] : [`${CODEX_EFFORT_KEY} = ${basicString(agent.effort)}`],
185
+ ...modelLines(agent),
183
186
  developerInstructions(body)
184
187
  ];
185
188
  }
189
+ function modelLines(agent) {
190
+ if (agent.codexModel === void 0) {
191
+ return agent.effort === void 0 ? [] : [effortLine(agent.effort)];
192
+ }
193
+ return [
194
+ `model = ${basicString(agent.codexModel)}`,
195
+ effortLine(agent.effort ?? PINNED_MODEL_RESTING_EFFORT)
196
+ ];
197
+ }
198
+ function effortLine(effort) {
199
+ return `${CODEX_EFFORT_KEY} = ${basicString(effort)}`;
200
+ }
186
201
  function developerInstructions(body) {
187
202
  return `${CODEX_DEVELOPER_INSTRUCTIONS_OPENER}
188
203
  ${asMultilineString(body)}
@@ -259,12 +274,6 @@ function agentsLeftOutOfCodexMessage() {
259
274
  function unexpressibleOnCodexMessage() {
260
275
  return `Codex cannot express ${inAnEnglishList(UNEXPRESSIBLE_ON_CODEX)}, so the agent role files it wrote carry none of them.`;
261
276
  }
262
- function inAnEnglishList(items) {
263
- const last = items.at(-1);
264
- if (last === void 0) return "";
265
- if (items.length === 1) return last;
266
- return `${items.slice(0, -1).join(", ")} and ${last}`;
267
- }
268
277
 
269
278
  // ../compile/src/agent-source.ts
270
279
  var LIQUID_SYNTAX_PATTERN = /\{\{|\}\}|\{%|%\}/g;
@@ -1992,6 +2001,12 @@ function formatZodErrors(error) {
1992
2001
 
1993
2002
  // src/cli/types/matrix.ts
1994
2003
  var MODEL_NAMES2 = ["sonnet", "opus", "haiku", "fable", "inherit"];
2004
+ var CODEX_MODEL_NAMES2 = [
2005
+ "gpt-6-astra",
2006
+ "gpt-5.6-sol",
2007
+ "gpt-5.6-terra",
2008
+ "gpt-5.6-luna"
2009
+ ];
1995
2010
  var EFFORT_NAMES2 = ["low", "medium", "high", "xhigh", "max"];
1996
2011
  var PERMISSION_MODES = [
1997
2012
  "default",
@@ -2006,6 +2021,7 @@ var CACHE_TTLS = ["5m", "1h"];
2006
2021
 
2007
2022
  // src/cli/lib/schemas.ts
2008
2023
  var modelNameSchema = z2.enum(MODEL_NAMES2);
2024
+ var codexModelNameSchema = z2.enum(CODEX_MODEL_NAMES2);
2009
2025
  var effortLevelSchema = z2.enum(EFFORT_NAMES2);
2010
2026
  var permissionModeSchema = z2.enum(PERMISSION_MODES);
2011
2027
  var skillSlugSchema = z2.enum(SKILL_SLUGS);
@@ -2049,7 +2065,7 @@ var skillAssignmentSchema = z2.object({
2049
2065
  path: z2.string().exactOptional()
2050
2066
  });
2051
2067
  var skillFrontmatterLoaderSchema = z2.object({
2052
- /** Lenient (any string): local/custom skills have non-builtin IDs */
2068
+ /** Lenient: local/custom skills have non-builtin IDs. */
2053
2069
  name: z2.string(),
2054
2070
  description: z2.string(),
2055
2071
  model: modelNameSchema.exactOptional()
@@ -2080,7 +2096,7 @@ var pluginManifestObjectSchema = z2.object({
2080
2096
  version: z2.string().exactOptional(),
2081
2097
  description: z2.string().exactOptional(),
2082
2098
  author: pluginAuthorSchema.exactOptional(),
2083
- /** Lenient: a plugin authored elsewhere may carry any category string or none at all */
2099
+ /** A plugin authored elsewhere may carry any category, or none. */
2084
2100
  category: z2.string().exactOptional(),
2085
2101
  keywords: z2.array(z2.string()).exactOptional(),
2086
2102
  commands: z2.union([z2.string(), z2.array(z2.string())]).exactOptional(),
@@ -2100,14 +2116,7 @@ var agentYamlConfigSchema = z2.object({
2100
2116
  disallowedTools: z2.array(z2.string()).exactOptional(),
2101
2117
  permissionMode: permissionModeSchema.exactOptional(),
2102
2118
  isolation: agentIsolationSchema.exactOptional(),
2103
- /**
2104
- * The same contract `agentFrontmatterValidationSchema` reads the compiled agent back through.
2105
- * The lenient {@link hooksRecordSchema} used to sit here, and every key its definition declares
2106
- * is optional — so a block written with its actions one level flat was stripped to `{}` with no
2107
- * error, `agent.liquid` emitted the empty definition, and the refusal arrived from the
2108
- * frontmatter reader against a compiled `.md` the user never wrote. This is the last boundary
2109
- * that still knows which `metadata.yaml` the value came from.
2110
- */
2119
+ /** Strict, like the frontmatter reader: a lenient read silently emptied malformed hooks. */
2111
2120
  hooks: strictHooksRecordSchema.exactOptional(),
2112
2121
  experimental: agentExperimentalSchema.exactOptional(),
2113
2122
  outputFormat: z2.string().exactOptional(),
@@ -2149,21 +2158,18 @@ function refuseRenamedFields(config, ctx) {
2149
2158
  }
2150
2159
  var renamedFieldGuard = z2.unknown().superRefine(refuseRenamedFields);
2151
2160
  var projectConfigFields = z2.object({
2152
- /** Project/plugin name in kebab-case */
2153
2161
  name: z2.string().exactOptional(),
2154
2162
  description: z2.string().exactOptional(),
2155
- /** Per-agent configuration with scope (e.g., [{ name: "web-developer", scope: "project" }]) */
2156
2163
  agents: z2.array(
2157
2164
  z2.object({
2158
2165
  name: z2.string(),
2159
2166
  scope: z2.enum(["project", "global"]),
2160
- /** Per-agent overrides of the agent's own metadata defaults */
2161
2167
  model: modelNameSchema.exactOptional(),
2168
+ codexModel: codexModelNameSchema.exactOptional(),
2162
2169
  effort: effortLevelSchema.exactOptional(),
2163
2170
  excluded: z2.boolean().exactOptional()
2164
2171
  })
2165
2172
  ).exactOptional(),
2166
- /** Per-skill configuration with scope and provenance */
2167
2173
  skills: z2.array(
2168
2174
  z2.object({
2169
2175
  id: z2.string(),
@@ -2172,19 +2178,15 @@ var projectConfigFields = z2.object({
2172
2178
  excluded: z2.boolean().exactOptional()
2173
2179
  })
2174
2180
  ).exactOptional(),
2175
- /** Author handle (e.g., "@vince") */
2176
2181
  author: z2.string().exactOptional(),
2177
- /** Selected domains from the wizard (persisted for edit mode restoration) */
2178
2182
  selectedDomains: z2.array(z2.string()).exactOptional(),
2179
- /** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */
2180
2183
  stack: z2.record(z2.string(), stackAgentConfigSchema).exactOptional(),
2181
- /** The marketplace this install reads skills from, as a path or URL (e.g., "github:my-org/skills") */
2184
+ /** A path or URL (e.g., "github:my-org/skills") */
2182
2185
  marketplace: z2.string().exactOptional(),
2183
- /** The name that marketplace's manifest gives it, which plugins are registered under */
2186
+ /** The name the marketplace's manifest gives it, which plugins are registered under */
2184
2187
  marketplaceName: z2.string().exactOptional(),
2185
- /** Separate source for agents when different from skills source */
2186
2188
  agentsSource: z2.string().exactOptional(),
2187
- /** Tracked project installation paths (global config only) */
2189
+ /** Global config only */
2188
2190
  projects: z2.array(z2.string()).exactOptional()
2189
2191
  }).passthrough();
2190
2192
  var projectConfigLoaderSchema = renamedFieldGuard.pipe(projectConfigFields);
@@ -2235,30 +2237,22 @@ var skillRulesFileSchema = z2.object({
2235
2237
  relationships: relationshipDefinitionsSchema.exactOptional()
2236
2238
  });
2237
2239
  var localRawMetadataSchema = z2.object({
2238
- /** Short name shown in the wizard grid (e.g., "my-custom-react") */
2239
2240
  displayName: z2.string(),
2240
- /** Kebab-case short key for alias resolution (e.g., "react") */
2241
2241
  slug: z2.string(),
2242
- /** One-line description for the wizard */
2243
2242
  cliDescription: z2.string().exactOptional(),
2244
- /** Category to place this skill in (e.g., "web-framework") */
2245
2243
  category: categoryPathSchema,
2246
- /** When an AI agent should invoke this skill */
2247
2244
  usageGuidance: z2.string().exactOptional(),
2248
- /** Domain this skill belongs to (e.g., "web", "api", "cli") */
2249
2245
  domain: z2.string(),
2250
2246
  /** True if this skill was created outside the CLI's built-in vocabulary */
2251
2247
  custom: z2.boolean().exactOptional()
2252
2248
  }).passthrough();
2253
2249
  var localSkillMetadataSchema = z2.object({
2254
2250
  forkedFrom: z2.object({
2255
- /** Original skill ID before forking — lenient (any string) since custom/extra-source skills have non-builtin IDs */
2251
+ /** Lenient: custom and extra-source skills have non-builtin IDs */
2256
2252
  skillId: z2.string(),
2257
2253
  /** SHA hash of the original content at fork time (for diff detection) */
2258
2254
  contentHash: z2.string(),
2259
- /** ISO date when the fork was created */
2260
2255
  date: z2.string(),
2261
- /** Source URL the skill was installed from (e.g., "github:agents-inc/skills") */
2262
2256
  source: z2.string().exactOptional(),
2263
2257
  /** Directory inside that repository, for a skill only its own bytes can install again */
2264
2258
  path: z2.string().exactOptional()
@@ -2268,9 +2262,7 @@ var stackSchema = z2.object({
2268
2262
  id: z2.string().min(1),
2269
2263
  name: z2.string().min(1),
2270
2264
  description: z2.string(),
2271
- /** Maps agent IDs to their category-to-skill assignments */
2272
2265
  agents: z2.record(z2.string(), stackAgentConfigSchema),
2273
- /** High-level philosophy guiding this stack's technology choices */
2274
2266
  philosophy: z2.string().exactOptional()
2275
2267
  });
2276
2268
  var stacksConfigSchema = z2.object({
@@ -2301,11 +2293,7 @@ var marketplaceMetadataSchema = z2.object({
2301
2293
  var MARKETPLACE_NAME_REFUSAL = "A marketplace name is kebab-case: lowercase letters, numbers and hyphens, starting with a letter (e.g. 'acme-skills'). Rename it in this manifest \u2014 Claude Code registers every plugin under it and accepts no other shape.";
2302
2294
  var marketplaceSchema = z2.object({
2303
2295
  $schema: z2.string().exactOptional(),
2304
- /**
2305
- * Kebab-case, because this name is the namespace Claude Code registers plugins under and the
2306
- * CLI piggybacks on what Claude Code accepts (owner ruling 2026-08-20). Held to the same rule
2307
- * `build marketplace` refuses to publish under, so what this CLI emits is what it can read back.
2308
- */
2296
+ /** Kebab-case: the namespace Claude Code registers plugins under (owner ruling 2026-08-20). */
2309
2297
  name: z2.string().min(1).regex(KEBAB_CASE_PATTERN, { message: MARKETPLACE_NAME_REFUSAL }),
2310
2298
  version: z2.string().min(1),
2311
2299
  description: z2.string().exactOptional(),
@@ -2319,28 +2307,22 @@ var sourceRevalidationSchema = z2.object({
2319
2307
  etag: z2.string().min(1).exactOptional()
2320
2308
  });
2321
2309
  var permissionConfigSchema = z2.object({
2322
- /** Tool names or patterns to explicitly allow */
2323
2310
  allow: z2.array(z2.string()).exactOptional(),
2324
- /** Tool names or patterns to explicitly deny */
2325
2311
  deny: z2.array(z2.string()).exactOptional()
2326
2312
  });
2327
2313
  var settingsFileSchema = z2.object({
2328
2314
  permissions: permissionConfigSchema.exactOptional()
2329
2315
  }).passthrough();
2330
2316
  var brandingConfigSchema = z2.object({
2331
- /** Custom CLI name (e.g., "Acme Dev Tools") */
2332
2317
  name: z2.string().exactOptional()
2333
2318
  });
2334
2319
  var projectSourceConfigFields = z2.object({
2335
- /** The marketplace this install reads skills from, as a path or URL */
2320
+ /** A path or URL */
2336
2321
  marketplace: z2.string().exactOptional(),
2337
- /** Author handle for this project's config */
2338
2322
  author: z2.string().exactOptional(),
2339
- /** The name that marketplace's manifest gives it, which plugins are registered under */
2323
+ /** The name the marketplace's manifest gives it, which plugins are registered under */
2340
2324
  marketplaceName: z2.string().exactOptional(),
2341
- /** Separate source for agent definitions (when different from skills) */
2342
2325
  agentsSource: z2.string().exactOptional(),
2343
- /** Branding overrides for white-labeling the CLI */
2344
2326
  branding: brandingConfigSchema.exactOptional(),
2345
2327
  /** Custom skills directory override (default: "src/skills") */
2346
2328
  skillsDir: z2.string().exactOptional(),
@@ -2406,36 +2388,23 @@ var skillFrontmatterValidationSchema = z2.object({
2406
2388
  "argument-hint": z2.string().exactOptional()
2407
2389
  }).strict();
2408
2390
  var forkedFromSchema = z2.object({
2409
- /** Original skill ID */
2410
2391
  skillId: z2.string(),
2411
- /** Version of the original at fork time */
2412
2392
  version: z2.number().int().min(1).exactOptional(),
2413
- /** Content hash of the original at fork time */
2414
2393
  contentHash: z2.string(),
2415
- /** Source URL or identifier */
2416
2394
  source: z2.string().exactOptional(),
2417
2395
  /** Directory inside that source, for a skill only its own bytes can install again */
2418
2396
  path: z2.string().exactOptional(),
2419
- /** ISO date of the fork */
2420
2397
  date: z2.string()
2421
2398
  });
2422
2399
  var CLI_DESCRIPTION_MAX_LENGTH = 60;
2423
2400
  var skillMetadataBaseSchema = z2.object({
2424
- /** Author handle — must start with @ (e.g., "@vince") */
2425
2401
  author: z2.string().regex(AUTHOR_HANDLE_PATTERN),
2426
- /** Short display name for the wizard grid (max 30 chars) */
2427
2402
  displayName: z2.string().min(1).max(30),
2428
- /** One-line description for the wizard (max 60 chars recommended; over-length is a validation warning) */
2429
2403
  cliDescription: z2.string().min(1).max(CLI_DESCRIPTION_MAX_LENGTH),
2430
- /** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */
2431
2404
  usageGuidance: z2.string().min(10),
2432
- /** 7-char hex SHA of skill content (for change detection) */
2433
2405
  contentHash: z2.string().regex(/^[a-f0-9]{7}$/).exactOptional(),
2434
- /** ISO date of last update */
2435
2406
  updated: z2.string().exactOptional(),
2436
- /** Provenance tracking when skill was forked from another */
2437
2407
  forkedFrom: forkedFromSchema.exactOptional(),
2438
- /** Domain assignment from metadata */
2439
2408
  domain: z2.string().exactOptional(),
2440
2409
  /** True if this skill was created outside the CLI's built-in vocabulary */
2441
2410
  custom: z2.boolean().exactOptional()
@@ -2445,7 +2414,6 @@ function unknownMetadataSlugRefusal(input) {
2445
2414
  return `${named} is not a slug the public catalogue carries. A published skill's slug is held to that catalogue unless the skill declares it is not from it \u2014 add '${METADATA_KEYS.CUSTOM}: true' beside it in this ${STANDARD_FILES.METADATA_YAML} and the slug is read as your marketplace's own, any kebab-case name. That declaration is how a skill outside the catalogue's vocabulary is carried; a skill the catalogue does carry names its catalogue slug and leaves it off.`;
2446
2415
  }
2447
2416
  var metadataValidationSchema = skillMetadataBaseSchema.extend({
2448
- /** Domain-prefixed category — must be a known built-in category */
2449
2417
  category: z2.enum(CATEGORIES),
2450
2418
  /**
2451
2419
  * Kebab-case short key — must be a known built-in slug, unless the file declares
@@ -2456,9 +2424,7 @@ var metadataValidationSchema = skillMetadataBaseSchema.extend({
2456
2424
  })
2457
2425
  }).strict();
2458
2426
  var customMetadataValidationSchema = skillMetadataBaseSchema.extend({
2459
- /** Any string category — custom skills may define their own categories */
2460
2427
  category: z2.string(),
2461
- /** Kebab-case short key for alias resolution, search, and relationship rules */
2462
2428
  slug: z2.string().regex(KEBAB_CASE_PATTERN).min(1).max(50)
2463
2429
  });
2464
2430
  var stackSkillAssignmentSchema = z2.object({
@@ -2467,45 +2433,31 @@ var stackSkillAssignmentSchema = z2.object({
2467
2433
  preloaded: z2.boolean().exactOptional()
2468
2434
  }).strict();
2469
2435
  var stackConfigValidationSchema = z2.object({
2470
- /** Unique stack identifier in kebab-case */
2471
2436
  id: z2.string().regex(KEBAB_CASE_PATTERN).exactOptional(),
2472
2437
  name: z2.string().min(1),
2473
2438
  version: z2.string(),
2474
2439
  author: z2.string().min(1),
2475
2440
  description: z2.string().exactOptional(),
2476
- /** ISO date when this stack was first created */
2477
2441
  created: z2.string().exactOptional(),
2478
- /** ISO date of last update */
2479
2442
  updated: z2.string().exactOptional(),
2480
- /** Primary framework this stack is designed for (e.g., "nextjs", "remix") */
2481
2443
  framework: z2.string().exactOptional(),
2482
- /** All skills used in this stack (flat list, at least one required) */
2483
2444
  skills: z2.array(stackSkillAssignmentSchema).min(1),
2484
- /** Agent IDs this stack compiles (at least one required) */
2485
2445
  agents: z2.array(z2.string().regex(KEBAB_CASE_PATTERN)).min(1),
2486
- /** Per-agent skill assignments: { agentId: { category: [skillAssignment] } } */
2487
2446
  agentSkills: z2.record(z2.string(), z2.record(z2.string(), z2.array(stackSkillAssignmentSchema))).exactOptional(),
2488
- /** High-level philosophy guiding technology choices */
2489
2447
  philosophy: z2.string().exactOptional(),
2490
- /** Guiding principles for agents using this stack */
2491
2448
  principles: z2.array(z2.string().min(1)).exactOptional(),
2492
2449
  tags: z2.array(z2.string().regex(KEBAB_CASE_PATTERN)).exactOptional(),
2493
- /** Per-skill overrides: alternative suggestions and lock status */
2494
2450
  overrides: z2.record(
2495
2451
  z2.string(),
2496
2452
  z2.object({
2497
- /** Suggested alternative skill IDs if this one is swapped */
2498
2453
  alternatives: z2.array(z2.string().min(1)).exactOptional(),
2499
- /** If true, this skill cannot be swapped by the user */
2500
2454
  locked: z2.boolean().exactOptional()
2501
2455
  }).strict()
2502
2456
  ).exactOptional(),
2503
- /** Community metrics for sorting/ranking */
2504
2457
  metrics: z2.object({
2505
2458
  upvotes: z2.number().int().min(0).exactOptional(),
2506
2459
  downloads: z2.number().int().min(0).exactOptional()
2507
2460
  }).strict().exactOptional(),
2508
- /** Lifecycle hooks triggered by file changes or commands */
2509
2461
  hooks: strictHooksRecordSchema.exactOptional()
2510
2462
  }).strict();
2511
2463
  function formatZodIssues(issues) {
@@ -2999,6 +2951,9 @@ function isSameMarketplace(a, b, fromDir) {
2999
2951
  return a === b;
3000
2952
  }
3001
2953
 
2954
+ // src/cli/lib/compile-seat.ts
2955
+ seatDiagnostics({ warn, verbose });
2956
+
3002
2957
  // ../compile/src/seed-to-config.ts
3003
2958
  import { groupBy, indexBy, omit as omit2, partition as partition2 } from "remeda";
3004
2959
 
@@ -3196,6 +3151,7 @@ var CANONICAL_AGENT_ENTRY_ORDER = [
3196
3151
  "name",
3197
3152
  "scope",
3198
3153
  "model",
3154
+ "codexModel",
3199
3155
  "effort",
3200
3156
  "excluded"
3201
3157
  ];
@@ -3329,7 +3285,6 @@ function generateProjectConfigWithGlobalImport(cleaned, globalImportPath) {
3329
3285
  const hasProjectDomains = selectedDomains.length > 0;
3330
3286
  const hasStack = stack != null && Object.keys(stack).length > 0;
3331
3287
  const typeImports = buildTypeImports({
3332
- // Always present, spread from global.
3333
3288
  hasSkills: true,
3334
3289
  hasAgents: true,
3335
3290
  hasStack,
@@ -3989,9 +3944,23 @@ function agentScopeConfig(name, entry) {
3989
3944
  name,
3990
3945
  scope: seedAgentScope(entry),
3991
3946
  ...entry?.model !== void 0 && { model: entry.model },
3947
+ ...offeredCodexModel(name, entry?.codexModel),
3992
3948
  ...entry?.effort !== void 0 && { effort: entry.effort }
3993
3949
  };
3994
3950
  }
3951
+ var OFFERED_CODEX_MODELS = new Set(CODEX_MODEL_NAMES);
3952
+ function isOfferedCodexModel(id) {
3953
+ return OFFERED_CODEX_MODELS.has(id);
3954
+ }
3955
+ function offeredCodexModel(agent, id) {
3956
+ if (id === void 0) return {};
3957
+ if (isOfferedCodexModel(id)) return { codexModel: id };
3958
+ diagnostics().warn(codexModelNotOfferedWarning(agent, id));
3959
+ return {};
3960
+ }
3961
+ function codexModelNotOfferedWarning(agent, id) {
3962
+ return `Sub-agent '${agent}' asks for Codex model '${id}', which this version of the CLI does not offer, so it runs on the session's model. Offered: ${inAnEnglishList(CODEX_MODEL_NAMES)}.`;
3963
+ }
3995
3964
  function unwritableAssignmentsError(assignments) {
3996
3965
  return [
3997
3966
  "This configuration cannot be installed: a project-scoped skill never reaches a sub-agent that rests at global scope, so these assignments have nowhere to be written:",
@@ -4021,7 +3990,6 @@ function seedToWizardResult(payload, catalog) {
4021
3990
  skills.push({
4022
3991
  id,
4023
3992
  scope: entry.scope,
4024
- // "eject" is an origin in its own right; anything else names the marketplace it came from.
4025
3993
  origin: entry.install === "eject" ? EJECT_SOURCE : sourceForSkill(skill)
4026
3994
  });
4027
3995
  for (const [agentName, load] of Object.entries(entry.assignments)) {
@@ -4062,22 +4030,16 @@ function seedToWizardResult(payload, catalog) {
4062
4030
  ),
4063
4031
  assignedStack,
4064
4032
  selectedStackId: payload.stackId,
4065
- // Spread-conditional rather than passed through, because absent and present-holding-undefined
4066
- // are different files on disk: a config describing itself with no key is not one describing
4067
- // itself with an empty sentence, and the writer emits whichever key it is handed.
4033
+ // Absent and empty are different files on disk.
4068
4034
  ...payload.description !== void 0 && {
4069
4035
  description: payload.description
4070
4036
  },
4071
4037
  domainSelections,
4072
4038
  selectedDomains: orderDomains(typedKeys2(domainSelections)),
4073
- // Nothing was dropped from a *saved config* — the skipped ids came off the wire and are
4074
- // reported to the user directly, so there is no config removal to explain.
4039
+ // The skipped ids came off the wire and are reported directly; no saved entry was removed.
4075
4040
  unresolvableSkillIds: [],
4076
4041
  cancelled: false,
4077
- // Revalidated here rather than taken on trust from the app that built the payload. That app
4078
- // validated against ITS catalog; this one skips ids it does not know and carries its own
4079
- // relationship rules, so a configuration that was consistent where it was authored can
4080
- // arrive with a requirement genuinely unmet.
4042
+ // Revalidated: the payload was consistent against the authoring app's catalog, not this one.
4081
4043
  validation: validateSelection(
4082
4044
  skills.map((skill) => skill.id),
4083
4045
  catalog
@@ -4461,6 +4423,7 @@ export type AgentScopeConfig = {
4461
4423
  name: AgentName
4462
4424
  scope: 'project' | 'global'
4463
4425
  model?: ${formatLiteralUnion(MODEL_NAMES)}
4426
+ codexModel?: ${formatLiteralUnion(CODEX_MODEL_NAMES)}
4464
4427
  effort?: ${formatLiteralUnion(EFFORT_NAMES)}
4465
4428
  excluded?: boolean
4466
4429
  }
@@ -4612,9 +4575,8 @@ function renderStackProperty(category, skills, catalog) {
4612
4575
  function buildSkillsByCategory(skillIds, categories, catalog) {
4613
4576
  const categorySet = new Set(categories);
4614
4577
  const eligible = [...new Set(skillIds)].map((id) => ({ id, category: catalog.skills[id]?.category })).filter(
4615
- (entry) => entry.category !== void 0 && entry.category !== LOCAL_PSEUDO_CATEGORY && // Boundary cast: a catalogue skill's `category` is a Category, typed `string` on the
4616
- // narrow catalogue shape so the wire `Matrix` satisfies it too. The `has` below IS the
4617
- // runtime check the predicate rests on, so the cast only lets the probe be written.
4578
+ (entry) => entry.category !== void 0 && entry.category !== LOCAL_PSEUDO_CATEGORY && // Boundary cast: typed `string` on the narrow catalogue shape; the `has` is the runtime
4579
+ // check.
4618
4580
  categorySet.has(entry.category)
4619
4581
  );
4620
4582
  return new Map(
@@ -6123,11 +6085,10 @@ function assembleAgentConfig(agentName, definition, agentConfig, resolvedSkills)
6123
6085
  title: definition.title,
6124
6086
  description: definition.description,
6125
6087
  ...model !== void 0 && { model },
6088
+ ...agentConfig.codexModel !== void 0 && { codexModel: agentConfig.codexModel },
6126
6089
  ...effort !== void 0 && { effort },
6127
6090
  tools: definition.tools,
6128
- // Every optional frontmatter field `agent.liquid` reads. Spread conditionally rather
6129
- // than unconditionally, because the template branches on presence — an explicit
6130
- // `undefined` renders as an empty key.
6091
+ // Spread conditionally: the template branches on presence, and `undefined` renders a key.
6131
6092
  ...definition.disallowedTools !== void 0 && {
6132
6093
  disallowedTools: definition.disallowedTools
6133
6094
  },
@@ -6292,6 +6253,7 @@ function buildCompileAgents(config, agents) {
6292
6253
  const buildAgentCompileEntry = (agentConfig) => {
6293
6254
  const tuning = {
6294
6255
  ...agentConfig.model !== void 0 && { model: agentConfig.model },
6256
+ ...agentConfig.codexModel !== void 0 && { codexModel: agentConfig.codexModel },
6295
6257
  ...agentConfig.effort !== void 0 && { effort: agentConfig.effort }
6296
6258
  };
6297
6259
  const agentStack = config.stack?.[agentConfig.name];
@@ -10762,4 +10724,4 @@ export {
10762
10724
  detectMigrations,
10763
10725
  executeMigration
10764
10726
  };
10765
- //# sourceMappingURL=chunk-A4KDXNOT.js.map
10727
+ //# sourceMappingURL=chunk-C2UISKIM.js.map