agents-inc 0.170.0 → 0.170.2

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 (163) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{chunk-BMRUNMPV.js → chunk-2YA4DDRM.js} +35 -35
  3. package/dist/chunk-2YA4DDRM.js.map +1 -0
  4. package/dist/{chunk-44TE3RKH.js → chunk-3ED3KHHD.js} +5 -4
  5. package/dist/chunk-3ED3KHHD.js.map +1 -0
  6. package/dist/{chunk-3G7X2WKI.js → chunk-5BNX73OU.js} +18 -38
  7. package/dist/chunk-5BNX73OU.js.map +1 -0
  8. package/dist/{chunk-7RDMTR64.js → chunk-66AEVERM.js} +785 -256
  9. package/dist/chunk-66AEVERM.js.map +1 -0
  10. package/dist/{chunk-PJWGTNOX.js → chunk-7C3PFRBU.js} +144 -186
  11. package/dist/chunk-7C3PFRBU.js.map +1 -0
  12. package/dist/{chunk-52HDHJ7I.js → chunk-AUNRHWH4.js} +32 -21
  13. package/dist/chunk-AUNRHWH4.js.map +1 -0
  14. package/dist/{chunk-KOLDW6SF.js → chunk-BBDGYJHX.js} +2 -2
  15. package/dist/chunk-BBDGYJHX.js.map +1 -0
  16. package/dist/{chunk-SZYQISA2.js → chunk-ELV5WDS3.js} +43 -29
  17. package/dist/chunk-ELV5WDS3.js.map +1 -0
  18. package/dist/{chunk-MQ6CGZNJ.js → chunk-GAKVZNTX.js} +1879 -2019
  19. package/dist/chunk-GAKVZNTX.js.map +1 -0
  20. package/dist/chunk-GEMW5RQ2.js +1169 -0
  21. package/dist/chunk-GEMW5RQ2.js.map +1 -0
  22. package/dist/{chunk-NQW25DCF.js → chunk-GHHJYNAN.js} +1 -7
  23. package/dist/chunk-GHHJYNAN.js.map +1 -0
  24. package/dist/{chunk-WTWMGH2C.js → chunk-HACRR422.js} +2 -2
  25. package/dist/chunk-HACRR422.js.map +1 -0
  26. package/dist/{chunk-F2BHT5C4.js → chunk-IWY5IR4F.js} +129 -151
  27. package/dist/chunk-IWY5IR4F.js.map +1 -0
  28. package/dist/{chunk-JFLVEFFP.js → chunk-KIK5EZYD.js} +1 -1
  29. package/dist/chunk-KIK5EZYD.js.map +1 -0
  30. package/dist/{chunk-USVBYQSQ.js → chunk-O4LN3HFI.js} +16 -6
  31. package/dist/chunk-O4LN3HFI.js.map +1 -0
  32. package/dist/{chunk-RIPSGNLU.js → chunk-OCAVW6N5.js} +3 -3
  33. package/dist/chunk-OCAVW6N5.js.map +1 -0
  34. package/dist/{chunk-4AAOOAIN.js → chunk-P6CYS4JK.js} +2 -2
  35. package/dist/chunk-P6CYS4JK.js.map +1 -0
  36. package/dist/chunk-PLFANHRZ.js +35 -0
  37. package/dist/chunk-PLFANHRZ.js.map +1 -0
  38. package/dist/{chunk-6ZRH5RHC.js → chunk-PMUZR4XO.js} +4 -4
  39. package/dist/chunk-PMUZR4XO.js.map +1 -0
  40. package/dist/{chunk-F5EBEATU.js → chunk-PSUTNOQ2.js} +34 -46
  41. package/dist/chunk-PSUTNOQ2.js.map +1 -0
  42. package/dist/chunk-RIK45Q4I.js +103 -0
  43. package/dist/chunk-RIK45Q4I.js.map +1 -0
  44. package/dist/{chunk-HED2DAXZ.js → chunk-THO7LO5B.js} +5 -5
  45. package/dist/chunk-THO7LO5B.js.map +1 -0
  46. package/dist/{chunk-OYJQUA3D.js → chunk-YGDWHDOY.js} +31 -13
  47. package/dist/chunk-YGDWHDOY.js.map +1 -0
  48. package/dist/{chunk-NCWDK6L7.js → chunk-YXKTY5WM.js} +254 -379
  49. package/dist/chunk-YXKTY5WM.js.map +1 -0
  50. package/dist/{chunk-NEZ4OAOL.js → chunk-ZEGM3MVR.js} +3 -5
  51. package/dist/chunk-ZEGM3MVR.js.map +1 -0
  52. package/dist/commands/build/marketplace.js +46 -46
  53. package/dist/commands/build/marketplace.js.map +1 -1
  54. package/dist/commands/build/plugins.js +25 -28
  55. package/dist/commands/build/plugins.js.map +1 -1
  56. package/dist/commands/compile.js +87 -178
  57. package/dist/commands/compile.js.map +1 -1
  58. package/dist/commands/doctor.js +510 -360
  59. package/dist/commands/doctor.js.map +1 -1
  60. package/dist/commands/edit.js +451 -357
  61. package/dist/commands/edit.js.map +1 -1
  62. package/dist/commands/eject.js +144 -125
  63. package/dist/commands/eject.js.map +1 -1
  64. package/dist/commands/init.js +20 -27
  65. package/dist/commands/list.js +39 -55
  66. package/dist/commands/list.js.map +1 -1
  67. package/dist/commands/new/marketplace.js +6 -11
  68. package/dist/commands/new/marketplace.js.map +1 -1
  69. package/dist/commands/search.js +35 -32
  70. package/dist/commands/search.js.map +1 -1
  71. package/dist/commands/share.js +17 -77
  72. package/dist/commands/share.js.map +1 -1
  73. package/dist/commands/uninstall.js +159 -222
  74. package/dist/commands/uninstall.js.map +1 -1
  75. package/dist/commands/update.js +9 -32
  76. package/dist/commands/update.js.map +1 -1
  77. package/dist/components/common/prompt-confirm.js +2 -2
  78. package/dist/components/common/removal-plan-confirm.js +2 -2
  79. package/dist/components/common/scroll-affordance.js +2 -2
  80. package/dist/components/common/select-list.js +2 -2
  81. package/dist/components/common/skill-agent-summary.js +4 -4
  82. package/dist/components/common/spinner.js +2 -4
  83. package/dist/components/common/summary-panel.js +5 -5
  84. package/dist/components/common/summary-panel.js.map +1 -1
  85. package/dist/config-exports.js +7 -3
  86. package/dist/config-exports.js.map +1 -1
  87. package/dist/hooks/init.js +18 -19
  88. package/dist/hooks/init.js.map +1 -1
  89. package/dist/index.js.map +1 -1
  90. package/dist/load-agent-defs-6QUUMGHK.js +14 -0
  91. package/dist/recompile-project-agents-I33KQJFB.js +65 -0
  92. package/dist/recompile-project-agents-I33KQJFB.js.map +1 -0
  93. package/dist/{source-loader-C5SQXZXI.js → source-loader-TTJVW2ER.js} +5 -5
  94. package/dist/src/agents/developer/ai-developer/playbook.md +2 -5
  95. package/dist/src/agents/developer/api-developer/playbook.md +2 -5
  96. package/dist/src/agents/developer/cli-developer/playbook.md +2 -5
  97. package/dist/src/agents/developer/web-developer/playbook.md +2 -5
  98. package/dist/src/agents/meta/agent-summoner/output.md +2 -2
  99. package/dist/src/agents/meta/agent-summoner/playbook.md +1 -13
  100. package/dist/src/agents/meta/codex-keeper/critical-requirements.md +2 -5
  101. package/dist/src/agents/meta/convention-keeper/critical-requirements.md +2 -4
  102. package/dist/src/agents/tester/ai-tester/critical-requirements.md +1 -2
  103. package/dist/src/agents/tester/ai-tester/playbook.md +2 -0
  104. package/dist/src/agents/tester/api-tester/critical-requirements.md +1 -2
  105. package/dist/src/agents/tester/api-tester/playbook.md +2 -0
  106. package/dist/src/agents/tester/cli-tester/critical-requirements.md +1 -2
  107. package/dist/src/agents/tester/cli-tester/playbook.md +2 -0
  108. package/dist/src/agents/tester/web-tester/critical-requirements.md +1 -2
  109. package/dist/src/agents/tester/web-tester/playbook.md +2 -0
  110. package/package.json +9 -8
  111. package/src/agents/developer/ai-developer/playbook.md +2 -5
  112. package/src/agents/developer/api-developer/playbook.md +2 -5
  113. package/src/agents/developer/cli-developer/playbook.md +2 -5
  114. package/src/agents/developer/web-developer/playbook.md +2 -5
  115. package/src/agents/meta/agent-summoner/output.md +2 -2
  116. package/src/agents/meta/agent-summoner/playbook.md +1 -13
  117. package/src/agents/meta/codex-keeper/critical-requirements.md +2 -5
  118. package/src/agents/meta/convention-keeper/critical-requirements.md +2 -4
  119. package/src/agents/tester/ai-tester/critical-requirements.md +1 -2
  120. package/src/agents/tester/ai-tester/playbook.md +2 -0
  121. package/src/agents/tester/api-tester/critical-requirements.md +1 -2
  122. package/src/agents/tester/api-tester/playbook.md +2 -0
  123. package/src/agents/tester/cli-tester/critical-requirements.md +1 -2
  124. package/src/agents/tester/cli-tester/playbook.md +2 -0
  125. package/src/agents/tester/web-tester/critical-requirements.md +1 -2
  126. package/src/agents/tester/web-tester/playbook.md +2 -0
  127. package/src/schemas/project-config.schema.json +0 -3
  128. package/src/schemas/project-source-config.schema.json +0 -6
  129. package/dist/chunk-3G7X2WKI.js.map +0 -1
  130. package/dist/chunk-44TE3RKH.js.map +0 -1
  131. package/dist/chunk-4AAOOAIN.js.map +0 -1
  132. package/dist/chunk-52HDHJ7I.js.map +0 -1
  133. package/dist/chunk-6HNXYYVF.js +0 -373
  134. package/dist/chunk-6HNXYYVF.js.map +0 -1
  135. package/dist/chunk-6ZRH5RHC.js.map +0 -1
  136. package/dist/chunk-7RDMTR64.js.map +0 -1
  137. package/dist/chunk-BMRUNMPV.js.map +0 -1
  138. package/dist/chunk-CLPUWOSA.js +0 -46
  139. package/dist/chunk-CLPUWOSA.js.map +0 -1
  140. package/dist/chunk-F2BHT5C4.js.map +0 -1
  141. package/dist/chunk-F5EBEATU.js.map +0 -1
  142. package/dist/chunk-HED2DAXZ.js.map +0 -1
  143. package/dist/chunk-JFLVEFFP.js.map +0 -1
  144. package/dist/chunk-KOLDW6SF.js.map +0 -1
  145. package/dist/chunk-MQ6CGZNJ.js.map +0 -1
  146. package/dist/chunk-NCWDK6L7.js.map +0 -1
  147. package/dist/chunk-NEZ4OAOL.js.map +0 -1
  148. package/dist/chunk-NIHUOWE4.js +0 -106
  149. package/dist/chunk-NIHUOWE4.js.map +0 -1
  150. package/dist/chunk-NQW25DCF.js.map +0 -1
  151. package/dist/chunk-OYJQUA3D.js.map +0 -1
  152. package/dist/chunk-PJWGTNOX.js.map +0 -1
  153. package/dist/chunk-RIPSGNLU.js.map +0 -1
  154. package/dist/chunk-SZYQISA2.js.map +0 -1
  155. package/dist/chunk-USVBYQSQ.js.map +0 -1
  156. package/dist/chunk-V3KTSP3Q.js +0 -940
  157. package/dist/chunk-V3KTSP3Q.js.map +0 -1
  158. package/dist/chunk-WTWMGH2C.js.map +0 -1
  159. package/dist/load-agent-defs-YMDWBFDP.js +0 -14
  160. package/dist/recompile-project-agents-SZ76WNTW.js +0 -18
  161. package/dist/source-loader-C5SQXZXI.js.map +0 -1
  162. /package/dist/{load-agent-defs-YMDWBFDP.js.map → load-agent-defs-6QUUMGHK.js.map} +0 -0
  163. /package/dist/{recompile-project-agents-SZ76WNTW.js.map → source-loader-TTJVW2ER.js.map} +0 -0
