teamcast 0.8.0 → 0.9.1

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 (116) hide show
  1. package/dist/application/team.d.ts.map +1 -1
  2. package/dist/application/team.js +56 -29
  3. package/dist/application/team.js.map +1 -1
  4. package/dist/cli/import.d.ts.map +1 -1
  5. package/dist/cli/import.js +12 -11
  6. package/dist/cli/import.js.map +1 -1
  7. package/dist/cli/init.d.ts.map +1 -1
  8. package/dist/cli/init.js +5 -0
  9. package/dist/cli/init.js.map +1 -1
  10. package/dist/cli/manage.d.ts.map +1 -1
  11. package/dist/cli/manage.js +40 -86
  12. package/dist/cli/manage.js.map +1 -1
  13. package/dist/components/policy-fragments.d.ts +1 -1
  14. package/dist/components/policy-fragments.d.ts.map +1 -1
  15. package/dist/components/policy-fragments.js +12 -49
  16. package/dist/components/policy-fragments.js.map +1 -1
  17. package/dist/core/index.d.ts +0 -1
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +0 -1
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/types.d.ts +2 -6
  22. package/dist/core/types.d.ts.map +1 -1
  23. package/dist/detector/index.d.ts +0 -2
  24. package/dist/detector/index.d.ts.map +1 -1
  25. package/dist/detector/index.js +4 -10
  26. package/dist/detector/index.js.map +1 -1
  27. package/dist/explainer/index.js +8 -8
  28. package/dist/explainer/index.js.map +1 -1
  29. package/dist/generator/index.d.ts.map +1 -1
  30. package/dist/generator/index.js +2 -0
  31. package/dist/generator/index.js.map +1 -1
  32. package/dist/importer/index.d.ts +2 -2
  33. package/dist/importer/index.d.ts.map +1 -1
  34. package/dist/importer/index.js +82 -28
  35. package/dist/importer/index.js.map +1 -1
  36. package/dist/manifest/normalize.d.ts.map +1 -1
  37. package/dist/manifest/normalize.js +13 -25
  38. package/dist/manifest/normalize.js.map +1 -1
  39. package/dist/manifest/reader.d.ts.map +1 -1
  40. package/dist/manifest/reader.js +4 -2
  41. package/dist/manifest/reader.js.map +1 -1
  42. package/dist/manifest/schema-validator.d.ts.map +1 -1
  43. package/dist/manifest/schema-validator.js +4 -2
  44. package/dist/manifest/schema-validator.js.map +1 -1
  45. package/dist/manifest/types.d.ts +7 -4
  46. package/dist/manifest/types.d.ts.map +1 -1
  47. package/dist/manifest/types.js.map +1 -1
  48. package/dist/plugins/core/models-plugin.d.ts +3 -0
  49. package/dist/plugins/core/models-plugin.d.ts.map +1 -0
  50. package/dist/plugins/core/models-plugin.js +50 -0
  51. package/dist/plugins/core/models-plugin.js.map +1 -0
  52. package/dist/plugins/core/tools-plugin.d.ts +3 -0
  53. package/dist/plugins/core/tools-plugin.d.ts.map +1 -0
  54. package/dist/plugins/core/tools-plugin.js +44 -0
  55. package/dist/plugins/core/tools-plugin.js.map +1 -0
  56. package/dist/plugins/environments/node-env-plugin.d.ts +3 -0
  57. package/dist/plugins/environments/node-env-plugin.d.ts.map +1 -0
  58. package/dist/plugins/environments/node-env-plugin.js +31 -0
  59. package/dist/plugins/environments/node-env-plugin.js.map +1 -0
  60. package/dist/plugins/environments/python-env-plugin.d.ts +3 -0
  61. package/dist/plugins/environments/python-env-plugin.d.ts.map +1 -0
  62. package/dist/plugins/environments/python-env-plugin.js +33 -0
  63. package/dist/plugins/environments/python-env-plugin.js.map +1 -0
  64. package/dist/plugins/index.d.ts +3 -0
  65. package/dist/plugins/index.d.ts.map +1 -0
  66. package/dist/plugins/index.js +13 -0
  67. package/dist/plugins/index.js.map +1 -0
  68. package/dist/plugins/inject.d.ts +3 -0
  69. package/dist/plugins/inject.d.ts.map +1 -0
  70. package/dist/plugins/inject.js +16 -0
  71. package/dist/plugins/inject.js.map +1 -0
  72. package/dist/plugins/merge-policies.d.ts +8 -0
  73. package/dist/plugins/merge-policies.d.ts.map +1 -0
  74. package/dist/plugins/merge-policies.js +56 -0
  75. package/dist/plugins/merge-policies.js.map +1 -0
  76. package/dist/plugins/registry.d.ts +21 -0
  77. package/dist/plugins/registry.d.ts.map +1 -0
  78. package/dist/plugins/registry.js +63 -0
  79. package/dist/plugins/registry.js.map +1 -0
  80. package/dist/plugins/types.d.ts +71 -0
  81. package/dist/plugins/types.d.ts.map +1 -0
  82. package/dist/plugins/types.js +2 -0
  83. package/dist/plugins/types.js.map +1 -0
  84. package/dist/renderers/claude/policy-mapper.d.ts.map +1 -1
  85. package/dist/renderers/claude/policy-mapper.js +3 -22
  86. package/dist/renderers/claude/policy-mapper.js.map +1 -1
  87. package/dist/team-templates/policies.d.ts.map +1 -1
  88. package/dist/team-templates/policies.js +0 -12
  89. package/dist/team-templates/policies.js.map +1 -1
  90. package/dist/team-templates/roles.d.ts +9 -2
  91. package/dist/team-templates/roles.d.ts.map +1 -1
  92. package/dist/team-templates/roles.js +40 -8
  93. package/dist/team-templates/roles.js.map +1 -1
  94. package/dist/tools/types.d.ts +5 -0
  95. package/dist/tools/types.d.ts.map +1 -0
  96. package/dist/tools/types.js +2 -0
  97. package/dist/tools/types.js.map +1 -0
  98. package/dist/validator/checks/security-baseline.d.ts.map +1 -1
  99. package/dist/validator/checks/security-baseline.js +4 -19
  100. package/dist/validator/checks/security-baseline.js.map +1 -1
  101. package/dist/wizard/index.d.ts.map +1 -1
  102. package/dist/wizard/index.js +13 -0
  103. package/dist/wizard/index.js.map +1 -1
  104. package/dist/wizard/steps/agent-customization.d.ts.map +1 -1
  105. package/dist/wizard/steps/agent-customization.js +27 -28
  106. package/dist/wizard/steps/agent-customization.js.map +1 -1
  107. package/package.json +2 -1
  108. package/schema/teamcast.schema.json +10 -2
  109. package/templates/presets/feature-team.yaml +0 -2
  110. package/templates/presets/research-and-build.yaml +0 -2
  111. package/templates/presets/secure-dev.yaml +0 -3
  112. package/templates/presets/solo-dev.yaml +0 -3
  113. package/dist/core/permissions.d.ts +0 -10
  114. package/dist/core/permissions.d.ts.map +0 -1
  115. package/dist/core/permissions.js +0 -67
  116. package/dist/core/permissions.js.map +0 -1
