@uzysjung/agent-harness 26.83.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 (212) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +279 -0
  3. package/README.md +306 -0
  4. package/dist/chunk-SDVAM5JZ.js +775 -0
  5. package/dist/chunk-SDVAM5JZ.js.map +1 -0
  6. package/dist/index.js +5412 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/trust-tier-drift.js +67 -0
  9. package/dist/trust-tier-drift.js.map +1 -0
  10. package/package.json +53 -0
  11. package/scripts/prune-ecc.sh +310 -0
  12. package/templates/CLAUDE.md +86 -0
  13. package/templates/agents/build-error-resolver.md +114 -0
  14. package/templates/agents/code-reviewer.md +237 -0
  15. package/templates/agents/data-analyst.md +69 -0
  16. package/templates/agents/plan-checker.md +118 -0
  17. package/templates/agents/reviewer.md +128 -0
  18. package/templates/agents/security-reviewer.md +108 -0
  19. package/templates/agents/silent-failure-hunter.md +50 -0
  20. package/templates/agents/strategist.md +86 -0
  21. package/templates/antigravity/AGENTS.md.template +58 -0
  22. package/templates/codex/AGENTS.md.template +94 -0
  23. package/templates/codex/README.md +69 -0
  24. package/templates/codex/config.toml.template +108 -0
  25. package/templates/codex/hooks/README.md +40 -0
  26. package/templates/codex/hooks/gate-check.sh +7 -0
  27. package/templates/codex/hooks/hito-counter.sh +7 -0
  28. package/templates/codex/hooks/session-start.sh +7 -0
  29. package/templates/codex/hooks/uncommitted-check.sh +7 -0
  30. package/templates/codex/skills/uzys-build/SKILL.md +24 -0
  31. package/templates/codex/skills/uzys-plan/SKILL.md +24 -0
  32. package/templates/codex/skills/uzys-review/SKILL.md +24 -0
  33. package/templates/codex/skills/uzys-ship/SKILL.md +24 -0
  34. package/templates/codex/skills/uzys-spec/SKILL.md +28 -0
  35. package/templates/codex/skills/uzys-test/SKILL.md +24 -0
  36. package/templates/commands/ecc/checkpoint.md +32 -0
  37. package/templates/commands/ecc/e2e.md +105 -0
  38. package/templates/commands/ecc/eval.md +88 -0
  39. package/templates/commands/ecc/evolve.md +7 -0
  40. package/templates/commands/ecc/harness-audit.md +73 -0
  41. package/templates/commands/ecc/instinct-status.md +8 -0
  42. package/templates/commands/ecc/promote.md +10 -0
  43. package/templates/commands/ecc/security-scan.md +10 -0
  44. package/templates/commands/uzys/auto.md +190 -0
  45. package/templates/commands/uzys/build.md +42 -0
  46. package/templates/commands/uzys/plan.md +55 -0
  47. package/templates/commands/uzys/review.md +44 -0
  48. package/templates/commands/uzys/ship.md +49 -0
  49. package/templates/commands/uzys/spec.md +93 -0
  50. package/templates/commands/uzys/test.md +58 -0
  51. package/templates/docs/PLAN.template.md +102 -0
  52. package/templates/hooks/agentshield-gate.sh +101 -0
  53. package/templates/hooks/checkpoint-snapshot.sh +115 -0
  54. package/templates/hooks/gate-check.sh +138 -0
  55. package/templates/hooks/hito-counter.sh +26 -0
  56. package/templates/hooks/karpathy-gate.sh +59 -0
  57. package/templates/hooks/mcp-pre-exec.sh +104 -0
  58. package/templates/hooks/protect-files.sh +41 -0
  59. package/templates/hooks/session-start.sh +40 -0
  60. package/templates/hooks/spec-drift-check.sh +86 -0
  61. package/templates/mcp-allowlist.example +24 -0
  62. package/templates/mcp.json +20 -0
  63. package/templates/opencode/.opencode/commands/uzys-build.md +22 -0
  64. package/templates/opencode/.opencode/commands/uzys-plan.md +22 -0
  65. package/templates/opencode/.opencode/commands/uzys-review.md +22 -0
  66. package/templates/opencode/.opencode/commands/uzys-ship.md +22 -0
  67. package/templates/opencode/.opencode/commands/uzys-spec.md +28 -0
  68. package/templates/opencode/.opencode/commands/uzys-test.md +22 -0
  69. package/templates/opencode/.opencode/plugins/uzys-harness.ts +146 -0
  70. package/templates/opencode/AGENTS.md.template +98 -0
  71. package/templates/opencode/README.md +34 -0
  72. package/templates/opencode/opencode.json.template +42 -0
  73. package/templates/project-claude/_base.md +23 -0
  74. package/templates/project-claude/fragments/csr-fastapi/active-rules.md +13 -0
  75. package/templates/project-claude/fragments/csr-fastapi/agents.md +5 -0
  76. package/templates/project-claude/fragments/csr-fastapi/boundaries.md +18 -0
  77. package/templates/project-claude/fragments/csr-fastapi/commands.md +6 -0
  78. package/templates/project-claude/fragments/csr-fastapi/plugins.md +2 -0
  79. package/templates/project-claude/fragments/csr-fastapi/skills.md +5 -0
  80. package/templates/project-claude/fragments/csr-fastapi/stack.md +6 -0
  81. package/templates/project-claude/fragments/csr-fastapi/tagline.md +1 -0
  82. package/templates/project-claude/fragments/csr-fastapi/workflow.md +8 -0
  83. package/templates/project-claude/fragments/csr-fastify/active-rules.md +13 -0
  84. package/templates/project-claude/fragments/csr-fastify/agents.md +5 -0
  85. package/templates/project-claude/fragments/csr-fastify/boundaries.md +18 -0
  86. package/templates/project-claude/fragments/csr-fastify/commands.md +6 -0
  87. package/templates/project-claude/fragments/csr-fastify/plugins.md +2 -0
  88. package/templates/project-claude/fragments/csr-fastify/skills.md +5 -0
  89. package/templates/project-claude/fragments/csr-fastify/stack.md +6 -0
  90. package/templates/project-claude/fragments/csr-fastify/tagline.md +1 -0
  91. package/templates/project-claude/fragments/csr-fastify/workflow.md +8 -0
  92. package/templates/project-claude/fragments/csr-supabase/active-rules.md +12 -0
  93. package/templates/project-claude/fragments/csr-supabase/agents.md +5 -0
  94. package/templates/project-claude/fragments/csr-supabase/boundaries.md +19 -0
  95. package/templates/project-claude/fragments/csr-supabase/commands.md +6 -0
  96. package/templates/project-claude/fragments/csr-supabase/plugins.md +4 -0
  97. package/templates/project-claude/fragments/csr-supabase/skills.md +7 -0
  98. package/templates/project-claude/fragments/csr-supabase/stack.md +6 -0
  99. package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +21 -0
  100. package/templates/project-claude/fragments/csr-supabase/tagline.md +1 -0
  101. package/templates/project-claude/fragments/csr-supabase/workflow.md +8 -0
  102. package/templates/project-claude/fragments/data/active-rules.md +10 -0
  103. package/templates/project-claude/fragments/data/agents.md +6 -0
  104. package/templates/project-claude/fragments/data/boundaries.md +20 -0
  105. package/templates/project-claude/fragments/data/commands.md +6 -0
  106. package/templates/project-claude/fragments/data/plugins.md +2 -0
  107. package/templates/project-claude/fragments/data/skills.md +3 -0
  108. package/templates/project-claude/fragments/data/stack.md +7 -0
  109. package/templates/project-claude/fragments/data/tagline.md +1 -0
  110. package/templates/project-claude/fragments/data/workflow.md +9 -0
  111. package/templates/project-claude/fragments/executive/active-rules.md +6 -0
  112. package/templates/project-claude/fragments/executive/agents.md +6 -0
  113. package/templates/project-claude/fragments/executive/boundaries.md +17 -0
  114. package/templates/project-claude/fragments/executive/commands.md +11 -0
  115. package/templates/project-claude/fragments/executive/plugins.md +1 -0
  116. package/templates/project-claude/fragments/executive/skills.md +7 -0
  117. package/templates/project-claude/fragments/executive/stack.md +4 -0
  118. package/templates/project-claude/fragments/executive/tagline.md +1 -0
  119. package/templates/project-claude/fragments/executive/workflow.md +10 -0
  120. package/templates/project-claude/fragments/growth-marketing/active-rules.md +7 -0
  121. package/templates/project-claude/fragments/growth-marketing/agents.md +6 -0
  122. package/templates/project-claude/fragments/growth-marketing/boundaries.md +17 -0
  123. package/templates/project-claude/fragments/growth-marketing/commands.md +11 -0
  124. package/templates/project-claude/fragments/growth-marketing/plugins.md +9 -0
  125. package/templates/project-claude/fragments/growth-marketing/skills.md +8 -0
  126. package/templates/project-claude/fragments/growth-marketing/stack.md +7 -0
  127. package/templates/project-claude/fragments/growth-marketing/tagline.md +1 -0
  128. package/templates/project-claude/fragments/growth-marketing/workflow.md +11 -0
  129. package/templates/project-claude/fragments/project-management/active-rules.md +7 -0
  130. package/templates/project-claude/fragments/project-management/agents.md +6 -0
  131. package/templates/project-claude/fragments/project-management/boundaries.md +16 -0
  132. package/templates/project-claude/fragments/project-management/commands.md +10 -0
  133. package/templates/project-claude/fragments/project-management/plugins.md +6 -0
  134. package/templates/project-claude/fragments/project-management/skills.md +5 -0
  135. package/templates/project-claude/fragments/project-management/stack.md +4 -0
  136. package/templates/project-claude/fragments/project-management/tagline.md +1 -0
  137. package/templates/project-claude/fragments/project-management/workflow.md +12 -0
  138. package/templates/project-claude/fragments/ssr-htmx/active-rules.md +11 -0
  139. package/templates/project-claude/fragments/ssr-htmx/agents.md +5 -0
  140. package/templates/project-claude/fragments/ssr-htmx/boundaries.md +20 -0
  141. package/templates/project-claude/fragments/ssr-htmx/commands.md +6 -0
  142. package/templates/project-claude/fragments/ssr-htmx/plugins.md +2 -0
  143. package/templates/project-claude/fragments/ssr-htmx/skills.md +3 -0
  144. package/templates/project-claude/fragments/ssr-htmx/stack.md +6 -0
  145. package/templates/project-claude/fragments/ssr-htmx/tagline.md +1 -0
  146. package/templates/project-claude/fragments/ssr-htmx/workflow.md +8 -0
  147. package/templates/project-claude/fragments/ssr-nextjs/active-rules.md +12 -0
  148. package/templates/project-claude/fragments/ssr-nextjs/agents.md +5 -0
  149. package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +20 -0
  150. package/templates/project-claude/fragments/ssr-nextjs/commands.md +6 -0
  151. package/templates/project-claude/fragments/ssr-nextjs/plugins.md +2 -0
  152. package/templates/project-claude/fragments/ssr-nextjs/skills.md +5 -0
  153. package/templates/project-claude/fragments/ssr-nextjs/stack.md +5 -0
  154. package/templates/project-claude/fragments/ssr-nextjs/tagline.md +1 -0
  155. package/templates/project-claude/fragments/ssr-nextjs/workflow.md +8 -0
  156. package/templates/project-claude/fragments/tooling/active-rules.md +11 -0
  157. package/templates/project-claude/fragments/tooling/agents.md +5 -0
  158. package/templates/project-claude/fragments/tooling/boundaries.md +17 -0
  159. package/templates/project-claude/fragments/tooling/commands.md +4 -0
  160. package/templates/project-claude/fragments/tooling/skills.md +4 -0
  161. package/templates/project-claude/fragments/tooling/stack.md +5 -0
  162. package/templates/project-claude/fragments/tooling/tagline.md +1 -0
  163. package/templates/project-claude/fragments/tooling/workflow.md +5 -0
  164. package/templates/rules/api-contract.md +33 -0
  165. package/templates/rules/change-management.md +80 -0
  166. package/templates/rules/cli-development.md +39 -0
  167. package/templates/rules/code-style.md +23 -0
  168. package/templates/rules/data-analysis.md +61 -0
  169. package/templates/rules/database.md +29 -0
  170. package/templates/rules/design-workflow.md +17 -0
  171. package/templates/rules/error-handling.md +23 -0
  172. package/templates/rules/gates-taxonomy.md +21 -0
  173. package/templates/rules/git-policy.md +102 -0
  174. package/templates/rules/htmx.md +42 -0
  175. package/templates/rules/nextjs.md +35 -0
  176. package/templates/rules/playwright-launch.md +66 -0
  177. package/templates/rules/pyside6.md +59 -0
  178. package/templates/rules/shadcn.md +33 -0
  179. package/templates/rules/ship-checklist.md +24 -0
  180. package/templates/rules/tauri.md +40 -0
  181. package/templates/rules/test-policy.md +62 -0
  182. package/templates/settings.json +71 -0
  183. package/templates/skills/agent-introspection-debugging/SKILL.md +153 -0
  184. package/templates/skills/continuous-learning-v2/SKILL.md +365 -0
  185. package/templates/skills/continuous-learning-v2/config.json +8 -0
  186. package/templates/skills/continuous-learning-v2/hooks/observe.sh +428 -0
  187. package/templates/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
  188. package/templates/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
  189. package/templates/skills/deep-research/SKILL.md +155 -0
  190. package/templates/skills/deep-research/agents/openai.yaml +7 -0
  191. package/templates/skills/e2e-testing/SKILL.md +326 -0
  192. package/templates/skills/e2e-testing/agents/openai.yaml +7 -0
  193. package/templates/skills/eval-harness/SKILL.md +279 -0
  194. package/templates/skills/eval-harness/agents/openai.yaml +7 -0
  195. package/templates/skills/gh-issue-workflow/ISSUE.template.md +58 -0
  196. package/templates/skills/gh-issue-workflow/SKILL.md +184 -0
  197. package/templates/skills/investor-materials/SKILL.md +96 -0
  198. package/templates/skills/investor-outreach/SKILL.md +91 -0
  199. package/templates/skills/market-research/SKILL.md +75 -0
  200. package/templates/skills/market-research/agents/openai.yaml +7 -0
  201. package/templates/skills/nextjs-turbopack/SKILL.md +44 -0
  202. package/templates/skills/north-star/NORTH_STAR.template.md +114 -0
  203. package/templates/skills/north-star/SKILL.md +103 -0
  204. package/templates/skills/python-patterns/SKILL.md +750 -0
  205. package/templates/skills/python-testing/SKILL.md +816 -0
  206. package/templates/skills/spec-scaling/SKILL.md +89 -0
  207. package/templates/skills/strategic-compact/SKILL.md +131 -0
  208. package/templates/skills/strategic-compact/suggest-compact.sh +54 -0
  209. package/templates/skills/ui-visual-review/SKILL.md +154 -0
  210. package/templates/skills/verification-loop/SKILL.md +126 -0
  211. package/templates/skills/verification-loop/agents/openai.yaml +7 -0
  212. package/templates/track-mcp-map.tsv +15 -0