@@ -1,5 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // ../compile/src/string.ts
4
+ function bytewise(a, b) {
5
+ return a < b ? -1 : a > b ? 1 : 0;
6
+ }
7
+ function inAnEnglishList(items) {
8
+ const last = items.at(-1);
9
+ if (last === void 0) return "";
10
+ if (items.length === 1) return last;
11
+ return `${items.slice(0, -1).join(", ")} and ${last}`;
12
+ }
13
+
3
14
  // ../compile/src/paths.ts
4
15
  var CLAUDE_DIR = ".claude";
5
16
  var SOURCE_ROOT_DIR = ".agents-inc";
@@ -7,7 +18,7 @@ var SOURCE_SRC_DIR = "src";
7
18
  var SKILLS_DIR_PATH = `${SOURCE_SRC_DIR}/skills`;
8
19
  var LOCAL_SKILLS_PATH = ".claude/skills";
9
20
  var DEFAULT_PLUGIN_NAME = "agents-inc";
10
- var DEFAULT_PUBLIC_SOURCE_NAME = DEFAULT_PLUGIN_NAME;
21
+ var DEFAULT_PUBLIC_SOURCE_NAME = "agents-inc";
11
22
  var GITHUB_PREFIX = "github:";
12
23
  var DEFAULT_SOURCE = `${GITHUB_PREFIX}agents-inc/skills`;