@@ -1,10 +1,6 @@
1
1
  function hasDotEnvDeny(team) {
2
- const abstractDeny = team.policies?.permissions?.deny ?? [];
3
- const rawDeny = team.policies?.permissions?.rawRules?.deny ?? [];
4
- if (abstractDeny.includes('env.write')) {
5
- return true;
6
- }
7
- return rawDeny.some((rule) => {
2
+ const deny = team.policies?.permissions?.rules?.deny ?? [];
3
+ return deny.some((rule) => {
8
4
  const lower = rule.toLowerCase();
9
5
  return lower.includes('.env') || /write\(.*\.env/i.test(lower) || /edit\(.*\.env/i.test(lower);
10
6
  });
@@ -35,18 +31,7 @@ export const checkSecurityBaseline = (team) => {
35
31
  });
36
32
  }
37
33
  }
38
- const abstractAllow = team.policies?.permissions?.allow ?? [];
39
- const allow = team.policies?.permissions?.rawRules?.allow ?? [];
40
- const dangerousAbstractPermissions = ['destructive-shell', 'dynamic-exec', 'env.write'];
41
- for (const permission of abstractAllow) {
42
- if (dangerousAbstractPermissions.includes(permission)) {
43
- results.push({
44
- severity: 'warning',
45
- category: 'Security',
46
- message: `Allow permissions include high-risk capability "${permission}"`,
47
- });
48
- }
49
- }
34
+ const allow = team.policies?.permissions?.rules?.allow ?? [];
50
35
  for (const rule of allow) {
51
36
  if (rule.includes('dangerously-skip-permissions')) {
52
37
  results.push({
@@ -56,7 +41,7 @@ export const checkSecurityBaseline = (team) => {
56
41
  });
57
42
  }
58
43
  }
59
- const dangerousPatterns = ['rm -rf', 'git push --force', 'chmod 777', 'sudo'];
44
+ const dangerousPatterns = ['rm -rf', 'git push --force', 'chmod 777', 'sudo', 'eval(', 'exec('];
60
45
  for (const rule of allow) {
61
46
  for (const pattern of dangerousPatterns) {
62
47
  if (rule.toLowerCase().includes(pattern)) {
@@ -1 +1 @@
1
- {"version":3,"file":"security-baseline.js","sourceRoot":"","sources":["../../../src/validator/checks/security-baseline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security-baseline.js","sourceRoot":"","sources":["../../../src/validator/checks/security-baseline.ts"],"names":[],"mappings":"AAGA,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;IAE3D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAY,CAC5C,IAAc,EACM,EAAE;IACtB,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,6FAA6F;SACvG,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,iEAAiE;SAC3E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,KAAK,mBAAmB,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,UAAU,OAAO,8EAA8E;gBACxG,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IAE7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,wDAAwD,IAAI,sBAAsB;aAC5F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,iCAAiC,IAAI,GAAG;iBAClD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoBlE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmErE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAqBlE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFrE"}
@@ -10,6 +10,7 @@ import { stepAgentCustomization } from './steps/agent-customization.js';
10
10
  import { normalizeManifest, replaceManifestTarget } from '../manifest/normalize.js';
11
11
  import { getTarget, getRegisteredTargetNames } from '../renderers/registry.js';
12
12
  import { evaluateTeam, teamHasBlockingIssues, printManifestValidation } from '../application/validate-team.js';
13
+ import { defaultRegistry } from '../plugins/index.js';
13
14
  import { printSuccess, printError, printHeader, printCommandSuccess, printNextSteps, } from '../utils/chalk-helpers.js';
14
15
  export async function runWizard(options) {
15
16
  const { cwd, skipConfirm = false, nonInteractive = false, targetSelection } = options;
@@ -23,16 +24,28 @@ export async function runWizard(options) {
23
24
  defaultSelection: targetSelection,
24
25
  });
25
26
  let rawManifest = await stepTeamSelection(projectPartial, selection, { nonInteractive });
27
+ const activeTargetNames = getRegisteredTargetNames().filter((targetName) => {
28
+ const rawManifestRecord = rawManifest;
29
+ return Boolean(rawManifestRecord[targetName]);
30
+ });
26
31
  for (const targetName of getRegisteredTargetNames()) {
27
32
  const rawManifestRecord = rawManifest;
28
33
  if (!rawManifestRecord[targetName]) {
29
34
  continue;
30
35
  }
36
+ if (!nonInteractive && activeTargetNames.length > 1) {
37
+ console.log('');
38
+ console.log(chalk.bold(`Customize ${targetName} target`));
39
+ }
31
40
  const targetContext = getTarget(targetName);
32
41
  const normalizedTeam = normalizeManifest(rawManifest, targetContext);
33
42
  const customizedTeam = await stepAgentCustomization(normalizedTeam, targetContext, { nonInteractive });
34
43
  rawManifest = replaceManifestTarget(rawManifest, targetName, customizedTeam);
35
44
  }
45
+ const detectedPlugins = defaultRegistry.getDetectedPlugins(cwd).map(p => p.name);
46
+ if (detectedPlugins.length > 0) {
47
+ rawManifest.plugins = detectedPlugins;
48
+ }
36
49
  const validation = evaluateTeam(rawManifest);
37
50
  if (teamHasBlockingIssues(validation)) {
38
51
  printManifestValidation(validation);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-customization.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/agent-customization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAyEvE,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,QAAQ,CAAC,CAsDnB"}
1
+ {"version":3,"file":"agent-customization.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/agent-customization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AA0EvE,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,QAAQ,CAAC,CAsDnB"}
@@ -1,43 +1,41 @@
1
1
  import chalk from 'chalk';
2
- import { AGENT_SKILLS } from '../../core/skills.js';
3
2
  import { expandSkills } from '../../core/skill-resolver.js';
4
3
  import { promptConfirm, promptList, promptCheckbox, promptInput } from '../../utils/prompts.js';
4
+ import { defaultRegistry } from '../../plugins/index.js';
5
5
  /**
6
6
  * Human-readable labels for each AgentSkill value, shown in the wizard checkbox.
7
7
  * Format: "<label> (<tools>)"
8
8
  */
9
- function formatSkillLabel(skill, tools) {
10
- const labels = {
11
- read_files: 'Read files',
12
- write_files: 'Write files',
13
- execute: 'Execute commands',
14
- search: 'Search',
15
- web: 'Web access',
16
- delegate: 'Delegate',
17
- interact: 'Interact',
18
- notebook: 'Notebook',
19
- };
20
- return `${labels[skill].padEnd(16)} (${tools.join(', ')})`;
9
+ function formatSkillLabel(skillId, description) {
10
+ // Try to use the registry description, otherwise default to capitalized ID
11
+ const skillDef = defaultRegistry.getSkills()[skillId];
12
+ const label = skillDef ? skillDef.description : skillId;
13
+ const shortLabel = label.split(' ')[0] ?? skillId; // Use first word as short name
14
+ return `${shortLabel.padEnd(16)}`;
21
15
  }
22
16
  function getSupportedSkills(targetContext) {
23
- return AGENT_SKILLS.filter((skill) => (targetContext.skillMap[skill]?.length ?? 0) > 0);
17
+ // Return skills from the registry that this target supports (has mapped tools for)
18
+ const allSkills = Object.keys(defaultRegistry.getSkills());
19
+ return allSkills.filter((skill) => (targetContext.skillMap[skill]?.length ?? 0) > 0);
24
20
  }
25
21
  async function promptTargetModel(targetContext, currentModel) {
26
- if (targetContext.name === 'claude') {
22
+ const models = Object.values(defaultRegistry.getModels());
23
+ const targetModels = models.filter((m) => !m.target || m.target === targetContext.name);
24
+ if (targetModels.length > 0) {
25
+ const choices = targetModels.map((m) => ({
26
+ name: `${m.displayName.padEnd(20)} ${chalk.dim(`(${m.features.join(', ')})`)}`,
27
+ value: m.id,
28
+ }));
29
+ choices.push({ name: 'unspecified', value: 'unspecified' });
27
30
  const model = await promptList({
28
- message: ' Model:',
29
- choices: [
30
- { name: 'sonnet (recommended)', value: 'sonnet' },
31
- { name: 'opus (most capable)', value: 'opus' },
32
- { name: 'haiku (fastest)', value: 'haiku' },
33
- { name: 'unspecified', value: 'unspecified' },
34
- ],
35
- default: currentModel ?? 'sonnet',
31
+ message: ` Model [${targetContext.name}]:`,
32
+ choices,
33
+ default: currentModel ?? targetModels[0].id,
36
34
  });
37
35
  return model === 'unspecified' ? undefined : model;
38
36
  }
39
37
  const model = await promptInput({
40
- message: ' Model (leave empty to omit):',
38
+ message: ` Model [${targetContext.name}] (leave empty to omit):`,
41
39
  default: currentModel ?? '',
42
40
  });
43
41
  return model.trim() || undefined;
@@ -47,12 +45,13 @@ async function promptReasoningEffort(targetContext, currentValue) {
47
45
  return undefined;
48
46
  }
49
47
  const reasoning = await promptList({
50
- message: ' Reasoning effort:',
48
+ message: ' Reasoning effort [codex]:',
51
49
  choices: [
52
50
  { name: 'unspecified', value: 'unspecified' },
53
51
  { name: 'low', value: 'low' },
54
52
  { name: 'medium', value: 'medium' },
55
53
  { name: 'high', value: 'high' },
54
+ { name: 'xhigh', value: 'xhigh' },
56
55
  ],
57
56
  default: currentValue ?? 'unspecified',
58
57
  });
@@ -63,7 +62,7 @@ export async function stepAgentCustomization(team, targetContext, options) {
63
62
  return team;
64
63
  }
65
64
  const customize = await promptConfirm({
66
- message: 'Customize agents before generating?',
65
+ message: `Customize ${chalk.cyan(targetContext.name)} agents before generating?`,
67
66
  default: false,
68
67
  });
69
68
  if (!customize)
@@ -73,7 +72,7 @@ export async function stepAgentCustomization(team, targetContext, options) {
73
72
  for (const name of Object.keys(updatedAgents)) {
74
73
  const agent = updatedAgents[name];
75
74
  console.log('');
76
- console.log(chalk.bold(name) + chalk.dim(` - ${agent.description}`));
75
+ console.log(chalk.bold(name) + chalk.dim(` - ${agent.description} `) + chalk.cyan(`[${targetContext.name}]`));
77
76
  const model = await promptTargetModel(targetContext, agent.runtime.model);
78
77
  const reasoningEffort = await promptReasoningEffort(targetContext, agent.runtime.reasoningEffort);
79
78
  // Reverse-map the agent's current tools to pre-select matching skills.
@@ -83,7 +82,7 @@ export async function stepAgentCustomization(team, targetContext, options) {
83
82
  const selectedSkills = await promptCheckbox({
84
83
  message: ` Skills for ${name}:`,
85
84
  choices: supportedSkills.map((skill) => ({
86
- name: formatSkillLabel(skill, targetContext.skillMap[skill]),
85
+ name: formatSkillLabel(skill, defaultRegistry.getSkills()[skill]?.description),
87
86
  value: skill,
88
87
  checked: currentSkills.includes(skill),
89
88
  })),
@@ -1 +1 @@
1
- {"version":3,"file":"agent-customization.js","sourceRoot":"","sources":["../../../src/wizard/steps/agent-customization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-customization.js","sourceRoot":"","sources":["../../../src/wizard/steps/agent-customization.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teamcast",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "description": "YAML-driven CLI to design, validate, and generate multi-target agent teams for Claude Code and Codex",
5
5
  "type": "module",
6
6
  "bin": {
@@ -32,6 +32,7 @@
32
32
  "multi-target",
33
33
  "openai",
34
34
  "team",
35
+ "custom-plugins",
35
36
  "yaml"
36
37
  ],
37
38
  "author": "Nickolas Voznyuk",
@@ -29,6 +29,12 @@
29
29
  }
30
30
  }
31
31
  },
32
+ "plugins": {
33
+ "type": "array",
34
+ "items": {
35
+ "type": "string"
36
+ }
37
+ },
32
38
  "claude": {
33
39
  "$ref": "#/definitions/TargetConfig"
34
40
  },
@@ -212,7 +218,7 @@
212
218
  "model": { "type": "string", "minLength": 1 },
213
219
  "reasoning_effort": {
214
220
  "type": "string",
215
- "enum": ["low", "medium", "high"]
221
+ "enum": ["low", "medium", "high", "xhigh"]
216
222
  },
217
223
  "capability_traits": {
218
224
  "type": "array",
@@ -297,7 +303,9 @@
297
303
  }
298
304
  },
299
305
  "additionalProperties": false
300
- }
306
+ },
307
+ "policies": { "$ref": "#/definitions/PoliciesConfig" },
308
+ "settings": { "$ref": "#/definitions/GenerationSettings" }
301
309
  }
302
310
  },
303
311
  "PermissionsConfig": {
@@ -12,8 +12,6 @@ project:
12
12
  coding, and review.
13
13
  policies:
14
14
  fragments:
15
- - allow-npm-run
16
- - allow-npm-test
17
15
  - allow-git-read
18
16
  - allow-git-write
19
17
  - ask-git-push
@@ -10,8 +10,6 @@ project:
10
10
  description: Research-first team. Researcher has full internet access; developer does not.
11
11
  policies:
12
12
  fragments:
13
- - allow-npm-run
14
- - allow-npm-test
15
13
  - allow-git-read
16
14
  - allow-git-write
17
15
  - ask-git-push
@@ -12,9 +12,6 @@ project:
12
12
  access controls.
13
13
  policies:
14
14
  fragments:
15
- - allow-npm-run
16
- - allow-npm-test
17
- - allow-npm-audit
18
15
  - allow-git-read
19
16
  - allow-git-write
20
17
  - ask-git-push
@@ -10,11 +10,8 @@ project:
10
10
  description: Single enhanced developer agent with safe defaults for individual developers.
11
11
  policies:
12
12
  fragments:
13
- - allow-npm-run
14
- - allow-npm-test
15
13
  - allow-git-read
16
14
  - allow-git-write
17
- - allow-npx
18
15
  - ask-git-push
19
16
  - deny-destructive-shell
20
17
  - deny-env-files
@@ -1,10 +0,0 @@
1
- import type { AbstractPermission } from './types.js';
2
- export declare const ABSTRACT_PERMISSIONS: AbstractPermission[];
3
- type PermissionBucket = 'allow' | 'ask' | 'deny';
4
- export declare function isAbstractPermission(value: string): value is AbstractPermission;
5
- export declare function normalizePermissionTokens(tokens: string[] | undefined, bucket: PermissionBucket): {
6
- abstract: AbstractPermission[] | undefined;
7
- raw: string[] | undefined;
8
- };
9
- export {};
10
- //# sourceMappingURL=permissions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/core/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EAYpD,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AA8BjD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAC5B,MAAM,EAAE,gBAAgB,GACvB;IAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CA2B3E"}
@@ -1,67 +0,0 @@
1
- export const ABSTRACT_PERMISSIONS = [
2
- 'project.commands',
3
- 'tests',
4
- 'git.read',
5
- 'git.write',
6
- 'package.exec',
7
- 'security.audit',
8
- 'git.push',
9
- 'destructive-shell',
10
- 'downloads',
11
- 'dynamic-exec',
12
- 'env.write',
13
- ];
14
- const LEGACY_PERMISSION_RULE_MAP = {
15
- allow: {
16
- 'Bash(npm run *)': 'project.commands',
17
- 'Bash(npm run)': 'project.commands',
18
- 'Bash(npm test *)': 'tests',
19
- 'Bash(npm test)': 'tests',
20
- 'Bash(git status)': 'git.read',
21
- 'Bash(git diff *)': 'git.read',
22
- 'Bash(git add *)': 'git.write',
23
- 'Bash(git commit *)': 'git.write',
24
- 'Bash(npx *)': 'package.exec',
25
- 'Bash(npm audit)': 'security.audit',
26
- },
27
- ask: {
28
- 'Bash(git push *)': 'git.push',
29
- },
30
- deny: {
31
- 'Bash(rm -rf *)': 'destructive-shell',
32
- 'Bash(git push --force *)': 'destructive-shell',
33
- 'Bash(curl *)': 'downloads',
34
- 'Bash(wget *)': 'downloads',
35
- 'Bash(eval *)': 'dynamic-exec',
36
- 'Bash(exec *)': 'dynamic-exec',
37
- 'Write(.env*)': 'env.write',
38
- 'Edit(.env*)': 'env.write',
39
- },
40
- };
41
- export function isAbstractPermission(value) {
42
- return ABSTRACT_PERMISSIONS.includes(value);
43
- }
44
- export function normalizePermissionTokens(tokens, bucket) {
45
- if (!tokens?.length) {
46
- return { abstract: undefined, raw: undefined };
47
- }
48
- const abstract = new Set();
49
- const raw = new Set();
50
- for (const token of tokens) {
51
- if (isAbstractPermission(token)) {
52
- abstract.add(token);
53
- continue;
54
- }
55
- const mapped = LEGACY_PERMISSION_RULE_MAP[bucket][token];
56
- if (mapped) {
57
- abstract.add(mapped);
58
- continue;
59
- }
60
- raw.add(token);
61
- }
62
- return {
63
- abstract: abstract.size > 0 ? [...abstract] : undefined,
64
- raw: raw.size > 0 ? [...raw] : undefined,
65
- };
66
- }
67
- //# sourceMappingURL=permissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/core/permissions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACxD,kBAAkB;IAClB,OAAO;IACP,UAAU;IACV,WAAW;IACX,cAAc;IACd,gBAAgB;IAChB,UAAU;IACV,mBAAmB;IACnB,WAAW;IACX,cAAc;IACd,WAAW;CACZ,CAAC;AAIF,MAAM,0BAA0B,GAAiE;IAC/F,KAAK,EAAE;QACL,iBAAiB,EAAE,kBAAkB;QACrC,eAAe,EAAE,kBAAkB;QACnC,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,UAAU;QAC9B,kBAAkB,EAAE,UAAU;QAC9B,iBAAiB,EAAE,WAAW;QAC9B,oBAAoB,EAAE,WAAW;QACjC,aAAa,EAAE,cAAc;QAC7B,iBAAiB,EAAE,gBAAgB;KACpC;IACD,GAAG,EAAE;QACH,kBAAkB,EAAE,UAAU;KAC/B;IACD,IAAI,EAAE;QACJ,gBAAgB,EAAE,mBAAmB;QACrC,0BAA0B,EAAE,mBAAmB;QAC/C,cAAc,EAAE,WAAW;QAC3B,cAAc,EAAE,WAAW;QAC3B,cAAc,EAAE,cAAc;QAC9B,cAAc,EAAE,cAAc;QAC9B,cAAc,EAAE,WAAW;QAC3B,aAAa,EAAE,WAAW;KAC3B;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,KAA2B,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAA4B,EAC5B,MAAwB;IAExB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QACvD,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;KACzC,CAAC;AACJ,CAAC"}