teamcast 0.6.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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +654 -0
  3. package/dist/application/build-generated-files.d.ts +8 -0
  4. package/dist/application/build-generated-files.d.ts.map +1 -0
  5. package/dist/application/build-generated-files.js +16 -0
  6. package/dist/application/build-generated-files.js.map +1 -0
  7. package/dist/application/team.d.ts +27 -0
  8. package/dist/application/team.d.ts.map +1 -0
  9. package/dist/application/team.js +203 -0
  10. package/dist/application/team.js.map +1 -0
  11. package/dist/application/validate-team.d.ts +32 -0
  12. package/dist/application/validate-team.d.ts.map +1 -0
  13. package/dist/application/validate-team.js +132 -0
  14. package/dist/application/validate-team.js.map +1 -0
  15. package/dist/cli/diff.d.ts +3 -0
  16. package/dist/cli/diff.d.ts.map +1 -0
  17. package/dist/cli/diff.js +57 -0
  18. package/dist/cli/diff.js.map +1 -0
  19. package/dist/cli/explain.d.ts +3 -0
  20. package/dist/cli/explain.d.ts.map +1 -0
  21. package/dist/cli/explain.js +29 -0
  22. package/dist/cli/explain.js.map +1 -0
  23. package/dist/cli/generate.d.ts +3 -0
  24. package/dist/cli/generate.d.ts.map +1 -0
  25. package/dist/cli/generate.js +68 -0
  26. package/dist/cli/generate.js.map +1 -0
  27. package/dist/cli/import.d.ts +3 -0
  28. package/dist/cli/import.d.ts.map +1 -0
  29. package/dist/cli/import.js +93 -0
  30. package/dist/cli/import.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +19 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/cli/init.d.ts +3 -0
  36. package/dist/cli/init.d.ts.map +1 -0
  37. package/dist/cli/init.js +155 -0
  38. package/dist/cli/init.js.map +1 -0
  39. package/dist/cli/manage.d.ts +3 -0
  40. package/dist/cli/manage.d.ts.map +1 -0
  41. package/dist/cli/manage.js +350 -0
  42. package/dist/cli/manage.js.map +1 -0
  43. package/dist/cli/manifest-validation.d.ts +13 -0
  44. package/dist/cli/manifest-validation.d.ts.map +1 -0
  45. package/dist/cli/manifest-validation.js +38 -0
  46. package/dist/cli/manifest-validation.js.map +1 -0
  47. package/dist/cli/reset.d.ts +3 -0
  48. package/dist/cli/reset.d.ts.map +1 -0
  49. package/dist/cli/reset.js +116 -0
  50. package/dist/cli/reset.js.map +1 -0
  51. package/dist/cli/validate.d.ts +3 -0
  52. package/dist/cli/validate.d.ts.map +1 -0
  53. package/dist/cli/validate.js +48 -0
  54. package/dist/cli/validate.js.map +1 -0
  55. package/dist/components/agent-fragments.d.ts +15 -0
  56. package/dist/components/agent-fragments.d.ts.map +1 -0
  57. package/dist/components/agent-fragments.js +163 -0
  58. package/dist/components/agent-fragments.js.map +1 -0
  59. package/dist/components/policy-fragments.d.ts +5 -0
  60. package/dist/components/policy-fragments.d.ts.map +1 -0
  61. package/dist/components/policy-fragments.js +125 -0
  62. package/dist/components/policy-fragments.js.map +1 -0
  63. package/dist/core/assertions.d.ts +28 -0
  64. package/dist/core/assertions.d.ts.map +1 -0
  65. package/dist/core/assertions.js +11 -0
  66. package/dist/core/assertions.js.map +1 -0
  67. package/dist/core/guards.d.ts +11 -0
  68. package/dist/core/guards.d.ts.map +1 -0
  69. package/dist/core/guards.js +20 -0
  70. package/dist/core/guards.js.map +1 -0
  71. package/dist/core/index.d.ts +9 -0
  72. package/dist/core/index.d.ts.map +1 -0
  73. package/dist/core/index.js +9 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/core/instructions.d.ts +10 -0
  76. package/dist/core/instructions.d.ts.map +1 -0
  77. package/dist/core/instructions.js +33 -0
  78. package/dist/core/instructions.js.map +1 -0
  79. package/dist/core/permissions.d.ts +10 -0
  80. package/dist/core/permissions.d.ts.map +1 -0
  81. package/dist/core/permissions.js +67 -0
  82. package/dist/core/permissions.js.map +1 -0
  83. package/dist/core/policy-evaluator.d.ts +5 -0
  84. package/dist/core/policy-evaluator.d.ts.map +1 -0
  85. package/dist/core/policy-evaluator.js +161 -0
  86. package/dist/core/policy-evaluator.js.map +1 -0
  87. package/dist/core/skill-resolver.d.ts +8 -0
  88. package/dist/core/skill-resolver.d.ts.map +1 -0
  89. package/dist/core/skill-resolver.js +17 -0
  90. package/dist/core/skill-resolver.js.map +1 -0
  91. package/dist/core/skills.d.ts +4 -0
  92. package/dist/core/skills.d.ts.map +1 -0
  93. package/dist/core/skills.js +14 -0
  94. package/dist/core/skills.js.map +1 -0
  95. package/dist/core/types.d.ts +117 -0
  96. package/dist/core/types.d.ts.map +1 -0
  97. package/dist/core/types.js +6 -0
  98. package/dist/core/types.js.map +1 -0
  99. package/dist/detector/index.d.ts +7 -0
  100. package/dist/detector/index.d.ts.map +1 -0
  101. package/dist/detector/index.js +57 -0
  102. package/dist/detector/index.js.map +1 -0
  103. package/dist/diff/index.d.ts +10 -0
  104. package/dist/diff/index.d.ts.map +1 -0
  105. package/dist/diff/index.js +26 -0
  106. package/dist/diff/index.js.map +1 -0
  107. package/dist/explainer/index.d.ts +3 -0
  108. package/dist/explainer/index.d.ts.map +1 -0
  109. package/dist/explainer/index.js +85 -0
  110. package/dist/explainer/index.js.map +1 -0
  111. package/dist/generator/file-policies.d.ts +2 -0
  112. package/dist/generator/file-policies.d.ts.map +1 -0
  113. package/dist/generator/file-policies.js +4 -0
  114. package/dist/generator/file-policies.js.map +1 -0
  115. package/dist/generator/index.d.ts +5 -0
  116. package/dist/generator/index.d.ts.map +1 -0
  117. package/dist/generator/index.js +10 -0
  118. package/dist/generator/index.js.map +1 -0
  119. package/dist/generator/renderers/agent-md.d.ts +5 -0
  120. package/dist/generator/renderers/agent-md.d.ts.map +1 -0
  121. package/dist/generator/renderers/agent-md.js +66 -0
  122. package/dist/generator/renderers/agent-md.js.map +1 -0
  123. package/dist/generator/renderers/agents-md.d.ts +4 -0
  124. package/dist/generator/renderers/agents-md.d.ts.map +1 -0
  125. package/dist/generator/renderers/agents-md.js +86 -0
  126. package/dist/generator/renderers/agents-md.js.map +1 -0
  127. package/dist/generator/renderers/claude-md.d.ts +4 -0
  128. package/dist/generator/renderers/claude-md.d.ts.map +1 -0
  129. package/dist/generator/renderers/claude-md.js +68 -0
  130. package/dist/generator/renderers/claude-md.js.map +1 -0
  131. package/dist/generator/renderers/codex-config.d.ts +4 -0
  132. package/dist/generator/renderers/codex-config.d.ts.map +1 -0
  133. package/dist/generator/renderers/codex-config.js +145 -0
  134. package/dist/generator/renderers/codex-config.js.map +1 -0
  135. package/dist/generator/renderers/codex-skill-md.d.ts +4 -0
  136. package/dist/generator/renderers/codex-skill-md.d.ts.map +1 -0
  137. package/dist/generator/renderers/codex-skill-md.js +47 -0
  138. package/dist/generator/renderers/codex-skill-md.js.map +1 -0
  139. package/dist/generator/renderers/settings-json.d.ts +5 -0
  140. package/dist/generator/renderers/settings-json.d.ts.map +1 -0
  141. package/dist/generator/renderers/settings-json.js +100 -0
  142. package/dist/generator/renderers/settings-json.js.map +1 -0
  143. package/dist/generator/renderers/skill-md.d.ts +4 -0
  144. package/dist/generator/renderers/skill-md.d.ts.map +1 -0
  145. package/dist/generator/renderers/skill-md.js +44 -0
  146. package/dist/generator/renderers/skill-md.js.map +1 -0
  147. package/dist/generator/state.d.ts +14 -0
  148. package/dist/generator/state.d.ts.map +1 -0
  149. package/dist/generator/state.js +76 -0
  150. package/dist/generator/state.js.map +1 -0
  151. package/dist/generator/targets/claude.d.ts +3 -0
  152. package/dist/generator/targets/claude.d.ts.map +1 -0
  153. package/dist/generator/targets/claude.js +24 -0
  154. package/dist/generator/targets/claude.js.map +1 -0
  155. package/dist/generator/targets/codex.d.ts +3 -0
  156. package/dist/generator/targets/codex.d.ts.map +1 -0
  157. package/dist/generator/targets/codex.js +19 -0
  158. package/dist/generator/targets/codex.js.map +1 -0
  159. package/dist/generator/targets/index.d.ts +4 -0
  160. package/dist/generator/targets/index.d.ts.map +1 -0
  161. package/dist/generator/targets/index.js +10 -0
  162. package/dist/generator/targets/index.js.map +1 -0
  163. package/dist/generator/targets/types.d.ts +8 -0
  164. package/dist/generator/targets/types.d.ts.map +1 -0
  165. package/dist/generator/targets/types.js +2 -0
  166. package/dist/generator/targets/types.js.map +1 -0
  167. package/dist/generator/types.d.ts +11 -0
  168. package/dist/generator/types.d.ts.map +1 -0
  169. package/dist/generator/types.js +2 -0
  170. package/dist/generator/types.js.map +1 -0
  171. package/dist/generator/writer.d.ts +5 -0
  172. package/dist/generator/writer.d.ts.map +1 -0
  173. package/dist/generator/writer.js +14 -0
  174. package/dist/generator/writer.js.map +1 -0
  175. package/dist/importer/index.d.ts +12 -0
  176. package/dist/importer/index.d.ts.map +1 -0
  177. package/dist/importer/index.js +295 -0
  178. package/dist/importer/index.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +25 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/manifest/compat.d.ts +6 -0
  184. package/dist/manifest/compat.d.ts.map +1 -0
  185. package/dist/manifest/compat.js +56 -0
  186. package/dist/manifest/compat.js.map +1 -0
  187. package/dist/manifest/defaults.d.ts +4 -0
  188. package/dist/manifest/defaults.d.ts.map +1 -0
  189. package/dist/manifest/defaults.js +28 -0
  190. package/dist/manifest/defaults.js.map +1 -0
  191. package/dist/manifest/normalize.d.ts +14 -0
  192. package/dist/manifest/normalize.d.ts.map +1 -0
  193. package/dist/manifest/normalize.js +353 -0
  194. package/dist/manifest/normalize.js.map +1 -0
  195. package/dist/manifest/reader.d.ts +7 -0
  196. package/dist/manifest/reader.d.ts.map +1 -0
  197. package/dist/manifest/reader.js +36 -0
  198. package/dist/manifest/reader.js.map +1 -0
  199. package/dist/manifest/schema-validator.d.ts +13 -0
  200. package/dist/manifest/schema-validator.d.ts.map +1 -0
  201. package/dist/manifest/schema-validator.js +33 -0
  202. package/dist/manifest/schema-validator.js.map +1 -0
  203. package/dist/manifest/types.d.ts +150 -0
  204. package/dist/manifest/types.d.ts.map +1 -0
  205. package/dist/manifest/types.js +4 -0
  206. package/dist/manifest/types.js.map +1 -0
  207. package/dist/manifest/writer.d.ts +3 -0
  208. package/dist/manifest/writer.d.ts.map +1 -0
  209. package/dist/manifest/writer.js +10 -0
  210. package/dist/manifest/writer.js.map +1 -0
  211. package/dist/presets/index.d.ts +6 -0
  212. package/dist/presets/index.d.ts.map +1 -0
  213. package/dist/presets/index.js +56 -0
  214. package/dist/presets/index.js.map +1 -0
  215. package/dist/presets/types.d.ts +12 -0
  216. package/dist/presets/types.d.ts.map +1 -0
  217. package/dist/presets/types.js +2 -0
  218. package/dist/presets/types.js.map +1 -0
  219. package/dist/renderers/claude/agent-md.d.ts +5 -0
  220. package/dist/renderers/claude/agent-md.d.ts.map +1 -0
  221. package/dist/renderers/claude/agent-md.js +45 -0
  222. package/dist/renderers/claude/agent-md.js.map +1 -0
  223. package/dist/renderers/claude/docs.d.ts +5 -0
  224. package/dist/renderers/claude/docs.d.ts.map +1 -0
  225. package/dist/renderers/claude/docs.js +155 -0
  226. package/dist/renderers/claude/docs.js.map +1 -0
  227. package/dist/renderers/claude/index.d.ts +5 -0
  228. package/dist/renderers/claude/index.d.ts.map +1 -0
  229. package/dist/renderers/claude/index.js +23 -0
  230. package/dist/renderers/claude/index.js.map +1 -0
  231. package/dist/renderers/claude/policy-mapper.d.ts +10 -0
  232. package/dist/renderers/claude/policy-mapper.d.ts.map +1 -0
  233. package/dist/renderers/claude/policy-mapper.js +40 -0
  234. package/dist/renderers/claude/policy-mapper.js.map +1 -0
  235. package/dist/renderers/claude/settings.d.ts +5 -0
  236. package/dist/renderers/claude/settings.d.ts.map +1 -0
  237. package/dist/renderers/claude/settings.js +77 -0
  238. package/dist/renderers/claude/settings.js.map +1 -0
  239. package/dist/renderers/claude/skill-map.d.ts +16 -0
  240. package/dist/renderers/claude/skill-map.d.ts.map +1 -0
  241. package/dist/renderers/claude/skill-map.js +39 -0
  242. package/dist/renderers/claude/skill-map.js.map +1 -0
  243. package/dist/renderers/claude/skill-md.d.ts +4 -0
  244. package/dist/renderers/claude/skill-md.d.ts.map +1 -0
  245. package/dist/renderers/claude/skill-md.js +35 -0
  246. package/dist/renderers/claude/skill-md.js.map +1 -0
  247. package/dist/renderers/claude/tools.d.ts +4 -0
  248. package/dist/renderers/claude/tools.d.ts.map +1 -0
  249. package/dist/renderers/claude/tools.js +12 -0
  250. package/dist/renderers/claude/tools.js.map +1 -0
  251. package/dist/renderers/index.d.ts +3 -0
  252. package/dist/renderers/index.d.ts.map +1 -0
  253. package/dist/renderers/index.js +2 -0
  254. package/dist/renderers/index.js.map +1 -0
  255. package/dist/renderers/types.d.ts +12 -0
  256. package/dist/renderers/types.d.ts.map +1 -0
  257. package/dist/renderers/types.js +2 -0
  258. package/dist/renderers/types.js.map +1 -0
  259. package/dist/team-templates/policies.d.ts +4 -0
  260. package/dist/team-templates/policies.d.ts.map +1 -0
  261. package/dist/team-templates/policies.js +69 -0
  262. package/dist/team-templates/policies.js.map +1 -0
  263. package/dist/team-templates/presets.d.ts +6 -0
  264. package/dist/team-templates/presets.d.ts.map +1 -0
  265. package/dist/team-templates/presets.js +14 -0
  266. package/dist/team-templates/presets.js.map +1 -0
  267. package/dist/team-templates/roles.d.ts +22 -0
  268. package/dist/team-templates/roles.d.ts.map +1 -0
  269. package/dist/team-templates/roles.js +117 -0
  270. package/dist/team-templates/roles.js.map +1 -0
  271. package/dist/types/manifest.d.ts +11 -0
  272. package/dist/types/manifest.d.ts.map +1 -0
  273. package/dist/types/manifest.js +16 -0
  274. package/dist/types/manifest.js.map +1 -0
  275. package/dist/utils/chalk-helpers.d.ts +18 -0
  276. package/dist/utils/chalk-helpers.d.ts.map +1 -0
  277. package/dist/utils/chalk-helpers.js +51 -0
  278. package/dist/utils/chalk-helpers.js.map +1 -0
  279. package/dist/utils/prompts.d.ts +28 -0
  280. package/dist/utils/prompts.d.ts.map +1 -0
  281. package/dist/utils/prompts.js +51 -0
  282. package/dist/utils/prompts.js.map +1 -0
  283. package/dist/validator/checks/handoff-graph.d.ts +5 -0
  284. package/dist/validator/checks/handoff-graph.d.ts.map +1 -0
  285. package/dist/validator/checks/handoff-graph.js +65 -0
  286. package/dist/validator/checks/handoff-graph.js.map +1 -0
  287. package/dist/validator/checks/instruction-blocks.d.ts +5 -0
  288. package/dist/validator/checks/instruction-blocks.d.ts.map +1 -0
  289. package/dist/validator/checks/instruction-blocks.js +45 -0
  290. package/dist/validator/checks/instruction-blocks.js.map +1 -0
  291. package/dist/validator/checks/role-warnings.d.ts +5 -0
  292. package/dist/validator/checks/role-warnings.d.ts.map +1 -0
  293. package/dist/validator/checks/role-warnings.js +50 -0
  294. package/dist/validator/checks/role-warnings.js.map +1 -0
  295. package/dist/validator/checks/security-baseline.d.ts +3 -0
  296. package/dist/validator/checks/security-baseline.d.ts.map +1 -0
  297. package/dist/validator/checks/security-baseline.js +73 -0
  298. package/dist/validator/checks/security-baseline.js.map +1 -0
  299. package/dist/validator/checks/tool-conflicts.d.ts +5 -0
  300. package/dist/validator/checks/tool-conflicts.d.ts.map +1 -0
  301. package/dist/validator/checks/tool-conflicts.js +33 -0
  302. package/dist/validator/checks/tool-conflicts.js.map +1 -0
  303. package/dist/validator/index.d.ts +5 -0
  304. package/dist/validator/index.d.ts.map +1 -0
  305. package/dist/validator/index.js +28 -0
  306. package/dist/validator/index.js.map +1 -0
  307. package/dist/validator/reporter.d.ts +4 -0
  308. package/dist/validator/reporter.d.ts.map +1 -0
  309. package/dist/validator/reporter.js +76 -0
  310. package/dist/validator/reporter.js.map +1 -0
  311. package/dist/validator/types.d.ts +10 -0
  312. package/dist/validator/types.d.ts.map +1 -0
  313. package/dist/validator/types.js +2 -0
  314. package/dist/validator/types.js.map +1 -0
  315. package/dist/wizard/index.d.ts +7 -0
  316. package/dist/wizard/index.d.ts.map +1 -0
  317. package/dist/wizard/index.js +57 -0
  318. package/dist/wizard/index.js.map +1 -0
  319. package/dist/wizard/steps/agent-customization.d.ts +5 -0
  320. package/dist/wizard/steps/agent-customization.d.ts.map +1 -0
  321. package/dist/wizard/steps/agent-customization.js +68 -0
  322. package/dist/wizard/steps/agent-customization.js.map +1 -0
  323. package/dist/wizard/steps/confirm-generate.d.ts +3 -0
  324. package/dist/wizard/steps/confirm-generate.d.ts.map +1 -0
  325. package/dist/wizard/steps/confirm-generate.js +19 -0
  326. package/dist/wizard/steps/confirm-generate.js.map +1 -0
  327. package/dist/wizard/steps/custom-team.d.ts +3 -0
  328. package/dist/wizard/steps/custom-team.d.ts.map +1 -0
  329. package/dist/wizard/steps/custom-team.js +17 -0
  330. package/dist/wizard/steps/custom-team.js.map +1 -0
  331. package/dist/wizard/steps/project-context.d.ts +6 -0
  332. package/dist/wizard/steps/project-context.d.ts.map +1 -0
  333. package/dist/wizard/steps/project-context.js +24 -0
  334. package/dist/wizard/steps/project-context.js.map +1 -0
  335. package/dist/wizard/steps/team-selection.d.ts +5 -0
  336. package/dist/wizard/steps/team-selection.d.ts.map +1 -0
  337. package/dist/wizard/steps/team-selection.js +44 -0
  338. package/dist/wizard/steps/team-selection.js.map +1 -0
  339. package/package.json +56 -0
  340. package/schema/teamcast.schema.json +580 -0
  341. package/templates/presets/feature-team.yaml +77 -0
  342. package/templates/presets/research-and-build.yaml +69 -0
  343. package/templates/presets/secure-dev.yaml +93 -0
  344. package/templates/presets/solo-dev.yaml +32 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mykola Vozniuk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,654 @@