13
24
  var CLI_INVOKE_COMMAND = "npx agents-inc";
@@ -50,7 +61,7 @@ var STANDARD_DIRS = {
50
61
  SCRIPTS: "scripts",
51
62
  SKILLS: "skills",
52
63
  AGENTS: "agents",
53
- /** Legacy per-project template override directory (`.claude/templates`). */
64
+ /** Legacy per-project template override directory. */
54
65
  TEMPLATES: "templates"
55
66
  };
56
67
 
@@ -87,11 +98,6 @@ function effectivelyExcludedSkillIds(skills) {
87
98
  );
88
99
  }
89
100
 
90
- // src/cli/consts.ts
91
- import os from "os";
92
- import path from "path";
93
- import { fileURLToPath } from "url";
94
-
95
101
  // ../compile/src/catalog.ts
96
102
  function isExclusiveCategory(catalog, category) {
97
103
  return catalog.categories[category]?.exclusive === true;
@@ -501,8 +507,7 @@ var groupBy = (items, keyOf) => {
501
507
  return groups;
502
508
  };
503
509
  var indexById = (items) => (
504
- // Boundary cast: `Object.fromEntries` types every key as `string`; each of
505
- // these is the item's own id, which is the key type being claimed.
510
+ // Cast: `Object.fromEntries` widens keys to `string`; each is the item's own id.
506
511
  Object.fromEntries(items.map((item) => [item.id, item]))
507
512
  );
508
513
 
@@ -9820,8 +9825,7 @@ var categoryDefinitionSchema = z.object({
9820
9825
  id: categorySchema,
9821
9826
  displayName: z.string(),
9822
9827
  description: z.string(),
9823
- // Optional in the CLI's type. Present on all 89 built-in categories today; a category without
9824
- // one cannot be placed in the UI, so the read model drops it rather than failing the whole boot.
9828
+ // A category without one is dropped by the read model, not rejected.
9825
9829
  domain: domainIdSchema.exactOptional(),
9826
9830
  exclusive: z.boolean(),
9827
9831
  order: z.number()
@@ -9840,12 +9844,8 @@ var resolvedSkillSchema = z.object({
9840
9844
  slug: z.string(),
9841
9845
  displayName: z.string(),
9842
9846
  description: z.string(),
9843
- // The sentence a compiled sub-agent reads as its cue to load the skill. Optional
9844
- // on the CLI's `SkillCore`, so a catalogue entry without one falls back to its
9845
- // category — but a schema that omits the field STRIPS it, which is the same value
9846
- // arriving by a route nothing can tell apart from the skill stating nothing.
9847
+ // Declared so parsing does not strip it.
9847
9848
  usageGuidance: z.string().exactOptional(),
9848
- // The SKILL.md description compile renders — see `SkillCore.activationDescription`.
9849
9849
  activationDescription: z.string().exactOptional(),
9850
9850
  category: categorySchema,
9851
9851
  conflictsWith: z.array(skillRelationSchema),
@@ -9856,20 +9856,16 @@ var resolvedStackSchema = z.object({
9856
9856
  id: z.string(),
9857
9857
  name: z.string(),
9858
9858
  description: z.string(),
9859
- // agent id → category id → skill ids. Partial because a stack names the few
9860
- // agents it staffs, not the whole roster; the category keys are the one level
9861
- // nothing here reads, so they stay unvalidated strings.
9859
+ // agent id → category id → skill ids; a stack names only the agents it staffs.
9862
9860
  skills: z.partialRecord(
9863
9861
  agentNameSchema,
9864
9862
  z.record(z.string(), z.array(skillIdSchema))
9865
9863
  ),
9866
9864
  allSkillIds: z.array(skillIdSchema),
9867
9865
  philosophy: z.string(),
9868
- // Never populated by the CLI today; the stack rail groups by it when it appears.
9869
9866
  group: z.string().exactOptional()
9870
9867
  });
9871
9868
  var builtInMatrixSchema = z.object({
9872
- // Stamped into every seed payload so a consumer can explain skipped ids.
9873
9869
  version: z.string(),
9874
9870
  categories: z.record(z.string(), categoryDefinitionSchema),
9875
9871
  skills: z.record(z.string(), resolvedSkillSchema),
@@ -9923,7 +9919,8 @@ var agentDomainOf = (agentId) => {
9923
9919
  var DOMAIN_POSITION = new Map(
9924
9920
  DOMAIN_ORDER.map((domain, index) => [domain, index])
9925
9921
  );
9926
- var compareDomains = (a, b) => (DOMAIN_POSITION.get(a) ?? DOMAIN_ORDER.length) - (DOMAIN_POSITION.get(b) ?? DOMAIN_ORDER.length);
9922
+ var positionOf = (domain) => DOMAIN_POSITION.get(domain) ?? DOMAIN_ORDER.length;
9923
+ var compareDomains = (a, b) => positionOf(a) - positionOf(b);
9927
9924
 
9928
9925
  // ../matrix/src/read-model/catalog.ts
9929
9926
  var toCatalogSkill = (skill, domainId) => ({
@@ -10175,9 +10172,7 @@ var agentDefinitionSchema = z2.object({
10175
10172
  description: z2.string(),
10176
10173
  model: modelNameSchema.exactOptional(),
10177
10174
  tools: z2.array(z2.string()),
10178
- // Not narrowed here: which roles are sayable is authored in the read model's
10179
- // preload table — so the check lives where the list does, in `flavorOf`,
10180
- // rather than the list being imported back into the boundary.
10175
+ // Narrowed by `flavorOf`, where the role list lives.
10181
10176
  flavor: z2.string()
10182
10177
  });
10183
10178
  var agentDefinitionsSchema = z2.record(
@@ -10195,7 +10190,6 @@ var ROLE_FLAVORS = [
10195
10190
  "meta"
10196
10191
  ];
10197
10192
  var PRELOAD_DEFAULTS = {
10198
- // Web — frameworks, the concerns built on them, and the tests
10199
10193
  "web-framework-angular-standalone": ["developer", "planning", "researcher", "reviewer", "tester"],
10200
10194
  "web-framework-react": ["developer", "planning", "researcher", "reviewer", "tester"],
10201
10195
  "web-framework-solidjs": ["developer", "planning", "researcher", "reviewer", "tester"],
@@ -10255,7 +10249,6 @@ var PRELOAD_DEFAULTS = {
10255
10249
  "web-testing-vue-test-utils": ["tester"],
10256
10250
  "web-utilities-native-js": ["developer"],
10257
10251
  "web-utilities-vueuse": ["developer"],
10258
- // API — frameworks, data, auth, and the safety around them
10259
10252
  "api-framework-express": ["developer", "planning", "researcher", "reviewer", "tester"],
10260
10253
  "api-framework-fastify": ["developer", "planning", "researcher", "reviewer", "tester"],
10261
10254
  "api-framework-hono": ["developer", "planning", "researcher", "reviewer", "tester"],
@@ -10292,7 +10285,6 @@ var PRELOAD_DEFAULTS = {
10292
10285
  "api-performance-api-performance": ["developer", "researcher"],
10293
10286
  "api-specs-openapi": ["developer"],
10294
10287
  "api-observability-axiom-pino-sentry": ["developer"],
10295
- // Mobile
10296
10288
  "mobile-framework-react-native": ["developer", "planning", "researcher", "reviewer", "tester"],
10297
10289
  "mobile-framework-expo": ["developer", "planning", "researcher", "reviewer", "tester"],
10298
10290
  "mobile-navigation-expo-router": ["developer"],
@@ -10306,7 +10298,6 @@ var PRELOAD_DEFAULTS = {
10306
10298
  "mobile-performance-react-native": ["developer", "researcher"],
10307
10299
  "mobile-testing-detox": ["tester"],
10308
10300
  "mobile-testing-maestro": ["tester"],
10309
- // Desktop
10310
10301
  "desktop-framework-electron": ["developer", "planning", "researcher", "reviewer", "tester"],
10311
10302
  "desktop-framework-tauri": ["developer", "planning", "researcher", "reviewer", "tester"],
10312
10303
  "desktop-backend-tauri": ["developer", "researcher"],
@@ -10315,8 +10306,6 @@ var PRELOAD_DEFAULTS = {
10315
10306
  "desktop-plugins-tauri": ["developer"],
10316
10307
  "desktop-testing-electron": ["tester"],
10317
10308
  "desktop-storage-electron": ["developer", "researcher"],
10318
- // AI — the provider and the orchestration around it are what the project is
10319
- // built on, so they carry the planner too; evals and tracing test
10320
10309
  "ai-infrastructure-huggingface-inference": ["developer", "researcher"],
10321
10310
  "ai-infrastructure-ollama": ["developer", "researcher"],
10322
10311
  "ai-infrastructure-replicate": ["developer", "researcher"],
@@ -10332,19 +10321,14 @@ var PRELOAD_DEFAULTS = {
10332
10321
  "ai-provider-google-gemini-sdk": ["developer", "planning", "researcher"],
10333
10322
  "ai-provider-mistral-sdk": ["developer", "planning", "researcher"],
10334
10323
  "ai-provider-openai-sdk": ["developer", "planning", "researcher"],
10335
- // CLI — the framework and its prompts are the whole surface
10336
10324
  "cli-framework-cli-commander": ["developer", "planning", "researcher", "reviewer", "tester"],
10337
10325
  "cli-framework-oclif-ink": ["developer", "planning", "researcher", "reviewer", "tester"],
10338
10326
  "cli-prompts-clack": ["developer", "researcher", "tester"],
10339
- // Infra — deployment is occasional, so almost nothing preloads
10340
10327
  "infra-platform-cloudflare-workers": ["developer"],
10341
- // Meta — the review PROCESS is every review session's material; the domain
10342
- // checklists are one diff's, so they carry no row and arrive per diff
10343
10328
  "meta-design-composable-components": ["developer"],
10344
10329
  "meta-design-expressive-typescript": ["developer", "meta"],
10345
10330
  "meta-methodology-research-methodology": ["researcher", "meta"],
10346
10331
  "meta-reviewing-reviewing": ["reviewer"],
10347
- // Shared — carried across every implementation domain
10348
10332
  "shared-security-auth-security": ["developer", "researcher"]
10349
10333
  };
10350
10334
  var KNOWN_SKILL_IDS = new Set(SKILL_IDS);
@@ -10398,9 +10382,6 @@ var toSubAgent = (definition) => {
10398
10382
  description: definition.description,
10399
10383
  ...definition.model !== void 0 && { model: definition.model },
10400
10384
  domainId,
10401
- // The same string the definition carries, read back through the preload
10402
- // table's list of sayable roles — a role no entry could name is an error
10403
- // there, so it is one here rather than a flavor nothing routes on.
10404
10385
  flavor: flavorOf(definition.id)
10405
10386
  };
10406
10387
  };
@@ -10427,9 +10408,8 @@ var subAgentById = (agentId) => isAgentName(agentId) ? SUB_AGENTS_BY_ID[agentId]
10427
10408
  var ROSTER = SUB_AGENT_GROUPS.flatMap(
10428
10409
  (group) => group.agents
10429
10410
  );
10430
- var isCrossDomainRoleAgent = (agent) => agent.domainId === "meta" && agent.flavor !== "meta";
10431
10411
  var implementationDomainReach = (domainId) => ROSTER.filter(
10432
- (agent) => agent.domainId === domainId || isCrossDomainRoleAgent(agent)
10412
+ (agent) => agent.domainId === domainId || isDomainlessRoleAgent(agent.id)
10433
10413
  );
10434
10414
  var CRAFT_CATEGORIES_BY_FLAVOR = {
10435
10415
  meta: ["meta-design", "meta-methodology"],
@@ -10497,17 +10477,18 @@ var toAgentsBySkill = (stack) => {
10497
10477
  var toLoadByAgent = (skillId) => new Map(
10498
10478
  resolveAssignment(skillId).map(({ agentId, load }) => [agentId, load])
10499
10479
  );
10480
+ var toAssignmentTargets = (skillId, agentIds) => {
10481
+ const loadByAgent = toLoadByAgent(skillId);
10482
+ return agentIds.map((agentId) => ({
10483
+ agentId,
10484
+ load: loadByAgent.get(agentId) ?? "lazy"
10485
+ }));
10486
+ };
10500
10487
  var toAssignmentsBySkill = (stack) => Object.fromEntries(
10501
- Object.entries(toAgentsBySkill(stack)).map(([skillId, agentIds]) => {
10502
- const loadByAgent = toLoadByAgent(skillId);
10503
- return [
10504
- skillId,
10505
- agentIds.map((agentId) => ({
10506
- agentId,
10507
- load: loadByAgent.get(agentId) ?? "lazy"
10508
- }))
10509
- ];
10510
- })
10488
+ Object.entries(toAgentsBySkill(stack)).map(([skillId, agentIds]) => [
10489
+ skillId,
10490
+ toAssignmentTargets(skillId, agentIds)
10491
+ ])
10511
10492
  );
10512
10493
  var createStackExpander = (matrix) => (stackId) => {
10513
10494
  const stack = matrix.suggestedStacks.find(
@@ -10530,6 +10511,7 @@ var DEFAULT_SELECTION_OPTIONS = {
10530
10511
 
10531
10512
  // ../matrix/src/read-model/selection-semantics.ts
10532
10513
  var isAmbiguous = (requirement) => requirement.needsAny && requirement.skillIds.length > 1;
10514
+ var reasonDiscouraging = (declarer, otherId) => declarer?.discourages.find((relation) => relation.skillId === otherId)?.reason;
10533
10515
  var createSelectionSemantics = (catalog) => {
10534
10516
  const skillsById = new Map(catalog.skills.map((skill) => [skill.id, skill]));
10535
10517
  const conflictIdsBySkill = /* @__PURE__ */ new Map();
@@ -10610,12 +10592,8 @@ var createSelectionSemantics = (catalog) => {
10610
10592
  const discourageAgainst = (skill, sets) => {
10611
10593
  for (const reachedId of sets.reached) {
10612
10594
  if (reachedId === skill.id) continue;
10613
- const declared = skillsById.get(reachedId)?.discourages.find((relation) => relation.skillId === skill.id);
10614
- if (declared) return declared.reason;
10615
- const declaredBack = skill.discourages.find(
10616
- (relation) => relation.skillId === reachedId
10617
- );
10618
- if (declaredBack) return declaredBack.reason;
10595
+ const reason = reasonDiscouraging(skillsById.get(reachedId), skill.id) ?? reasonDiscouraging(skill, reachedId);
10596
+ if (reason !== void 0) return reason;
10619
10597
  }
10620
10598
  return void 0;
10621
10599
  };
@@ -10700,20 +10678,16 @@ var seedScopeSchema = z3.enum(["project", "global"]);
10700
10678
  var seedSkillSchema = z3.object({
10701
10679
  install: z3.enum(["plugin", "eject"]),
10702
10680
  scope: seedScopeSchema,
10703
- // Sub-agent id → load state; presence is assignment. Per (agent, skill),
10704
- // matching the granularity of the CLI's stack config.
10681
+ // Sub-agent id → load state; presence is assignment.
10705
10682
  assignments: z3.record(z3.string(), seedLoadStateSchema)
10706
10683
  });
10707
10684
  var seedAgentSchema = z3.object({
10708
10685
  on: z3.boolean().exactOptional(),
10709
10686
  model: seedModelSchema.exactOptional(),
10710
- // A string rather than the CLI's enum: Codex retires ids, and an enum would
10711
- // turn each retirement into a version bump. Each consumer drops an id it does
10712
- // not offer.
10687
+ // Not an enum: Codex retires ids; consumers drop ones they do not offer.
10713
10688
  codexModel: z3.string().min(1).exactOptional(),
10714
10689
  effort: seedEffortSchema.exactOptional(),
10715
- // Absent means `DEFAULT_SELECTION_OPTIONS.scope`, so the resting choice never
10716
- // travels.
10690
+ // Absent means `DEFAULT_SELECTION_OPTIONS.scope`.
10717
10691
  scope: seedScopeSchema.exactOptional()
10718
10692
  });
10719
10693
  var MAX_EXTERNAL_SKILL_BYTES = 262144;
@@ -10733,45 +10707,45 @@ var seedSkillTreeSchema = z3.record(z3.string().min(1), z3.string()).refine((fil
10733
10707
  var seedExternalSkillSchema = z3.object({
10734
10708
  displayName: z3.string().min(1),
10735
10709
  description: z3.string(),
10736
- // The placement the user confirmed at add time, never derived.
10710
+ // Confirmed by the user at add time, never derived.
10737
10711
  categoryId: z3.string().min(1),
10738
- // GitHub's own `owner/name`.
10712
+ // `owner/name`.
10739
10713
  repo: z3.string().min(1),
10740
- // The skill's DIRECTORY within it — `skills/docx`, never the SKILL.md.
10714
+ // The skill's directory (`skills/docx`), not its SKILL.md.
10741
10715
  path: z3.string().min(1),
10742
10716
  files: seedSkillTreeSchema
10743
10717
  });
10744
10718
  var seedPayloadSchema = z3.object({
10745
10719
  v: z3.literal(SEED_VERSION),
10746
- // Diagnostics only. A mismatch with the consumer's matrix must not fail the
10747
- // decode — it explains why some ids were skipped.
10720
+ // Diagnostics only; a mismatch must not fail the decode.
10748
10721
  matrixVersion: z3.string(),
10749
10722
  stackId: z3.string().nullable(),
10750
- // The sentence the sharer's config records about itself. It travels instead
10751
- // of a stack id, which would bring back the stack's whole roster on install.
10723
+ // Travels instead of a stack id, which would reinstall the stack's whole roster.
10752
10724
  description: z3.string().exactOptional(),
10753
- // Where the skills are fetched from, as `--marketplace` takes it. Absent is
10754
- // the default public catalogue.
10725
+ // As `--marketplace` takes it; absent is the public catalogue.
10755
10726
  marketplace: z3.string().exactOptional(),
10756
- // Sparse: presence is selection.
10727
+ // Presence is selection.
10757
10728
  skills: z3.record(z3.string(), seedSkillSchema),
10758
- // Skill id → its whole directory, for ids no catalogue can resolve.
10729
+ // For ids no catalogue can resolve.
10759
10730
  external: z3.record(z3.string(), seedExternalSkillSchema).exactOptional(),
10760
- // Sparse: an agent with nothing to say has no entry. Presence is not an
10761
- // install — assignments and `on: true` decide that.
10731
+ // Presence is not an install; assignments and `on: true` decide that.
10762
10732
  agents: z3.record(z3.string(), seedAgentSchema)
10763
10733
  });
10764
10734
  var isSeedScopePairWritable = (skillScope, agentScope) => !(skillScope === "project" && agentScope === "global");
10765
10735
  var seedAgentScope = (entry) => entry?.scope ?? DEFAULT_SELECTION_OPTIONS.scope;
10766
- var isSwitchedOff = (entry) => entry?.on === false;
10767
10736
  var isUnwritablePair = (agents, skillScope, agent) => {
10768
10737
  const entry = agents[agent];
10769
- if (isSwitchedOff(entry)) return false;
10738
+ if (entry?.on === false) return false;
10770
10739
  return !isSeedScopePairWritable(skillScope, seedAgentScope(entry));
10771
10740
  };
10772
10741
  var unwritableSeedAssignments = (payload) => Object.entries(payload.skills).flatMap(
10773
10742
  ([skillId, skill]) => Object.keys(skill.assignments).filter((agent) => isUnwritablePair(payload.agents, skill.scope, agent)).map((agent) => ({ skillId, agent }))
10774
10743
  );
10744
+ var PATH_SEPARATOR = /[/\\]/;
10745
+ var isControlCode = (code) => code <= 31 || code >= 127 && code <= 159;
10746
+ var holdsAControl = (id) => Array.from(id, (character) => character.charCodeAt(0)).some(isControlCode);
10747
+ var namesOneDirectory = (id) => id !== "" && id !== "." && id !== ".." && !PATH_SEPARATOR.test(id) && !holdsAControl(id);
10748
+ var externalIdsNamingNoDirectory = (payload) => Object.keys(payload.external ?? {}).filter((id) => !namesOneDirectory(id));
10775
10749
  var installableSeedPayloadSchema = seedPayloadSchema.superRefine(
10776
10750
  (payload, ctx) => {
10777
10751
  for (const { skillId, agent } of unwritableSeedAssignments(payload)) {
@@ -10781,6 +10755,13 @@ var installableSeedPayloadSchema = seedPayloadSchema.superRefine(
10781
10755
  message: `a project-scoped skill has nowhere to be written on '${agent}', which rests at global scope`
10782
10756
  });
10783
10757
  }
10758
+ for (const id of externalIdsNamingNoDirectory(payload)) {
10759
+ ctx.addIssue({
10760
+ code: "custom",
10761
+ path: ["external", id],
10762
+ message: "a carried skill's id is the directory it is written into, so it must name exactly one directory and hold no control character"
10763
+ });
10764
+ }
10784
10765
  }
10785
10766
  );
10786
10767
 
@@ -10791,8 +10772,7 @@ var matrixCategorySchema = z4.object({
10791
10772
  id: idSchema,
10792
10773
  displayName: z4.string(),
10793
10774
  description: z4.string(),
10794
- // Optional in the CLI's type. A category without one cannot be placed in the
10795
- // UI, so a consumer drops it rather than failing the whole catalogue.
10775
+ // A category without one is dropped by consumers, not rejected.
10796
10776
  domain: z4.string().exactOptional(),
10797
10777
  exclusive: z4.boolean(),
10798
10778
  order: z4.number()
@@ -10811,14 +10791,9 @@ var matrixSkillSchema = z4.object({
10811
10791
  slug: z4.string(),
10812
10792
  displayName: z4.string(),
10813
10793
  description: z4.string(),
10814
- // The sentence a compiled sub-agent reads as its cue to load the skill, which
10815
- // the editor's preview renders verbatim. Optional because a marketplace's own
10816
- // skills may state none; omitting it here would strip it from every fetched
10817
- // `catalog.json` and make every marketplace look like it states none.
10794
+ // A compiled sub-agent's cue to load the skill.
10818
10795
  usageGuidance: z4.string().exactOptional(),
10819
- // The SKILL.md description a compiled sub-agent's activation table shows —
10820
- // `description` is the short label. The preview renders this one so
10821
- // it shows what the install writes (CLI-898); absent on older catalogues.
10796
+ // The SKILL.md description the activation table shows; `description` is the short label.
10822
10797
  activationDescription: z4.string().exactOptional(),
10823
10798
  category: idSchema,
10824
10799
  conflictsWith: z4.array(skillRelationSchema2),
@@ -10829,13 +10804,10 @@ var matrixStackSchema = z4.object({
10829
10804
  id: idSchema,
10830
10805
  name: z4.string(),
10831
10806
  description: z4.string(),
10832
- // agent id → category id → skill ids. A stack names the few agents it staffs
10833
- // rather than the whole roster, and the agent roster is as marketplace-owned
10834
- // as the skills are, so neither level is narrowed.
10807
+ // agent id → category id → skill ids.
10835
10808
  skills: z4.record(z4.string(), z4.record(z4.string(), z4.array(idSchema))),
10836
10809
  allSkillIds: z4.array(idSchema),
10837
10810
  philosophy: z4.string(),
10838
- // Never populated by the CLI today; a stack rail groups by it when it appears.
10839
10811
  group: z4.string().exactOptional()
10840
10812
  });
10841
10813
  var matrixSchema = z4.object({
@@ -10848,37 +10820,20 @@ var matrixSchema = z4.object({
10848
10820
  // ../matrix/src/skill-index.ts
10849
10821
  import { z as z5 } from "zod";
10850
10822
  var skillIndexEntrySchema = z5.object({
10851
- // The skill's own name — its frontmatter `name` where there is one, its
10852
- // directory name where there is not. Never empty: a skill with neither is
10853
- // not addressable and does not make it into the index.
10823
+ // Frontmatter `name`, else the directory name.
10854
10824
  name: z5.string().min(1),
10855
- // Frontmatter `description`, or the SKILL.md's first heading. Empty when the
10856
- // file offers neither, which is a thin result rather than an invalid one.
10825
+ // Frontmatter `description`, else the first heading; may be empty.
10857
10826
  description: z5.string(),
10858
- // GitHub's own `owner/name`, so a result can be attributed and fetched
10859
- // without a second lookup.
10827
+ // `owner/name`.
10860
10828
  repo: z5.string().min(1),
10861
- // The skill DIRECTORY within that repo — `skills/docx`, not
10862
- // `skills/docx/SKILL.md`. A skill is a directory in every consumer of this
10863
- // index, and the file is only how the directory proves itself.
10829
+ // The skill's directory (`skills/docx`), not its SKILL.md.
10864
10830
  path: z5.string().min(1),
10865
- // The repository's star count when the index was built. A property of the
10866
- // repo rather than the skill, repeated per entry because the dialog ranks
10867
- // and badges individual results.
10831
+ // The repo's stars, repeated per entry for ranking.
10868
10832
  stars: z5.number().int().nonnegative(),
10869
- // How much the skill's whole DIRECTORY weighs — the sum over its blobs of the
10870
- // sizes GitHub reported for them in the tree listing the crawl already made,
10871
- // never a download. Repeated per entry because the cap it is read against is
10872
- // per skill: `MAX_EXTERNAL_SKILL_BYTES` decides whether one directory can
10873
- // ride a shared link, and without this number that decision cannot be made
10874
- // until the consumer has listed the repository itself. Zero is a real answer,
10875
- // for a directory GitHub reported no sizes for at all.
10833
+ // Directory size from GitHub's tree listing, checked against `MAX_EXTERNAL_SKILL_BYTES`.
10876
10834
  bytes: z5.number().int().nonnegative()
10877
10835
  });
10878
10836
  var skillIndexSchema = z5.object({
10879
- // When this index was assembled, as an ISO 8601 instant. The worker's own
10880
- // freshness check reads it, and it is served so a caller can say how old the
10881
- // list is rather than having to guess.
10882
10837
  builtAt: z5.iso.datetime(),
10883
10838
  skills: z5.array(skillIndexEntrySchema)
10884
10839
  });
@@ -10915,17 +10870,6 @@ function orderDomains(domains) {
10915
10870
  ];
10916
10871
  }
10917
10872
 
10918
- // ../compile/src/string.ts
10919
- function bytewise(a, b) {
10920
- return a < b ? -1 : a > b ? 1 : 0;
10921
- }
10922
- function inAnEnglishList(items) {
10923
- const last = items.at(-1);
10924
- if (last === void 0) return "";
10925
- if (items.length === 1) return last;
10926
- return `${items.slice(0, -1).join(", ")} and ${last}`;
10927
- }
10928
-
10929
10873
  // ../compile/src/selection.ts
10930
10874
  import { groupBy as groupBy2 } from "remeda";
10931
10875
  function skillOrThrow(catalog, id) {
@@ -10938,75 +10882,87 @@ function validateConflicts(catalog, selections) {
10938
10882
  return selections.flatMap((skillAId, index) => {
10939
10883
  const skillA = catalog.skills[skillAId];
10940
10884
  if (!skillA) return [];
10941
- return selections.slice(index + 1).flatMap((skillBId) => {
10942
- const conflict = (skillA.conflictsWith ?? []).find(
10943
- (c) => c.skillId === skillBId
10944
- );
10945
- if (!conflict) return [];
10946
- return [
10947
- {
10948
- type: "conflict",
10949
- message: `${skillA.displayName} conflicts with ${labelOf2(catalog, skillBId)}: ${conflict.reason}`,
10950
- // Boundary cast: the id came out of the catalogue's own relationship table.
10951
- skills: [skillA.id, skillBId]
10952
- }
10953
- ];
10954
- });
10885
+ return selections.slice(index + 1).flatMap((skillBId) => declaredConflict(catalog, skillA, skillBId));
10955
10886
  });
10956
10887
  }
10888
+ function declaredConflict(catalog, skillA, skillBId) {
10889
+ const conflict = (skillA.conflictsWith ?? []).find(
10890
+ (c) => c.skillId === skillBId
10891
+ );
10892
+ if (!conflict) return [];
10893
+ return [
10894
+ {
10895
+ type: "conflict",
10896
+ message: `${skillA.displayName} conflicts with ${labelOf2(catalog, skillBId)}: ${conflict.reason}`,
10897
+ // Boundary cast: the id came out of the catalogue's own relationship table.
10898
+ skills: [skillA.id, skillBId]
10899
+ }
10900
+ ];
10901
+ }
10957
10902
  function validateRequirements(catalog, selections, selectedSet) {
10958
10903
  return selections.flatMap((skillId) => {
10959
10904
  const skill = catalog.skills[skillId];
10960
10905
  if (!skill) return [];
10961
- return (skill.requires ?? []).flatMap((requirement) => {
10962
- const requiredIds = requirement.skillIds;
10963
- if (requirement.needsAny) {
10964
- if (requiredIds.some((reqId) => selectedSet.has(reqId))) return [];
10965
- return [
10966
- {
10967
- type: "missingRequirement",
10968
- message: `${skill.displayName} requires one of: ${requiredIds.map((id) => labelOf2(catalog, id)).join(", ")}`,
10969
- skills: [skillId, ...requiredIds]
10970
- }
10971
- ];
10972
- }
10973
- const missingIds = requiredIds.filter((reqId) => !selectedSet.has(reqId));
10974
- if (missingIds.length === 0) return [];
10975
- return [
10976
- {
10977
- type: "missingRequirement",
10978
- message: `${skill.displayName} requires: ${missingIds.map((id) => labelOf2(catalog, id)).join(", ")}`,
10979
- skills: [skillId, ...missingIds]
10980
- }
10981
- ];
10982
- });
10906
+ return (skill.requires ?? []).flatMap(
10907
+ (requirement) => unmetRequirement(catalog, skillId, skill, requirement, selectedSet)
10908
+ );
10983
10909
  });
10984
10910
  }
10911
+ function unmetRequirement(catalog, skillId, skill, requirement, selectedSet) {
10912
+ const requiredIds = requirement.skillIds;
10913
+ if (requirement.needsAny) {
10914
+ if (requiredIds.some((reqId) => selectedSet.has(reqId))) return [];
10915
+ return [
10916
+ {
10917
+ type: "missingRequirement",
10918
+ message: `${skill.displayName} requires one of: ${labelsOf(catalog, requiredIds)}`,
10919
+ skills: [skillId, ...requiredIds]
10920
+ }
10921
+ ];
10922
+ }
10923
+ const missingIds = requiredIds.filter((reqId) => !selectedSet.has(reqId));
10924
+ if (missingIds.length === 0) return [];
10925
+ return [
10926
+ {
10927
+ type: "missingRequirement",
10928
+ message: `${skill.displayName} requires: ${labelsOf(catalog, missingIds)}`,
10929
+ skills: [skillId, ...missingIds]
10930
+ }
10931
+ ];
10932
+ }
10933
+ function labelsOf(catalog, ids) {
10934
+ return ids.map((id) => labelOf2(catalog, id)).join(", ");
10935
+ }
10985
10936
  function validateExclusivity(catalog, selections) {
10986
10937
  const resolved = selections.map((skillId) => ({ skillId, skill: catalog.skills[skillId] })).filter(
10987
10938
  (entry) => entry.skill != null
10988
10939
  );
10989
10940
  return Object.entries(
10990
10941
  groupBy2(resolved, (entry) => entry.skill.category)
10991
- ).flatMap(([categoryId, entries]) => {
10992
- if (entries.length <= 1) return [];
10993
- if (categoryId === LOCAL_PSEUDO_CATEGORY) return [];
10994
- const category = catalog.categories[categoryId];
10995
- if (category?.exclusive !== true) return [];
10996
- const skillIds = entries.map((e) => e.skillId);
10997
- return [
10998
- {
10999
- type: "categoryExclusive",
11000
- message: `Category "${category.displayName}" only allows one selection, but multiple selected: ${skillIds.map((id) => labelOf2(catalog, id)).join(", ")}`,
11001
- skills: skillIds
11002
- }
11003
- ];
11004
- });
10942
+ ).flatMap(
10943
+ ([categoryId, entries]) => exclusivityBreach(
10944
+ catalog,
10945
+ categoryId,
10946
+ entries.map((e) => e.skillId)
10947
+ )
10948
+ );
10949
+ }
10950
+ function exclusivityBreach(catalog, categoryId, skillIds) {
10951
+ if (skillIds.length <= 1) return [];
10952
+ if (categoryId === LOCAL_PSEUDO_CATEGORY) return [];
10953
+ const category = catalog.categories[categoryId];
10954
+ if (category?.exclusive !== true) return [];
10955
+ return [
10956
+ {
10957
+ type: "categoryExclusive",
10958
+ message: `Category "${category.displayName}" only allows one selection, but multiple selected: ${labelsOf(catalog, skillIds)}`,
10959
+ skills: skillIds
10960
+ }
10961
+ ];
11005
10962
  }
11006
10963
  function validateSelection(selections, catalog) {
11007
10964
  const resolvedSelections = selections.map(
11008
- // Boundary cast: the id came back off the catalogue entry `id` just found, and a catalogue
11009
- // skill's `id` is typed `string` on the narrow shape so the wire `Matrix` satisfies it too.
10965
+ // Boundary cast: a catalogue id, typed `string` so the wire `Matrix` fits the shape.
11010
10966
  (id) => skillOrThrow(catalog, id).id
11011
10967
  );
11012
10968
  const selectedSet = new Set(resolvedSelections);
@@ -11025,11 +10981,13 @@ function sourceDirName(provider) {
11025
10981
  }
11026
10982
 
11027
10983
  // src/cli/consts.ts
10984
+ import os from "os";
10985
+ import path from "path";
10986
+ import { fileURLToPath } from "url";
11028
10987
  var __filename2 = fileURLToPath(import.meta.url);
11029
10988
  var __dirname2 = path.dirname(__filename2);
11030
10989
  var isInDist = __dirname2.includes("/dist");
11031
- var CLI_ROOT = isInDist ? path.resolve(__dirname2, "..") : path.resolve(__dirname2, "../..");
11032
- var PROJECT_ROOT = CLI_ROOT;
10990
+ var PROJECT_ROOT = isInDist ? path.resolve(__dirname2, "..") : path.resolve(__dirname2, "../..");
11033
10991
  var PLUGINS_SUBDIR = "plugins";
11034
10992
  var PLUGIN_MANIFEST_DIR = ".claude-plugin";
11035
10993
  var MARKETPLACE_JSON = "marketplace.json";
@@ -11045,7 +11003,8 @@ function globalInstallRoot() {
11045
11003
  function cacheRoot() {
11046
11004
  return path.join(os.homedir(), ".cache", DEFAULT_PLUGIN_NAME);
11047
11005
  }
11048
- var EDITOR_URL = "https://agentsinc.sh/editor";
11006
+ var DEFAULT_EDITOR_URL = "https://agentsinc.sh/editor";
11007
+ var EDITOR_URL = process.env.AGENTS_INC_EDITOR_URL ?? DEFAULT_EDITOR_URL;
11049
11008
  function editorConfigUrl(id) {
11050
11009
  return `${EDITOR_URL}/?fromId=${encodeURIComponent(id)}`;
11051
11010
  }
@@ -11066,7 +11025,7 @@ var SCHEMA_PATHS = {
11066
11025
  var YAML_FORMATTING = {
11067
11026
  INDENT: 2,
11068
11027
  LINE_WIDTH: 120,
11069
- /** lineWidth: 0 disables wrapping — used for metadata files */
11028
+ /** 0 disables wrapping. */
11070
11029
  LINE_WIDTH_NONE: 0
11071
11030
  };
11072
11031
  var CHECK_GLYPH = "\u2713";
@@ -11087,9 +11046,7 @@ var UI_SYMBOLS = {
11087
11046
  SCROLL_DOWN: "\u25BC",
11088
11047
  CHECK: CHECK_GLYPH,
11089
11048
  CROSS: "\u2717",
11090
- /** Removed/pending-removal diff marker (ASCII hyphen). */
11091
11049
  REMOVED: "-",
11092
- /** Added/newly-selected diff marker (ASCII plus). */
11093
11050
  ADDED: "+"
11094
11051
  };
11095
11052
  var GITHUB_SOURCE = {
@@ -11109,7 +11066,6 @@ var MAX_CONFIG_FILE_SIZE = ONE_MB;
11109
11066
  var MAX_JSON_NESTING_DEPTH = 10;
11110
11067
  var MAX_MARKETPLACE_PLUGINS = 1e4;
11111
11068
  var SCROLL_VIEWPORT = {
11112
- /** Height of the "N more above" scroll indicator */
11113
11069
  SCROLL_INDICATOR_HEIGHT: 1
11114
11070
  };
11115
11071
  var MIN_TERMINAL_SIZE = {
@@ -11167,6 +11123,7 @@ export {
11167
11123
  seedPayloadSchema,
11168
11124
  isSeedScopePairWritable,
11169
11125
  seedAgentScope,
11126
+ externalIdsNamingNoDirectory,
11170
11127
  installableSeedPayloadSchema,
11171
11128
  seatCatalog,
11172
11129
  seatedCatalog,
@@ -11182,6 +11139,7 @@ export {
11182
11139
  LOCAL_SKILLS_PATH,
11183
11140
  DEFAULT_PLUGIN_NAME,
11184
11141
  DEFAULT_PUBLIC_SOURCE_NAME,
11142
+ GITHUB_PREFIX,
11185
11143
  DEFAULT_SOURCE,
11186
11144
  CLI_INVOKE_COMMAND,
11187
11145
  EJECT_SOURCE,
@@ -11241,4 +11199,4 @@ export {
11241
11199
  CLI_COLORS,
11242
11200
  ASCII_LOGO
11243
11201
  };
11244
- //# sourceMappingURL=chunk-PJWGTNOX.js.map
11202
+ //# sourceMappingURL=chunk-7C3PFRBU.js.map