@@ -0,0 +1,775 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __commonJS = (cb, mod) => function __require() {
12
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+
31
+ // node_modules/tsup/assets/esm_shims.js
32
+ import path from "path";
33
+ import { fileURLToPath } from "url";
34
+ var init_esm_shims = __esm({
35
+ "node_modules/tsup/assets/esm_shims.js"() {
36
+ "use strict";
37
+ }
38
+ });
39
+
40
+ // src/external-assets.ts
41
+ init_esm_shims();
42
+
43
+ // src/track-match.ts
44
+ init_esm_shims();
45
+ function matchTrack(track, pattern) {
46
+ return pattern.split("|").some((p) => globToRegex(p.trim()).test(track));
47
+ }
48
+ function anyTrack(tracks, pattern) {
49
+ return tracks.some((t) => matchTrack(t, pattern));
50
+ }
51
+ function hasDevTrack(tracks) {
52
+ return anyTrack(tracks, "csr-*|ssr-*|data|full|tooling");
53
+ }
54
+ function hasUiTrack(tracks) {
55
+ return anyTrack(tracks, "csr-*|ssr-*|full");
56
+ }
57
+ function globToRegex(pattern) {
58
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
59
+ return new RegExp(`^${escaped}$`);
60
+ }
61
+
62
+ // src/external-assets.ts
63
+ var ALL_CSR_SSR_FULL = [
64
+ "csr-supabase",
65
+ "csr-fastify",
66
+ "csr-fastapi",
67
+ "ssr-htmx",
68
+ "ssr-nextjs",
69
+ "full"
70
+ ];
71
+ var CSR_SSR_NEXTJS_FULL = [
72
+ "csr-supabase",
73
+ "csr-fastify",
74
+ "csr-fastapi",
75
+ "ssr-nextjs",
76
+ "full"
77
+ ];
78
+ var RAILWAY_TRACKS = ["csr-fastify", "csr-fastapi", "ssr-htmx", "ssr-nextjs", "full"];
79
+ var DEV_TRACKS = [
80
+ "csr-supabase",
81
+ "csr-fastify",
82
+ "csr-fastapi",
83
+ "ssr-htmx",
84
+ "ssr-nextjs",
85
+ "data",
86
+ "tooling",
87
+ "full"
88
+ ];
89
+ var DEV_PLUS_PM_TRACKS = [...DEV_TRACKS, "project-management"];
90
+ var EXTERNAL_ASSETS = [
91
+ // === data Track ===
92
+ {
93
+ id: "polars-K-Dense",
94
+ tier: "vetted",
95
+ // K-Dense-AI 26k
96
+ description: "Polars \u2014 fast Rust-based DataFrame (pandas alternative, data track)",
97
+ category: "data",
98
+ source: "K-Dense-AI",
99
+ condition: { kind: "any-track", tracks: ["data", "full"] },
100
+ method: { kind: "skill", source: "K-Dense-AI/scientific-agent-skills", skill: "polars" }
101
+ // v26.56.0 — description 보강: 트랙 hint + 한 줄 의미
102
+ },
103
+ {
104
+ id: "dask-K-Dense",
105
+ tier: "vetted",
106
+ // K-Dense-AI 26k
107
+ description: "Dask \u2014 distributed processing (large DataFrames \xB7 cluster, data track)",
108
+ category: "data",
109
+ source: "K-Dense-AI",
110
+ condition: { kind: "any-track", tracks: ["data", "full"] },
111
+ method: { kind: "skill", source: "K-Dense-AI/scientific-agent-skills", skill: "dask" }
112
+ },
113
+ {
114
+ id: "python-resource-management",
115
+ tier: "vetted",
116
+ // wshobson/agents 36k
117
+ description: "Python memory \xB7 CPU management patterns (wshobson, data track)",
118
+ category: "data",
119
+ source: "wshobson",
120
+ condition: { kind: "any-track", tracks: ["data", "full"] },
121
+ method: {
122
+ kind: "skill",
123
+ source: "https://github.com/wshobson/agents",
124
+ skill: "python-resource-management"
125
+ }
126
+ },
127
+ {
128
+ id: "python-performance-optimization",
129
+ tier: "vetted",
130
+ // wshobson/agents 36k
131
+ description: "Python performance optimization (profiling \xB7 vectorize, wshobson, data track)",
132
+ category: "data",
133
+ source: "wshobson",
134
+ condition: { kind: "any-track", tracks: ["data", "full"] },
135
+ method: {
136
+ kind: "skill",
137
+ source: "https://github.com/wshobson/agents",
138
+ skill: "python-performance-optimization"
139
+ }
140
+ },
141
+ {
142
+ id: "anthropic-data-plugin",
143
+ tier: "official",
144
+ // anthropics/knowledge-work-plugins 18k
145
+ description: "Anthropic data plugin (visualization, SQL exploration)",
146
+ category: "data",
147
+ source: "anthropics",
148
+ condition: { kind: "any-track", tracks: ["data", "full"] },
149
+ method: {
150
+ kind: "plugin",
151
+ marketplace: "anthropics/knowledge-work-plugins",
152
+ pluginId: "data@knowledge-work-plugins"
153
+ }
154
+ },
155
+ // === Internal template assets (v26.81.0, ADR-022 — 이전 OptionFlags.withTauri/withUzysHarness) ===
156
+ {
157
+ id: "tauri-desktop",
158
+ tier: "official",
159
+ // uzys 본 하네스 자체 템플릿
160
+ description: "Tauri desktop rule template (CSR/full tracks \u2014 manifest rule mapping)",
161
+ category: "frontend",
162
+ source: "uzys",
163
+ condition: { kind: "opt-in" },
164
+ method: { kind: "internal", key: "tauri-desktop" }
165
+ },
166
+ {
167
+ id: "uzys-harness",
168
+ tier: "official",
169
+ // uzys 본 하네스 자체 템플릿
170
+ description: "uzys-harness 6-Gate workflow \u2014 /uzys:spec /plan /build /test /review /ship slash commands (+ Codex/Antigravity skills\xB7workflows)",
171
+ category: "workflow",
172
+ source: "uzys",
173
+ condition: { kind: "opt-in" },
174
+ method: { kind: "internal", key: "uzys-harness" }
175
+ },
176
+ // === Option-gated (v26.42.0 — opt-in, BREAKING vs prior has-dev-track auto-install) ===
177
+ {
178
+ id: "addy-agent-skills",
179
+ tier: "vetted",
180
+ // addyosmani 47k
181
+ description: "addy agent-skills (general dev)",
182
+ category: "workflow",
183
+ source: "addyosmani",
184
+ condition: { kind: "opt-in" },
185
+ method: {
186
+ kind: "plugin",
187
+ marketplace: "addyosmani/agent-skills",
188
+ pluginId: "agent-skills@addy-agent-skills"
189
+ }
190
+ },
191
+ {
192
+ id: "superpowers",
193
+ tier: "official",
194
+ // anthropics/claude-plugins-official 공식 배포 (소스 obra 213k)
195
+ // 저자 = obra (190k★ github.com/obra/superpowers). 호스팅 = Anthropic 공식
196
+ // marketplace github.com/anthropics/claude-plugins-official ("Official,
197
+ // Anthropic-managed directory of high quality Claude Code Plugins").
198
+ // source/marketplace 분리는 의도적 — source=저자, marketplace=registry.
199
+ description: "Superpowers \u2014 agentic skills framework (obra, Anthropic official marketplace)",
200
+ category: "workflow",
201
+ source: "obra",
202
+ condition: { kind: "opt-in" },
203
+ method: {
204
+ kind: "plugin",
205
+ marketplace: "anthropics/claude-plugins-official",
206
+ pluginId: "superpowers@claude-plugins-official"
207
+ }
208
+ },
209
+ {
210
+ // v26.75.0 (ADR-021) — wshobson/agents marketplace.json name = "claude-code-workflows"
211
+ // (84 plugins). 대표 = full-stack-orchestration. 다른 orchestrator(agent-orchestration/
212
+ // tdd-workflows/ship-mate 등): `claude plugin install <name>@claude-code-workflows`.
213
+ id: "wshobson-agents",
214
+ tier: "vetted",
215
+ // wshobson/agents 36k
216
+ description: "wshobson agents \u2014 multi-agent orchestration workflows (full-stack/tdd/review)",
217
+ category: "workflow",
218
+ source: "wshobson",
219
+ condition: { kind: "opt-in" },
220
+ method: {
221
+ kind: "plugin",
222
+ marketplace: "wshobson/agents",
223
+ pluginId: "full-stack-orchestration@claude-code-workflows"
224
+ }
225
+ },
226
+ {
227
+ // v26.75.0 (ADR-021) — `npm i --save-dev @fission-ai/openspec` 후 `openspec init` 로 슬래시 주입.
228
+ id: "openspec",
229
+ tier: "vetted",
230
+ // Fission-AI/OpenSpec 53k
231
+ description: "OpenSpec \u2014 spec-driven brownfield delta workflow (propose \u2192 apply \u2192 archive)",
232
+ category: "workflow",
233
+ source: "fission-ai",
234
+ condition: { kind: "opt-in" },
235
+ method: { kind: "npm", pkg: "@fission-ai/openspec", version: "1.4.1" }
236
+ },
237
+ {
238
+ // v26.75.0 (ADR-021) — 비대화형 install. v26.75.1: `--directory .` 누락 시 "Installation
239
+ // directory" 프롬프트에서 hang (Docker realcli 검출). cwd(=project) 기준 `.` 지정으로 봉합.
240
+ id: "bmad-method",
241
+ tier: "vetted",
242
+ // bmad-code-org/BMAD-METHOD 48k
243
+ description: "BMAD-METHOD \u2014 multi-agent agile workflow (PM/Architect/Dev, 12+ agents)",
244
+ category: "workflow",
245
+ source: "bmad-code-org",
246
+ condition: { kind: "opt-in" },
247
+ method: {
248
+ kind: "npx-run",
249
+ cmd: "bmad-method",
250
+ version: "6.8.0",
251
+ args: ["install", "--directory", ".", "--tools", "claude-code", "--yes"]
252
+ }
253
+ },
254
+ // === Railway (csr-fastify|csr-fastapi|ssr-*|full) ===
255
+ // v0.6.3 — railway-plugin entry 제거. railwayapp/railway-plugin repo 자체 존재 안 함
256
+ // (404 Not Found). 공식 docs (https://docs.railway.com/ai/claude-code-plugin) 형식은
257
+ // marketplace add `railwayapp/railway-skills` + plugin install `railway@railway-skills`만.
258
+ // → 아래 railway-skills entry로 단일화.
259
+ {
260
+ id: "railway-skills",
261
+ tier: "experimental",
262
+ // railwayapp/railway-skills 268
263
+ description: "Railway agent-skills (deploy + project/service/env management)",
264
+ category: "backend",
265
+ source: "railwayapp",
266
+ condition: { kind: "any-track", tracks: RAILWAY_TRACKS },
267
+ method: {
268
+ kind: "plugin",
269
+ marketplace: "railwayapp/railway-skills",
270
+ pluginId: "railway@railway-skills"
271
+ }
272
+ },
273
+ // === csr-supabase|full CLI ===
274
+ {
275
+ id: "vercel-cli",
276
+ tier: "vetted",
277
+ // vercel/vercel 15k
278
+ description: "Vercel CLI (npm)",
279
+ category: "backend",
280
+ source: "vercel",
281
+ condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
282
+ method: { kind: "npm", pkg: "vercel", version: "54.11.1" }
283
+ },
284
+ {
285
+ id: "netlify-cli",
286
+ tier: "vetted",
287
+ // netlify/cli 1.9k
288
+ description: "Netlify CLI (npm)",
289
+ category: "backend",
290
+ source: "netlify",
291
+ condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
292
+ method: { kind: "npm", pkg: "netlify-cli", version: "26.1.0" }
293
+ },
294
+ {
295
+ id: "supabase-cli",
296
+ tier: "vetted",
297
+ // supabase 103k
298
+ description: "Supabase CLI (npm) \u2014 first 'supabase login' requires OAuth",
299
+ category: "backend",
300
+ source: "supabase",
301
+ condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
302
+ method: { kind: "npm", pkg: "supabase", version: "2.105.0" }
303
+ },
304
+ // === UI tracks (csr-*|ssr-*|full) ===
305
+ {
306
+ id: "impeccable",
307
+ tier: "vetted",
308
+ // pbakaus 31k
309
+ description: "Impeccable \u2014 UI design guide + visual consistency review (pbakaus, single-skill repo)",
310
+ category: "frontend",
311
+ source: "pbakaus",
312
+ condition: { kind: "any-track", tracks: ALL_CSR_SSR_FULL },
313
+ // v26.54.1 — skills cli 1.5.7 부터 `--skill <name>` 명시 필수 (single-skill repo 도)
314
+ method: { kind: "skill", source: "pbakaus/impeccable", skill: "impeccable" }
315
+ },
316
+ // === dev tools (has_dev_track) ===
317
+ {
318
+ id: "playwright-skill",
319
+ tier: "experimental",
320
+ // testdino-hq/playwright-skill 264
321
+ description: "Playwright \u2014 browser automation E2E test authoring guide (testdino-hq)",
322
+ category: "dev-tools",
323
+ source: "testdino-hq",
324
+ condition: { kind: "has-dev-track" },
325
+ // v26.54.1 — skills cli 1.5.7 부터 `--skill <name>` 명시 필수
326
+ method: {
327
+ kind: "skill",
328
+ source: "testdino-hq/playwright-skill",
329
+ skill: "playwright-skill"
330
+ }
331
+ },
332
+ {
333
+ id: "find-skills",
334
+ tier: "vetted",
335
+ // vercel-labs/skills 20k (license none — 출처 신뢰)
336
+ description: "find-skills \u2014 search \xB7 rank all installed skills (vercel-labs, all dev tracks)",
337
+ category: "dev-tools",
338
+ source: "vercel-labs",
339
+ condition: { kind: "has-dev-track" },
340
+ method: { kind: "skill", source: "vercel-labs/skills", skill: "find-skills" }
341
+ },
342
+ {
343
+ id: "agent-browser",
344
+ tier: "vetted",
345
+ // vercel-labs/agent-browser 34k
346
+ description: "agent-browser \u2014 agent-friendly Playwright wrapper (screenshot \xB7 DOM search CLI, dev tracks)",
347
+ // v26.78.0 — Understanding 으로 재분류: 웹 지각(screenshot·DOM). 영상/코드 지각과 같은 축.
348
+ category: "understanding",
349
+ source: "vercel-labs",
350
+ condition: { kind: "has-dev-track" },
351
+ method: { kind: "npm", pkg: "agent-browser", version: "0.27.2" }
352
+ },
353
+ // v26.78.0 — Understanding 신규 3종 (plugin, opt-in). 에이전트 인지 증강: 영상·코드 지각 + 메모리.
354
+ {
355
+ id: "claude-video",
356
+ tier: "vetted",
357
+ // bradautomates/claude-video 1.8k
358
+ description: "Claude Video \u2014 /watch downloads any video, extracts frames + transcript so Claude can see + hear it (yt-dlp/ffmpeg auto on first run)",
359
+ category: "understanding",
360
+ source: "bradautomates",
361
+ condition: { kind: "opt-in" },
362
+ method: {
363
+ kind: "plugin",
364
+ marketplace: "bradautomates/claude-video",
365
+ pluginId: "watch@claude-video"
366
+ }
367
+ },
368
+ {
369
+ id: "understand-anything",
370
+ tier: "vetted",
371
+ // Lum1104/Understand-Anything 53k
372
+ description: "Understand Anything \u2014 multi-agent pipeline builds an interactive knowledge graph of your codebase (files/functions/deps) to explore + query",
373
+ category: "understanding",
374
+ source: "Lum1104",
375
+ condition: { kind: "opt-in" },
376
+ method: {
377
+ kind: "plugin",
378
+ marketplace: "Lum1104/Understand-Anything",
379
+ pluginId: "understand-anything@understand-anything"
380
+ }
381
+ },
382
+ {
383
+ id: "agentmemory",
384
+ tier: "vetted",
385
+ // rohitg00/agentmemory 21k
386
+ description: "AgentMemory \u2014 persistent memory runtime; plugin auto-wires MCP (53 tools) + hooks + skills. Runtime server: npx @agentmemory/agentmemory",
387
+ category: "understanding",
388
+ source: "rohitg00",
389
+ condition: { kind: "opt-in" },
390
+ method: {
391
+ kind: "plugin",
392
+ marketplace: "rohitg00/agentmemory",
393
+ pluginId: "agentmemory@agentmemory"
394
+ }
395
+ },
396
+ {
397
+ id: "architecture-decision-record",
398
+ tier: "experimental",
399
+ // yonatangross/orchestkit 179
400
+ description: "ADR \u2014 Architecture Decision Record template + status flow (orchestkit, one of 80+ skills)",
401
+ category: "dev-tools",
402
+ source: "yonatangross",
403
+ condition: { kind: "has-dev-track" },
404
+ method: {
405
+ kind: "skill",
406
+ source: "yonatangross/orchestkit",
407
+ skill: "architecture-decision-record"
408
+ }
409
+ },
410
+ // === Supabase agent-skills (csr-supabase|full) ===
411
+ {
412
+ id: "supabase-agent-skills",
413
+ tier: "vetted",
414
+ // supabase/agent-skills 2.2k
415
+ description: "Supabase \u2014 RLS \xB7 auth \xB7 edge function \xB7 realtime guide (csr-supabase \xB7 full tracks)",
416
+ category: "backend",
417
+ source: "supabase",
418
+ condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
419
+ method: {
420
+ kind: "plugin",
421
+ marketplace: "supabase/agent-skills",
422
+ pluginId: "supabase@supabase-agent-skills"
423
+ }
424
+ },
425
+ {
426
+ id: "postgres-best-practices",
427
+ tier: "vetted",
428
+ // supabase/agent-skills 2.2k
429
+ description: "Postgres best practices \u2014 schema \xB7 index \xB7 query patterns (csr-supabase \xB7 full tracks)",
430
+ category: "backend",
431
+ source: "supabase",
432
+ condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
433
+ method: {
434
+ kind: "plugin",
435
+ marketplace: "supabase/agent-skills",
436
+ pluginId: "postgres-best-practices@supabase-agent-skills"
437
+ }
438
+ },
439
+ // === React + Next UI tracks ===
440
+ // v0.6.3 — vercel-labs/agent-skills source는 short form 안 됨. full HTTPS URL 필요.
441
+ // 사용자 확인 형식: `npx skills add https://github.com/vercel-labs/agent-skills --skill <name>`.
442
+ {
443
+ id: "react-best-practices",
444
+ tier: "vetted",
445
+ // vercel-labs/agent-skills 27k (license none — 출처 신뢰)
446
+ description: "React best practices \u2014 Vercel's hook \xB7 perf \xB7 component patterns (CSR \xB7 SSR \xB7 Next tracks)",
447
+ category: "frontend",
448
+ source: "vercel-labs",
449
+ condition: { kind: "any-track", tracks: CSR_SSR_NEXTJS_FULL },
450
+ method: {
451
+ kind: "skill",
452
+ source: "https://github.com/vercel-labs/agent-skills",
453
+ // v0.6.5 — skills.sh registry name. GitHub dir 이름(react-best-practices)과 다름.
454
+ // skills.sh: 대부분 vercel- prefix (web-design-guidelines, deploy-to-vercel만 예외).
455
+ skill: "vercel-react-best-practices"
456
+ }
457
+ },
458
+ {
459
+ id: "shadcn-ui",
460
+ tier: "vetted",
461
+ // shadcn-ui/ui 115k
462
+ description: "shadcn/ui \u2014 Radix-based React component copy + Tailwind theme (shadcn official)",
463
+ category: "frontend",
464
+ source: "shadcn-ui",
465
+ condition: { kind: "any-track", tracks: CSR_SSR_NEXTJS_FULL },
466
+ // v26.54.1 — shadcn/ui repo 의 실제 skill 이름은 `shadcn` (자산 id 와 다름).
467
+ method: { kind: "skill", source: "shadcn/ui", skill: "shadcn" }
468
+ },
469
+ {
470
+ id: "web-design-guidelines",
471
+ tier: "vetted",
472
+ // vercel-labs/agent-skills 27k (license none — 출처 신뢰)
473
+ description: "Web design guidelines \u2014 Vercel's visual hierarchy \xB7 color \xB7 spacing (CSR \xB7 SSR \xB7 Next tracks)",
474
+ category: "frontend",
475
+ source: "vercel-labs",
476
+ condition: { kind: "any-track", tracks: CSR_SSR_NEXTJS_FULL },
477
+ method: {
478
+ kind: "skill",
479
+ source: "https://github.com/vercel-labs/agent-skills",
480
+ skill: "web-design-guidelines"
481
+ }
482
+ },
483
+ {
484
+ id: "next-skills",
485
+ tier: "experimental",
486
+ // vercel-labs/next-skills 895
487
+ description: "Next-skills \u2014 Next.js App Router \xB7 Server Action patterns (ssr-nextjs \xB7 full tracks)",
488
+ category: "backend",
489
+ source: "vercel-labs",
490
+ condition: { kind: "any-track", tracks: ["ssr-nextjs", "full"] },
491
+ method: { kind: "skill", source: "vercel-labs/next-skills" }
492
+ },
493
+ // === Executive tracks ===
494
+ {
495
+ id: "anthropic-document-skills",
496
+ tier: "official",
497
+ // anthropics/skills 144k
498
+ description: "Anthropic document-skills (pptx/docx/xlsx/pdf)",
499
+ category: "business",
500
+ source: "anthropics",
501
+ condition: { kind: "any-track", tracks: ["executive", "full"] },
502
+ method: {
503
+ kind: "plugin",
504
+ marketplace: "anthropics/skills",
505
+ pluginId: "document-skills@anthropic-agent-skills"
506
+ }
507
+ },
508
+ // alirezarezvani/claude-skills marketplace (v2.3.0) — 2026-04-25 통합 갱신.
509
+ // 기존 alirezarezvani/c-level-skills + alirezarezvani/finance-skills 별도 marketplace
510
+ // → 통합된 alirezarezvani/claude-skills marketplace (claude-code-skills 이름)로 이동.
511
+ {
512
+ id: "c-level-skills",
513
+ tier: "vetted",
514
+ // alirezarezvani 16k
515
+ description: "c-level-skills (claude-code-skills, 28 advisory)",
516
+ category: "business",
517
+ source: "alirezarezvani",
518
+ condition: { kind: "any-track", tracks: ["executive", "full"] },
519
+ method: {
520
+ kind: "plugin",
521
+ marketplace: "alirezarezvani/claude-skills",
522
+ pluginId: "c-level-skills@claude-code-skills"
523
+ }
524
+ },
525
+ {
526
+ id: "business-growth-skills",
527
+ tier: "vetted",
528
+ // alirezarezvani 16k
529
+ description: "business-growth-skills (4 \u2014 customer success, sales eng, revops, contract)",
530
+ category: "business",
531
+ source: "alirezarezvani",
532
+ // v0.5.0 — growth-marketing Track에서도 재사용. 합집합 조건.
533
+ condition: { kind: "any-track", tracks: ["executive", "full", "growth-marketing"] },
534
+ method: {
535
+ kind: "plugin",
536
+ marketplace: "alirezarezvani/claude-skills",
537
+ pluginId: "business-growth-skills@claude-code-skills"
538
+ }
539
+ },
540
+ {
541
+ id: "finance-skills",
542
+ tier: "vetted",
543
+ // alirezarezvani 16k
544
+ description: "finance-skills (3 \u2014 financial analyst, SaaS metrics, investment advisor)",
545
+ category: "business",
546
+ source: "alirezarezvani",
547
+ condition: { kind: "any-track", tracks: ["executive", "full"] },
548
+ method: {
549
+ kind: "plugin",
550
+ marketplace: "alirezarezvani/claude-skills",
551
+ pluginId: "finance-skills@claude-code-skills"
552
+ }
553
+ },
554
+ // === Project Management Track (v0.5.0) ===
555
+ // SPEC docs/specs/new-tracks-pm-growth.md §3.5 — pm-skills 4/4.
556
+ {
557
+ id: "pm-skills",
558
+ tier: "vetted",
559
+ // alirezarezvani 16k
560
+ description: "pm-skills (6 \u2014 senior PM, scrum master, Jira/Confluence/Atlassian admin, template creator)",
561
+ category: "business",
562
+ source: "alirezarezvani",
563
+ condition: { kind: "any-track", tracks: ["project-management"] },
564
+ method: {
565
+ kind: "plugin",
566
+ marketplace: "alirezarezvani/claude-skills",
567
+ pluginId: "pm-skills@claude-code-skills"
568
+ }
569
+ },
570
+ // SPEC §3.5 — product-skills: has-dev-track + project-management 합집합 (executive/growth-marketing 제외).
571
+ // v0.8.1 — DEV_PLUS_PM_TRACKS 상수로 SSOT 통일 (reviewer MEDIUM-3 fix).
572
+ {
573
+ id: "product-skills",
574
+ tier: "vetted",
575
+ // alirezarezvani 16k
576
+ description: "product-skills (15 \u2014 RICE, PRD, agile PO, UX research, SaaS scaffolder ...)",
577
+ category: "dev-tools",
578
+ source: "alirezarezvani",
579
+ condition: { kind: "any-track", tracks: [...DEV_PLUS_PM_TRACKS] },
580
+ method: {
581
+ kind: "plugin",
582
+ marketplace: "alirezarezvani/claude-skills",
583
+ pluginId: "product-skills@claude-code-skills"
584
+ }
585
+ },
586
+ // === Growth Marketing Track (v0.5.0) ===
587
+ // SPEC docs/specs/new-tracks-pm-growth.md §3.5 — 4 entries 모두 4/4.
588
+ {
589
+ id: "marketing-skills",
590
+ tier: "vetted",
591
+ // alirezarezvani 16k
592
+ description: "marketing-skills (44 \u2014 content/SEO/CRO/channels/growth/intelligence/sales/twitter)",
593
+ category: "business",
594
+ source: "alirezarezvani",
595
+ condition: { kind: "any-track", tracks: ["growth-marketing"] },
596
+ method: {
597
+ kind: "plugin",
598
+ marketplace: "alirezarezvani/claude-skills",
599
+ pluginId: "marketing-skills@claude-code-skills"
600
+ }
601
+ },
602
+ // v26.76.0 — content-creator / demand-gen 제거: alirezarezvani/claude-skills marketplace.json 에
603
+ // 해당 plugin 부재(Docker 실설치 검출, exit 1). 거짓 광고 0건 원칙(Promise=Implementation).
604
+ // growth-marketing 트랙은 business-growth-skills + marketing-skills + research-summarizer 유지.
605
+ {
606
+ id: "research-summarizer",
607
+ tier: "vetted",
608
+ // alirezarezvani 16k
609
+ description: "research-summarizer (market research summarization)",
610
+ category: "business",
611
+ source: "alirezarezvani",
612
+ condition: { kind: "any-track", tracks: ["growth-marketing"] },
613
+ method: {
614
+ kind: "plugin",
615
+ marketplace: "alirezarezvani/claude-skills",
616
+ pluginId: "research-summarizer@claude-code-skills"
617
+ }
618
+ },
619
+ // === Code-quality enforcement (has-dev-track, v0.5.0) ===
620
+ // SPEC §3.5 — karpathy-coder 4/4. CLAUDE.md P1-P4 선언적 원칙의 검출 도구 layer.
621
+ // 4 Python tools (stdlib only) + reviewer agent + /karpathy-check + pre-commit hook.
622
+ {
623
+ id: "karpathy-coder",
624
+ tier: "vetted",
625
+ // alirezarezvani 16k
626
+ description: "karpathy-coder (4 Python tool + reviewer agent + /karpathy-check + pre-commit hook)",
627
+ category: "dev-tools",
628
+ source: "alirezarezvani",
629
+ condition: { kind: "has-dev-track" },
630
+ method: {
631
+ kind: "plugin",
632
+ marketplace: "alirezarezvani/claude-skills",
633
+ pluginId: "karpathy-coder@claude-code-skills"
634
+ }
635
+ },
636
+ // === Option-gated ===
637
+ {
638
+ id: "gsd-orchestrator",
639
+ tier: "vetted",
640
+ // gsd-build/get-shit-done 63k
641
+ description: "GSD orchestrator (npx get-shit-done-cc)",
642
+ category: "workflow",
643
+ source: "get-shit-done-cc",
644
+ condition: { kind: "opt-in" },
645
+ method: { kind: "npx-run", cmd: "get-shit-done-cc", version: "1.42.3" }
646
+ },
647
+ {
648
+ // v26.39.2 fix — marketplace name = "trailofbits" (NOT "trailofbits-skills") +
649
+ // "trailofbits-skills" plugin 자체가 존재하지 않음. marketplace 안에 14+ 개별 plugin.
650
+ // 단일 대표 plugin = `differential-review` (코드 변경 보안 리뷰, 가장 보편).
651
+ // 추가 plugin 원하는 사용자는: `claude plugin install <name>@trailofbits` (예: audit-context-building)
652
+ id: "trailofbits-skills",
653
+ tier: "vetted",
654
+ // trailofbits/skills 5.5k (CC-BY-SA — 출처 신뢰)
655
+ description: "Trail of Bits differential-review plugin (security-focused code review)",
656
+ category: "dev-tools",
657
+ source: "trailofbits",
658
+ condition: { kind: "opt-in" },
659
+ method: {
660
+ kind: "plugin",
661
+ marketplace: "trailofbits/skills",
662
+ pluginId: "differential-review@trailofbits"
663
+ }
664
+ },
665
+ {
666
+ id: "ecc-plugin",
667
+ tier: "vetted",
668
+ // affaan-m/everything-claude-code 199k
669
+ description: "ECC \u2014 60 agents \xB7 230 skills \xB7 75 commands. Affaan's hackathon package",
670
+ category: "ecc-suite",
671
+ source: "affaan-m",
672
+ condition: { kind: "opt-in" },
673
+ // v26.54.1 — upstream marketplace.json 의 name 은 "ecc" (plugin name 도 "ecc").
674
+ // 기존 매핑 `everything-claude-code@everything-claude-code` 는 marketplace 가
675
+ // 그 이름으로 등록되던 옛 버전 기준. fresh install 에서는 "Plugin not found" 발생.
676
+ method: {
677
+ kind: "plugin",
678
+ marketplace: "affaan-m/everything-claude-code",
679
+ pluginId: "ecc@ecc"
680
+ }
681
+ },
682
+ {
683
+ id: "ecc-prune",
684
+ tier: "official",
685
+ // uzys 본 하네스 자체
686
+ description: "ECC prune (drop items beyond curated 89 KEEP \u2192 copy to .claude/local-plugins/ecc/)",
687
+ category: "ecc-suite",
688
+ source: "uzys",
689
+ condition: { kind: "option", flag: "withPrune" },
690
+ method: {
691
+ kind: "shell-script",
692
+ script: "scripts/prune-ecc.sh",
693
+ args: ["--apply", "--force"]
694
+ }
695
+ }
696
+ ];
697
+ var TRUST_TIER = Object.fromEntries(
698
+ EXTERNAL_ASSETS.map((a) => [a.id, a.tier])
699
+ );
700
+ function assetTrustTier(assetId) {
701
+ return TRUST_TIER[assetId] ?? "experimental";
702
+ }
703
+ function shouldInstallAsset(asset, ctx) {
704
+ if (ctx.userOverride?.forceExclude.includes(asset.id)) return false;
705
+ if (ctx.userOverride?.forceInclude.includes(asset.id)) return true;
706
+ if (TRUST_TIER[asset.id] === "experimental") return false;
707
+ return matchesCondition(asset, ctx);
708
+ }
709
+ function matchesCondition(asset, ctx) {
710
+ const cond = asset.condition;
711
+ switch (cond.kind) {
712
+ case "any-track":
713
+ return ctx.tracks.some((t) => cond.tracks.includes(t));
714
+ case "has-dev-track":
715
+ return hasDevTrack(ctx.tracks);
716
+ case "option":
717
+ return ctx.options[cond.flag] === true;
718
+ case "opt-in":
719
+ return false;
720
+ }
721
+ }
722
+ function isAssetSelected(assetId, ctx) {
723
+ const asset = EXTERNAL_ASSETS.find((a) => a.id === assetId);
724
+ return asset ? shouldInstallAsset(asset, ctx) : false;
725
+ }
726
+ function experimentalOptInCandidates(ctx) {
727
+ return EXTERNAL_ASSETS.filter(
728
+ (a) => TRUST_TIER[a.id] === "experimental" && !ctx.userOverride?.forceInclude.includes(a.id) && matchesCondition(a, ctx)
729
+ );
730
+ }
731
+ function filterApplicableAssets(assets, ctx) {
732
+ return assets.filter((a) => shouldInstallAsset(a, ctx));
733
+ }
734
+
735
+ // src/categories.ts
736
+ init_esm_shims();
737
+ var CATEGORIES = [
738
+ "frontend",
739
+ "backend",
740
+ "data",
741
+ "business",
742
+ "dev-tools",
743
+ "understanding",
744
+ "workflow",
745
+ "ecc-suite"
746
+ ];
747
+ var CATEGORY_TITLES = {
748
+ frontend: "\u{1F3A8} Frontend (UI \xB7 Design)",
749
+ backend: "\u{1F5C4}\uFE0F Backend (API \xB7 DB \xB7 Deploy)",
750
+ data: "\u{1F4CA} Data",
751
+ business: "\u{1F4BC} Business (Documents)",
752
+ "dev-tools": "\u{1F6E1}\uFE0F Dev Tools (Security \xB7 Quality)",
753
+ // v26.78.0 — 에이전트 인지 증강: 환경에 대한 지각(영상·웹·코드) + 기억(memory).
754
+ understanding: "\u{1F9E0} Understanding (Perception \xB7 Memory)",
755
+ workflow: "\u{1F504} Workflow (Development Cycle)",
756
+ "ecc-suite": "\u{1F4E6} ECC Suite"
757
+ };
758
+
759
+ export {
760
+ __commonJS,
761
+ __toESM,
762
+ init_esm_shims,
763
+ anyTrack,
764
+ hasDevTrack,
765
+ hasUiTrack,
766
+ EXTERNAL_ASSETS,
767
+ TRUST_TIER,
768
+ assetTrustTier,
769
+ isAssetSelected,
770
+ experimentalOptInCandidates,
771
+ filterApplicableAssets,
772
+ CATEGORIES,
773
+ CATEGORY_TITLES
774
+ };
775
+ //# sourceMappingURL=chunk-SDVAM5JZ.js.map