1
+ # TeamCast
2
+
3
+ CLI to design, generate, and validate Claude Code subagents from a single manifest.
4
+
5
+ Define your subagents in one `teamcast.yaml` file. TeamCast generates Claude Code config files, validates the configuration, and keeps generated output in sync with the manifest.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g teamcast
11
+ ```
12
+
13
+ Or run without installing:
14
+
15
+ ```bash
16
+ npx teamcast <command>
17
+ ```
18
+
19
+ ## Quick Start
20
+
21
+ ```bash
22
+ # Initialize a new team with the interactive wizard
23
+ teamcast init
24
+
25
+ # Or skip the wizard and use a preset directly
26
+ teamcast init --preset feature-team
27
+
28
+ # Generate Claude Code config files from teamcast.yaml
29
+ teamcast generate
30
+
31
+ # Validate the manifest
32
+ teamcast validate
33
+ ```
34
+
35
+ After `generate`, your project will have:
36
+ - `.claude/agents/<name>.md` - one file per agent
37
+ - `.claude/skills/<skill>/SKILL.md` - one stub file per unique skill
38
+ - `.claude/settings.json` - permissions and sandbox config
39
+ - `.claude/settings.local.json` - local Claude settings when enabled
40
+ - `CLAUDE.md` - team documentation for Claude Code
41
+ - `AGENTS.md` - universal AI agent documentation
42
+
43
+ ## Native Claude Code Model
44
+
45
+ TeamCast now uses a canonical agent shape that separates:
46
+
47
+ - `agents.<name>.claude` - native Claude Code subagent runtime fields
48
+ - `agents.<name>.forge` - TeamCast-only metadata such as delegation graph
49
+
50
+ Legacy flat manifests are still accepted and normalized automatically, but new writes use the canonical shape.
51
+
52
+ ## Command Summary
53
+
54
+ | Command | Description |
55
+ |---------|-------------|
56
+ | `init` | Initialize `teamcast.yaml` and generate files |
57
+ | `generate` | Generate Claude Code files from `teamcast.yaml` |
58
+ | `validate` | Validate the team configuration |
59
+ | `validate --format json` | Machine-readable validation output for CI pipelines |
60
+ | `explain` | Print a human-readable view of the team architecture |
61
+ | `diff` | Show what generated files would change |
62
+ | `add agent <name>` | Add a new agent |
63
+ | `edit agent <name>` | Edit an existing agent |
64
+ | `remove agent <name>` | Remove an agent and clean up handoffs |
65
+ | `create skill <name>` | Create a new skill and assign it to one agent |
66
+ | `assign skill <name>` | Assign an existing skill to more agents |
67
+ | `import` | Import an existing `.claude/` setup into `teamcast.yaml` |
68
+ | `reset` | Delete generated files, keep `teamcast.yaml` |
69
+ | `clean` | Delete generated files and `teamcast.yaml` |
70
+
71
+ Useful options:
72
+
73
+ ```bash
74
+ teamcast init --preset <name> # skip wizard and use a preset
75
+ teamcast init --from <path> # initialize from an existing YAML file
76
+ teamcast init --yes # non-interactive init, uses defaults
77
+ teamcast generate --dry-run # preview generated files without writing
78
+ teamcast validate --strict # fail on warnings as well as errors
79
+ teamcast validate --format json # JSON output, useful in CI scripts
80
+ teamcast import --yes # skip import confirmation
81
+ teamcast reset --yes # skip reset confirmation
82
+ teamcast clean --yes # skip clean confirmation
83
+ ```
84
+
85
+ ## Presets
86
+
87
+ | Preset | Description |
88
+ |--------|-------------|
89
+ | `feature-team` | orchestrator -> planner -> developer -> reviewer |
90
+ | `solo-dev` | single developer agent with broad tool access |
91
+ | `research-and-build` | orchestrator -> researcher -> planner -> developer |
92
+ | `secure-dev` | orchestrator -> planner -> developer -> security-auditor -> reviewer |
93
+
94
+ The built-in preset files live in `templates/presets/` and are valid TeamCast YAML. Use them as a reference when creating custom presets, or copy one as a starting point:
95
+
96
+ ```bash
97
+ cp node_modules/teamcast/templates/presets/feature-team.yaml ./my-team.yaml
98
+ teamcast init --from ./my-team.yaml
99
+ ```
100
+
101
+ ## Flows
102
+
103
+ ### `init`
104
+
105
+ `teamcast init` creates a fresh `teamcast.yaml`, validates it, and generates all output files.
106
+
107
+ Interactive wizard flow:
108
+
109
+ 1. `Project name:`
110
+ - default is auto-detected from the current directory
111
+ - must match lowercase letters, numbers, and hyphens
112
+ 2. `How do you want to set up your agent team?`
113
+ - `Use a preset`
114
+ - `Custom team`
115
+ - `Single agent`
116
+ 3. If you choose `Use a preset`:
117
+ - `Select a preset:`
118
+ 4. If you choose `Custom team`:
119
+ - `Select roles for your team:`
120
+ - available roles: `orchestrator`, `planner`, `researcher`, `developer`, `tester`, `reviewer`, `security-auditor`
121
+ - if `orchestrator` is selected with other roles, handoffs are auto-wired to the other selected agents
122
+ 5. `Customize agents before generating?`
123
+ - if yes, each agent gets:
124
+ - `Model for <agent>:`
125
+ 6. Preview:
126
+ - shows the files that will be created
127
+ - asks `Generate these files?`
128
+
129
+ Important limitations of the wizard:
130
+
131
+ - It does not let you rename individual agents.
132
+ - It does not ask for custom `claude.instructions`.
133
+ - It does not ask for custom `claude.skills`, `forge.handoffs`, `claude.max_turns`, or exact tool lists.
134
+ - Those values come from built-in presets or role templates.
135
+ - If you want deeper customization, edit `teamcast.yaml` after init and run `teamcast generate`.
136
+
137
+ Non-interactive `init` flows:
138
+
139
+ - `teamcast init --preset <name>`
140
+ - skips the wizard
141
+ - loads the preset
142
+ - uses the detected directory name as `project.name`
143
+ - writes `teamcast.yaml`
144
+ - generates files immediately
145
+ - `teamcast init --from ./my-team.yaml`
146
+ - loads a custom YAML file
147
+ - validates schema and manifest rules
148
+ - writes `teamcast.yaml`
149
+ - generates files immediately
150
+ - `teamcast init --yes`
151
+ - runs wizard defaults without prompts
152
+ - uses detected project name
153
+ - uses the `feature-team` preset
154
+ - skips final confirmation
155
+
156
+ ### `add agent <name>`
157
+
158
+ `teamcast add agent <name>` adds a new agent to an existing manifest, writes `teamcast.yaml`, then regenerates all files.
159
+
160
+ Two modes are supported:
161
+
162
+ - `teamcast add agent <name>`
163
+ - creates a custom agent from a short interactive flow
164
+ - `teamcast add agent <name> --template <role>`
165
+ - creates an agent from a built-in role template
166
+
167
+ Interactive questions for `add agent <name>`:
168
+
169
+ 1. `Agent description (when should Claude delegate to this agent?):`
170
+ 2. `Model:`
171
+ - `sonnet`
172
+ - `opus`
173
+ - `haiku`
174
+ 3. `Can this agent write/edit files?`
175
+ 4. `Can this agent run shell commands?`
176
+ 5. `Can this agent access the internet?`
177
+ 6. `Can this agent delegate to other agents?`
178
+
179
+ How those answers map into the manifest:
180
+
181
+ - Every custom agent gets `Read`, `Grep`, and `Glob`.
182
+ - If write access is enabled, TeamCast adds `Write`, `Edit`, `MultiEdit`.
183
+ - If bash access is enabled, TeamCast adds `Bash`.
184
+ - If internet access is enabled, TeamCast adds `WebFetch`, `WebSearch`.
185
+ - If delegation is enabled, TeamCast adds `Agent`.
186
+ - For disabled write/bash/web capabilities, the matching tools are written into `claude.disallowed_tools`.
187
+
188
+ What `add agent` does not ask for:
189
+
190
+ - `claude.instructions`
191
+ - `claude.skills`
192
+ - `forge.handoffs`
193
+ - `claude.max_turns`
194
+ - `claude.permission_mode`
195
+ - `claude.mcp_servers`
196
+ - a fully custom `claude.tools` / `claude.disallowed_tools` list
197
+
198
+ That means a custom agent added this way starts with a minimal prompt. To make it useful, edit `teamcast.yaml` and add fields such as `claude.instructions`, `claude.skills`, and `forge.handoffs`.
199
+
200
+ ### `edit agent <name>`
201
+
202
+ `teamcast edit agent <name>` updates an existing agent, writes `teamcast.yaml`, then regenerates all files.
203
+
204
+ Two modes are supported:
205
+
206
+ - Non-interactive:
207
+
208
+ ```bash
209
+ teamcast edit agent reviewer --description "Reviews backend changes"
210
+ teamcast edit agent reviewer --model opus
211
+ teamcast edit agent reviewer --max-turns 40
212
+ ```
213
+
214
+ - Interactive:
215
+
216
+ ```bash
217
+ teamcast edit agent reviewer
218
+ ```
219
+
220
+ Interactive questions:
221
+
222
+ 1. `Description:`
223
+ 2. `Model:`
224
+ - `sonnet`
225
+ - `opus`
226
+ - `haiku`
227
+ - `inherit`
228
+ 3. `Max turns (leave empty to keep current):`
229
+ 4. `Customize tools?`
230
+ 5. If yes:
231
+ - `Select allowed tools:`
232
+ - `claude.disallowed_tools` is computed automatically as the inverse of the selected allow-list
233
+
234
+ Important limitations:
235
+
236
+ - `edit agent` does not edit `claude.instructions`, `claude.skills`, `forge.handoffs`, `claude.permission_mode`, or `claude.mcp_servers`.
237
+ - If you pass any direct flags such as `--description`, `--model`, or `--max-turns`, the command updates only those fields and skips the interactive tool editor.
238
+
239
+ ### `remove agent <name>`
240
+
241
+ `teamcast remove agent <name>` removes an agent from the manifest, removes that agent from any `forge.handoffs`, deletes the orphaned `.claude/agents/<name>.md` file, and regenerates the rest.
242
+
243
+ Interactive flow:
244
+
245
+ 1. Shows the current agent name
246
+ 2. Asks:
247
+ - `Remove agent "<name>"? This will also remove it from any handoffs.`
248
+
249
+ Use `--yes` to skip confirmation.
250
+
251
+ ### `create skill <name>`
252
+
253
+ `teamcast create skill <name>` registers a new skill name on one agent, writes `teamcast.yaml`, and generates `.claude/skills/<name>/SKILL.md`.
254
+
255
+ Rules and prompts:
256
+
257
+ - skill names must start with a letter and use lowercase letters, numbers, and hyphens only
258
+ - if the skill already exists anywhere in the manifest, the command fails
259
+ - existing skill names are shown for context
260
+ - then TeamCast asks:
261
+ - `Which agent should own this skill?`
262
+
263
+ The generated `SKILL.md` file is a stub intended for manual editing. TeamCast will not overwrite an existing skill stub on later `generate` runs.
264
+
265
+ ### `assign skill <name>`
266
+
267
+ `teamcast assign skill <name>` adds an existing skill to one or more additional agents, writes `teamcast.yaml`, and regenerates files.
268
+
269
+ Interactive flow:
270
+
271
+ 1. Validates that the skill already exists somewhere in the manifest
272
+ 2. Prints agents that already have the skill
273
+ 3. Asks:
274
+ - `Assign to which agents?`
275
+
276
+ The prompt is a multi-select list and requires at least one target agent.
277
+
278
+ ### `generate`
279
+
280
+ `teamcast generate` reads `teamcast.yaml`, validates it for blocking issues, and writes generated files.
281
+
282
+ ```bash
283
+ teamcast generate
284
+ teamcast generate --dry-run
285
+ ```
286
+
287
+ Behavior:
288
+
289
+ - `generate` overwrites generated agent/docs/settings files
290
+ - skill stub files under `.claude/skills/` are created only if missing
291
+ - `--dry-run` shows what would be generated without writing anything
292
+
293
+ ### `diff`
294
+
295
+ `teamcast diff` compares the current manifest to generated files already on disk.
296
+
297
+ It reports:
298
+
299
+ - new files
300
+ - modified files with added or removed line counts when available
301
+ - unchanged files
302
+
303
+ Use it to preview drift before running `teamcast generate`.
304
+
305
+ ### `validate`
306
+
307
+ `teamcast validate` runs the validator against `teamcast.yaml`.
308
+
309
+ ```bash
310
+ teamcast validate
311
+ teamcast validate --strict
312
+ teamcast validate --format json
313
+ ```
314
+
315
+ Behavior:
316
+
317
+ - exits non-zero on validation errors
318
+ - with `--strict`, also exits non-zero on warnings
319
+ - with `--format json`, prints a JSON result object instead of human-readable output; useful for CI scripts that need to parse results programmatically
320
+
321
+ Validation categories include:
322
+
323
+ - handoff graph correctness
324
+ - tool conflicts
325
+ - role-based warnings
326
+ - security baseline checks
327
+
328
+ #### Policy Assertions
329
+
330
+ Assertions are declarative rules about your team that `validate` enforces. Define them under `policies.assertions`:
331
+
332
+ ```yaml
333
+ policies:
334
+ assertions:
335
+ - rule: require_sandbox_with_execute
336
+ - rule: no_unrestricted_execute
337
+ - rule: max_agents
338
+ count: 6
339
+ - rule: deny_skill_for_role
340
+ agent: reviewer
341
+ skill: write_files
342
+ ```
343
+
344
+ Available rules:
345
+
346
+ | Rule | Parameters | Description |
347
+ |------|-----------|-------------|
348
+ | `require_sandbox_with_execute` | — | Any agent with `execute` skill must have sandbox enabled |
349
+ | `no_unrestricted_execute` | — | `execute` skill must have a permission scope (e.g. `Bash(npm *)`) |
350
+ | `require_skill` | `skill` | All agents must have the specified skill |
351
+ | `deny_skill_for_role` | `agent`, `skill` | A named agent must not have the specified skill |
352
+ | `forbid_skill_combination` | `skills[]` | No single agent may hold all listed skills at once |
353
+ | `max_agents` | `count` | Team must not exceed the given number of agents |
354
+ | `require_instruction_block` | `kind` | All agents must include an instruction block of the given kind |
355
+ | `require_delegation_chain` | — | At least one agent must have the `delegate` skill |
356
+
357
+ The `secure-dev` preset includes several security assertions by default.
358
+
359
+ ### `explain`
360
+
361
+ `teamcast explain` prints a human-readable summary of the team:
362
+
363
+ - project metadata
364
+ - agents
365
+ - models
366
+ - tools
367
+ - handoffs
368
+ - skills
369
+
370
+ Use this after `init`, `import`, or larger manifest edits to sanity-check the architecture.
371
+
372
+ ### `import`
373
+
374
+ `teamcast import` converts an existing `.claude/` setup into `teamcast.yaml`.
375
+
376
+ Preconditions:
377
+
378
+ - `.claude/` must exist
379
+ - `teamcast.yaml` must not already exist
380
+
381
+ Flow:
382
+
383
+ 1. Scans `.claude/agents/*.md`
384
+ 2. Scans `.claude/settings.json`
385
+ 3. Builds a manifest
386
+ 4. Prints import warnings, if any
387
+ 5. Prints discovered agents and policy categories
388
+ 6. Validates the imported manifest
389
+ 7. Asks:
390
+ - `Write teamcast.yaml with imported configuration?`
391
+
392
+ Use `--yes` to skip confirmation.
393
+
394
+ Important note:
395
+
396
+ - `import` writes `teamcast.yaml`
397
+ - it does not run `generate`
398
+ - imported instructions are extracted from the agent markdown body text
399
+ - legacy TeamCast markdown is still supported, and old generated `Skills`, `Delegation`, and `Constraints` sections are stripped during import
400
+
401
+ ### `reset`
402
+
403
+ `teamcast reset` deletes generated output but keeps `teamcast.yaml`.
404
+
405
+ It targets:
406
+
407
+ - `.claude/agents`
408
+ - `.claude/skills`
409
+ - `.claude/settings.json`
410
+ - `.claude/settings.local.json`
411
+ - `CLAUDE.md`
412
+ - `AGENTS.md`
413
+
414
+ Flow:
415
+
416
+ 1. Shows the files that will be deleted
417
+ 2. Asks:
418
+ - `Delete these files?`
419
+
420
+ Use `--yes` to skip confirmation.
421
+
422
+ ### `clean`
423
+
424
+ `teamcast clean` is the destructive version of `reset`.
425
+
426
+ It deletes:
427
+
428
+ - everything removed by `reset`
429
+ - `teamcast.yaml`
430
+
431
+ Flow:
432
+
433
+ 1. Shows the files that will be deleted
434
+ 2. Asks:
435
+ - `Delete everything including teamcast.yaml?`
436
+
437
+ Use `--yes` to skip confirmation.
438
+
439
+ ## Prompt Generation
440
+
441
+ Everything is defined in `teamcast.yaml` at the root of your project.
442
+
443
+ For each agent, TeamCast renders `.claude/agents/<name>.md` from `agents.<name>.claude`.
444
+
445
+ Native Claude Code fields are rendered into frontmatter:
446
+
447
+ - `description`
448
+ - `model`
449
+ - `tools`
450
+ - `disallowedTools`
451
+ - `permissionMode`
452
+ - `maxTurns`
453
+ - `skills`
454
+ - `mcpServers`
455
+ - `background`
456
+
457
+ `claude.instructions` becomes the markdown body.
458
+
459
+ `forge` metadata is not rendered into the agent markdown. It is used by TeamCast for validation, workflow docs, and delegation modeling.
460
+
461
+ This is important for custom agents:
462
+
463
+ - role templates and presets come with built-in `claude.instructions`
464
+ - `add agent <name>` without `--template` does not ask for `claude.instructions`
465
+ - a custom agent created from `add agent` therefore starts with a very minimal prompt until you edit `teamcast.yaml`
466
+
467
+ ## Configuration
468
+
469
+ Everything is defined in `teamcast.yaml` at the root of your project.
470
+
471
+ ### Minimal Example
472
+
473
+ ```yaml
474
+ version: "1"
475
+ project:
476
+ name: my-project
477
+
478
+ agents:
479
+ developer:
480
+ claude:
481
+ description: Implements features and fixes bugs
482
+ model: sonnet
483
+ tools: [Read, Write, Edit, Bash, Grep, Glob]
484
+ disallowed_tools: [WebFetch, WebSearch]
485
+ instructions: |
486
+ Implement the requested changes.
487
+ Write tests when behavior changes.
488
+ ```
489
+
490
+ ### Full Example
491
+
492
+ ```yaml
493
+ version: "1"
494
+ project:
495
+ name: my-project
496
+ description: TypeScript/Node.js web app
497
+
498
+ agents:
499
+ orchestrator:
500
+ claude:
501
+ description: Coordinates the team and delegates tasks
502
+ model: opus
503
+ tools: [Read, Grep, Glob, Agent]
504
+ disallowed_tools: [Edit, Write, Bash]
505
+ max_turns: 30
506
+ instructions: |
507
+ You are the coordinator for the project.
508
+ Read the request, break it into subtasks, and delegate to the right agents.
509
+ Never modify files yourself.
510
+ forge:
511
+ handoffs: [planner, developer, reviewer]
512
+
513
+ planner:
514
+ claude:
515
+ description: Analyzes codebase and produces implementation plans
516
+ model: sonnet
517
+ tools: [Read, Grep, Glob, WebFetch, WebSearch]
518
+ disallowed_tools: [Edit, Write, Bash]
519
+ instructions: |
520
+ Read the codebase and produce a step-by-step implementation plan.
521
+ Never modify files.
522
+
523
+ developer:
524
+ claude:
525
+ description: Implements features based on the plan
526
+ model: sonnet
527
+ tools: [Read, Write, Edit, Bash, Grep, Glob]
528
+ disallowed_tools: [WebFetch, WebSearch]
529
+ skills: [test-first, clean-code]
530
+ instructions: |
531
+ Implement the plan, write tests, and verify the result.
532
+
533
+ reviewer:
534
+ claude:
535
+ description: Reviews code for quality and security issues
536
+ model: sonnet
537
+ tools: [Read, Grep, Glob, Bash]
538
+ disallowed_tools: [Edit, Write]
539
+ instructions: |
540
+ Review the implementation for correctness, style, and security.
541
+ Do not modify files yourself.
542
+
543
+ policies:
544
+ permissions:
545
+ allow:
546
+ - "Bash(npm run *)"
547
+ - "Bash(npm test)"
548
+ - "Bash(git status)"
549
+ - "Bash(git diff *)"
550
+ - "Bash(git commit *)"
551
+ ask:
552
+ - "Bash(git push *)"
553
+ deny:
554
+ - "Bash(rm -rf *)"
555
+ - "Bash(git push --force *)"
556
+ - "Write(.env*)"
557
+ sandbox:
558
+ enabled: true
559
+ auto_allow_bash: true
560
+
561
+ settings:
562
+ default_model: sonnet
563
+ generate_docs: true
564
+ generate_local_settings: true
565
+ ```
566
+
567
+ ### Agent Fields
568
+
569
+ | Field | Type | Description |
570
+ |-------|------|-------------|
571
+ | `claude.description` | string | Required. Shown in the Claude Code subagent picker |
572
+ | `claude.model` | `opus \| sonnet \| haiku \| inherit` | Model alias to use |
573
+ | `claude.tools` | string[] | Native Claude Code tool allow-list |
574
+ | `claude.disallowed_tools` | string[] | Native Claude Code tool deny-list |
575
+ | `claude.skills` | string[] | Skill names. Each unique skill generates `.claude/skills/<skill>/SKILL.md` |
576
+ | `claude.max_turns` | number | Maximum agentic turns |
577
+ | `claude.mcp_servers` | object[] | MCP server definitions |
578
+ | `claude.permission_mode` | `default \| acceptEdits \| bypassPermissions \| plan \| dontAsk` | Claude Code permission mode |
579
+ | `claude.instructions` | string | Freeform instructions used as the markdown body |
580
+ | `forge.handoffs` | string[] | Other agents this agent can delegate to. Requires `Agent` in `claude.tools` |
581
+
582
+ Available Claude Code tools:
583
+
584
+ `Read`, `Write`, `Edit`, `MultiEdit`, `Grep`, `Glob`, `Bash`, `WebFetch`, `WebSearch`, `Agent`
585
+
586
+ ### Abstract Skills
587
+
588
+ Instead of listing raw tool names, you can specify platform-agnostic skills in `claude.tools`. TeamCast expands each skill to the appropriate Claude Code tools automatically.
589
+
590
+ | Skill | Expands to |
591
+ |-------|-----------|
592
+ | `read_files` | `Read`, `Grep`, `Glob` |
593
+ | `write_files` | `Write`, `Edit`, `MultiEdit` |
594
+ | `execute` | `Bash` |
595
+ | `search` | `Glob`, `Grep` |
596
+ | `web` | `WebFetch`, `WebSearch` |
597
+ | `delegate` | `Agent` |
598
+ | `interact` | `AskUserQuestion`, `TodoWrite`, `TodoRead` |
599
+ | `notebook` | `NotebookEdit` |
600
+
601
+ Example:
602
+
603
+ ```yaml
604
+ developer:
605
+ claude:
606
+ tools: [read_files, write_files, execute]
607
+ ```
608
+
609
+ Raw tool names and skills can be mixed in the same `tools` array.
610
+
611
+ ### Policy Fields
612
+
613
+ ```yaml
614
+ policies:
615
+ permissions:
616
+ allow: ["Bash(npm run *)", "WebFetch(api.example.com:*)"]
617
+ ask: ["Bash(git push *)"]
618
+ deny: ["Bash(rm -rf *)", "Write(.env*)"]
619
+ default_mode: acceptEdits
620
+ sandbox:
621
+ enabled: true
622
+ auto_allow_bash: true
623
+ ```
624
+
625
+ ## Custom Templates
626
+
627
+ Use `--from` to initialize from any valid TeamCast YAML file:
628
+
629
+ ```bash
630
+ teamcast init --from ./my-team-template.yaml
631
+ ```
632
+
633
+ This validates the file against the schema, writes `teamcast.yaml`, and generates all config files.
634
+
635
+ ## Preset Metadata
636
+
637
+ When sharing presets, you can add optional metadata:
638
+
639
+ ```yaml
640
+ preset_meta:
641
+ author: your-name
642
+ tags: [typescript, fullstack, security]
643
+ min_version: "0.5.0"
644
+ ```
645
+
646
+ ## Validation
647
+
648
+ `teamcast validate` checks:
649
+
650
+ - handoff graph correctness
651
+ - tool allow or deny conflicts
652
+ - role-based warnings
653
+ - security baseline configuration
654
+ - policy assertions (when defined in `policies.assertions`)
@@ -0,0 +1,8 @@
1
+ import type { CoreTeam } from '../core/types.js';
2
+ import type { RenderedFile } from '../renderers/types.js';
3
+ export interface BuildGeneratedOutputsOptions {
4
+ cwd: string;
5
+ dryRun?: boolean;
6
+ }
7
+ export declare function buildGeneratedOutputs(team: CoreTeam, options: BuildGeneratedOutputsOptions): RenderedFile[];
8
+ //# sourceMappingURL=build-generated-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-generated-files.d.ts","sourceRoot":"","sources":["../../src/application/build-generated-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAI1E,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAA4B,GAAG,YAAY,EAAE,CAa3G"}
@@ -0,0 +1,16 @@
1
+ import { ClaudeRenderer } from '../renderers/claude/index.js';
2
+ import { isUserEditableGeneratedFile } from '../generator/file-policies.js';
3
+ import { writeFiles } from '../generator/writer.js';
4
+ export function buildGeneratedOutputs(team, options) {
5
+ const spec = { team };
6
+ const renderer = new ClaudeRenderer();
7
+ const files = renderer.render(spec);
8
+ if (!options.dryRun) {
9
+ const editable = files.filter((file) => isUserEditableGeneratedFile(file.path));
10
+ const generated = files.filter((file) => !isUserEditableGeneratedFile(file.path));
11
+ writeFiles(generated, options.cwd);
12
+ writeFiles(editable, options.cwd, { skipExisting: true });
13
+ }
14
+ return files;
15
+ }
16
+ //# sourceMappingURL=build-generated-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-generated-files.js","sourceRoot":"","sources":["../../src/application/build-generated-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOpD,MAAM,UAAU,qBAAqB,CAAC,IAAc,EAAE,OAAqC;IACzF,MAAM,IAAI,GAAmB,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}