teamcast 0.9.3 → 1.0.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.
- package/README.md +219 -146
- package/dist/application/team.d.ts.map +1 -1
- package/dist/application/team.js +0 -1
- package/dist/application/team.js.map +1 -1
- package/dist/application/validate-team.d.ts.map +1 -1
- package/dist/application/validate-team.js +7 -4
- package/dist/application/validate-team.js.map +1 -1
- package/dist/cli/explain.d.ts.map +1 -1
- package/dist/cli/explain.js +4 -2
- package/dist/cli/explain.js.map +1 -1
- package/dist/cli/init.js +2 -5
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/manage.d.ts.map +1 -1
- package/dist/cli/manage.js +6 -15
- package/dist/cli/manage.js.map +1 -1
- package/dist/core/assertions.d.ts +4 -4
- package/dist/core/assertions.d.ts.map +1 -1
- package/dist/core/capability-resolver.d.ts +7 -0
- package/dist/core/capability-resolver.d.ts.map +1 -0
- package/dist/core/capability-resolver.js +18 -0
- package/dist/core/capability-resolver.js.map +1 -0
- package/dist/core/compose-policies.d.ts +15 -0
- package/dist/core/compose-policies.d.ts.map +1 -0
- package/dist/core/compose-policies.js +106 -0
- package/dist/core/compose-policies.js.map +1 -0
- package/dist/core/environment-resolver.d.ts +20 -0
- package/dist/core/environment-resolver.d.ts.map +1 -0
- package/dist/core/environment-resolver.js +202 -0
- package/dist/core/environment-resolver.js.map +1 -0
- package/dist/core/policy-evaluator.d.ts +2 -2
- package/dist/core/policy-evaluator.d.ts.map +1 -1
- package/dist/core/policy-evaluator.js +7 -7
- package/dist/core/policy-evaluator.js.map +1 -1
- package/dist/core/types.d.ts +5 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/explainer/index.js +1 -1
- package/dist/explainer/index.js.map +1 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +4 -3
- package/dist/generator/index.js.map +1 -1
- package/dist/importer/codex.js.map +1 -1
- package/dist/importer/index.d.ts +0 -3
- package/dist/importer/index.d.ts.map +1 -1
- package/dist/importer/index.js +2 -3
- package/dist/importer/index.js.map +1 -1
- package/dist/manifest/normalize.d.ts.map +1 -1
- package/dist/manifest/normalize.js +41 -6
- package/dist/manifest/normalize.js.map +1 -1
- package/dist/manifest/types.d.ts +15 -10
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/manifest/types.js.map +1 -1
- package/dist/registry/capabilities.d.ts +6 -0
- package/dist/registry/capabilities.d.ts.map +1 -0
- package/dist/registry/capabilities.js +14 -0
- package/dist/registry/capabilities.js.map +1 -0
- package/dist/registry/environments.d.ts +5 -0
- package/dist/registry/environments.d.ts.map +1 -0
- package/dist/registry/environments.js +106 -0
- package/dist/registry/environments.js.map +1 -0
- package/dist/registry/index.d.ts +23 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +85 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/instruction-fragments.d.ts +11 -0
- package/dist/registry/instruction-fragments.d.ts.map +1 -0
- package/dist/{components/agent-fragments.js → registry/instruction-fragments.js} +22 -73
- package/dist/registry/instruction-fragments.js.map +1 -0
- package/dist/registry/models.d.ts +3 -0
- package/dist/registry/models.d.ts.map +1 -0
- package/dist/registry/models.js +46 -0
- package/dist/registry/models.js.map +1 -0
- package/dist/registry/policy-fragments.d.ts +6 -0
- package/dist/registry/policy-fragments.d.ts.map +1 -0
- package/dist/registry/policy-fragments.js +49 -0
- package/dist/registry/policy-fragments.js.map +1 -0
- package/dist/registry/skills.d.ts +5 -0
- package/dist/registry/skills.d.ts.map +1 -0
- package/dist/registry/skills.js +182 -0
- package/dist/registry/skills.js.map +1 -0
- package/dist/registry/traits.d.ts +16 -0
- package/dist/registry/traits.d.ts.map +1 -0
- package/dist/registry/traits.js +109 -0
- package/dist/registry/traits.js.map +1 -0
- package/dist/registry/types.d.ts +77 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +21 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/renderers/claude/docs.d.ts +0 -1
- package/dist/renderers/claude/docs.d.ts.map +1 -1
- package/dist/renderers/claude/docs.js +0 -95
- package/dist/renderers/claude/docs.js.map +1 -1
- package/dist/renderers/claude/index.d.ts.map +1 -1
- package/dist/renderers/claude/index.js +1 -2
- package/dist/renderers/claude/index.js.map +1 -1
- package/dist/renderers/claude/skill-map.d.ts +8 -8
- package/dist/renderers/claude/skill-map.d.ts.map +1 -1
- package/dist/renderers/claude/skill-map.js +9 -9
- package/dist/renderers/claude/skill-map.js.map +1 -1
- package/dist/renderers/claude/skill-md.d.ts.map +1 -1
- package/dist/renderers/claude/skill-md.js +73 -5
- package/dist/renderers/claude/skill-md.js.map +1 -1
- package/dist/renderers/codex/agents-md.d.ts +4 -0
- package/dist/renderers/codex/agents-md.d.ts.map +1 -0
- package/dist/renderers/codex/agents-md.js +94 -0
- package/dist/renderers/codex/agents-md.js.map +1 -0
- package/dist/renderers/codex/index.d.ts.map +1 -1
- package/dist/renderers/codex/index.js +4 -0
- package/dist/renderers/codex/index.js.map +1 -1
- package/dist/renderers/codex/skill-map.d.ts +3 -4
- package/dist/renderers/codex/skill-map.d.ts.map +1 -1
- package/dist/renderers/codex/skill-map.js +1 -1
- package/dist/renderers/codex/skill-map.js.map +1 -1
- package/dist/renderers/codex/skill-md.d.ts +4 -0
- package/dist/renderers/codex/skill-md.d.ts.map +1 -0
- package/dist/renderers/codex/skill-md.js +125 -0
- package/dist/renderers/codex/skill-md.js.map +1 -0
- package/dist/renderers/target-context.d.ts +3 -4
- package/dist/renderers/target-context.d.ts.map +1 -1
- package/dist/team-templates/policies.js +1 -1
- package/dist/team-templates/policies.js.map +1 -1
- package/dist/team-templates/presets.d.ts.map +1 -1
- package/dist/team-templates/presets.js +5 -8
- package/dist/team-templates/presets.js.map +1 -1
- package/dist/team-templates/roles.d.ts +3 -3
- package/dist/team-templates/roles.d.ts.map +1 -1
- package/dist/team-templates/roles.js +2 -4
- package/dist/team-templates/roles.js.map +1 -1
- package/dist/types/manifest.d.ts +2 -2
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/manifest.js +3 -3
- package/dist/types/manifest.js.map +1 -1
- package/dist/utils/skill-prompt-options.d.ts +4 -0
- package/dist/utils/skill-prompt-options.d.ts.map +1 -0
- package/dist/utils/skill-prompt-options.js +12 -0
- package/dist/utils/skill-prompt-options.js.map +1 -0
- package/dist/validator/checks/capability-policy.d.ts +5 -0
- package/dist/validator/checks/capability-policy.d.ts.map +1 -0
- package/dist/validator/checks/capability-policy.js +40 -0
- package/dist/validator/checks/capability-policy.js.map +1 -0
- package/dist/validator/checks/capability-tools.d.ts +5 -0
- package/dist/validator/checks/capability-tools.d.ts.map +1 -0
- package/dist/validator/checks/capability-tools.js +23 -0
- package/dist/validator/checks/capability-tools.js.map +1 -0
- package/dist/validator/checks/environment.d.ts +8 -0
- package/dist/validator/checks/environment.d.ts.map +1 -0
- package/dist/validator/checks/environment.js +28 -0
- package/dist/validator/checks/environment.js.map +1 -0
- package/dist/validator/checks/handoff-graph.d.ts +2 -2
- package/dist/validator/checks/handoff-graph.d.ts.map +1 -1
- package/dist/validator/checks/handoff-graph.js +2 -2
- package/dist/validator/checks/handoff-graph.js.map +1 -1
- package/dist/validator/checks/instructions.d.ts +5 -0
- package/dist/validator/checks/instructions.d.ts.map +1 -0
- package/dist/validator/checks/instructions.js +169 -0
- package/dist/validator/checks/instructions.js.map +1 -0
- package/dist/validator/checks/manifest-registry.d.ts +8 -0
- package/dist/validator/checks/manifest-registry.d.ts.map +1 -0
- package/dist/validator/checks/manifest-registry.js +68 -0
- package/dist/validator/checks/manifest-registry.js.map +1 -0
- package/dist/validator/checks/mcp.d.ts +4 -0
- package/dist/validator/checks/mcp.d.ts.map +1 -0
- package/dist/validator/checks/mcp.js +73 -0
- package/dist/validator/checks/mcp.js.map +1 -0
- package/dist/validator/checks/policy-coherence.d.ts +4 -0
- package/dist/validator/checks/policy-coherence.d.ts.map +1 -0
- package/dist/validator/checks/policy-coherence.js +69 -0
- package/dist/validator/checks/policy-coherence.js.map +1 -0
- package/dist/validator/checks/registry.d.ts +8 -0
- package/dist/validator/checks/registry.d.ts.map +1 -0
- package/dist/validator/checks/registry.js +23 -0
- package/dist/validator/checks/registry.js.map +1 -0
- package/dist/validator/checks/role-warnings.d.ts +2 -2
- package/dist/validator/checks/role-warnings.d.ts.map +1 -1
- package/dist/validator/checks/role-warnings.js +5 -5
- package/dist/validator/checks/role-warnings.js.map +1 -1
- package/dist/validator/checks/runtime-models.d.ts +4 -0
- package/dist/validator/checks/runtime-models.d.ts.map +1 -0
- package/dist/validator/checks/runtime-models.js +14 -0
- package/dist/validator/checks/runtime-models.js.map +1 -0
- package/dist/validator/checks/skill-requirements.d.ts +5 -0
- package/dist/validator/checks/skill-requirements.d.ts.map +1 -0
- package/dist/validator/checks/skill-requirements.js +143 -0
- package/dist/validator/checks/skill-requirements.js.map +1 -0
- package/dist/validator/checks/team-graph-enhanced.d.ts +4 -0
- package/dist/validator/checks/team-graph-enhanced.d.ts.map +1 -0
- package/dist/validator/checks/team-graph-enhanced.js +71 -0
- package/dist/validator/checks/team-graph-enhanced.js.map +1 -0
- package/dist/validator/checks/tool-conflicts.d.ts +2 -2
- package/dist/validator/checks/tool-conflicts.d.ts.map +1 -1
- package/dist/validator/checks/tool-conflicts.js +3 -3
- package/dist/validator/checks/tool-conflicts.js.map +1 -1
- package/dist/validator/checks/trait-capability.d.ts +4 -0
- package/dist/validator/checks/trait-capability.d.ts.map +1 -0
- package/dist/validator/checks/trait-capability.js +23 -0
- package/dist/validator/checks/trait-capability.js.map +1 -0
- package/dist/validator/heuristics.d.ts +25 -0
- package/dist/validator/heuristics.d.ts.map +1 -0
- package/dist/validator/heuristics.js +87 -0
- package/dist/validator/heuristics.js.map +1 -0
- package/dist/validator/index.d.ts.map +1 -1
- package/dist/validator/index.js +24 -4
- package/dist/validator/index.js.map +1 -1
- package/dist/validator/reporter.d.ts.map +1 -1
- package/dist/validator/reporter.js +37 -10
- package/dist/validator/reporter.js.map +1 -1
- package/dist/validator/types.d.ts +3 -0
- package/dist/validator/types.d.ts.map +1 -1
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +2 -5
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/steps/agent-customization.d.ts.map +1 -1
- package/dist/wizard/steps/agent-customization.js +6 -19
- package/dist/wizard/steps/agent-customization.js.map +1 -1
- package/dist/wizard/steps/environment-selection.d.ts +11 -0
- package/dist/wizard/steps/environment-selection.d.ts.map +1 -0
- package/dist/wizard/steps/environment-selection.js +46 -0
- package/dist/wizard/steps/environment-selection.js.map +1 -0
- package/package.json +5 -5
- package/schema/teamcast.schema.json +30 -11
- package/templates/presets/feature-team.yaml +30 -10
- package/templates/presets/research-and-build.yaml +28 -3
- package/templates/presets/secure-dev.yaml +33 -0
- package/templates/presets/solo-dev.yaml +9 -0
- package/dist/components/agent-fragments.d.ts +0 -15
- package/dist/components/agent-fragments.d.ts.map +0 -1
- package/dist/components/agent-fragments.js.map +0 -1
- package/dist/components/policy-fragments.d.ts +0 -5
- package/dist/components/policy-fragments.d.ts.map +0 -1
- package/dist/components/policy-fragments.js +0 -88
- package/dist/components/policy-fragments.js.map +0 -1
- package/dist/core/index.d.ts +0 -8
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -8
- package/dist/core/index.js.map +0 -1
- package/dist/core/skill-resolver.d.ts +0 -8
- package/dist/core/skill-resolver.d.ts.map +0 -1
- package/dist/core/skill-resolver.js +0 -17
- package/dist/core/skill-resolver.js.map +0 -1
- package/dist/core/skills.d.ts +0 -4
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -14
- package/dist/core/skills.js.map +0 -1
- package/dist/plugins/catalog.d.ts +0 -10
- package/dist/plugins/catalog.d.ts.map +0 -1
- package/dist/plugins/catalog.js +0 -30
- package/dist/plugins/catalog.js.map +0 -1
- package/dist/plugins/core/models-plugin.d.ts +0 -3
- package/dist/plugins/core/models-plugin.d.ts.map +0 -1
- package/dist/plugins/core/models-plugin.js +0 -50
- package/dist/plugins/core/models-plugin.js.map +0 -1
- package/dist/plugins/core/presets-plugin.d.ts +0 -3
- package/dist/plugins/core/presets-plugin.d.ts.map +0 -1
- package/dist/plugins/core/presets-plugin.js +0 -10
- package/dist/plugins/core/presets-plugin.js.map +0 -1
- package/dist/plugins/core/tools-plugin.d.ts +0 -3
- package/dist/plugins/core/tools-plugin.d.ts.map +0 -1
- package/dist/plugins/core/tools-plugin.js +0 -44
- package/dist/plugins/core/tools-plugin.js.map +0 -1
- package/dist/plugins/environments/node-env-plugin.d.ts +0 -3
- package/dist/plugins/environments/node-env-plugin.d.ts.map +0 -1
- package/dist/plugins/environments/node-env-plugin.js +0 -31
- package/dist/plugins/environments/node-env-plugin.js.map +0 -1
- package/dist/plugins/environments/python-env-plugin.d.ts +0 -3
- package/dist/plugins/environments/python-env-plugin.d.ts.map +0 -1
- package/dist/plugins/environments/python-env-plugin.js +0 -33
- package/dist/plugins/environments/python-env-plugin.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -3
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -14
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/inject.d.ts +0 -7
- package/dist/plugins/inject.d.ts.map +0 -1
- package/dist/plugins/inject.js +0 -48
- package/dist/plugins/inject.js.map +0 -1
- package/dist/plugins/merge-policies.d.ts +0 -8
- package/dist/plugins/merge-policies.d.ts.map +0 -1
- package/dist/plugins/merge-policies.js +0 -90
- package/dist/plugins/merge-policies.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -27
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -97
- package/dist/plugins/registry.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -75
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -2
- package/dist/plugins/types.js.map +0 -1
- package/dist/renderers/index.d.ts +0 -6
- package/dist/renderers/index.d.ts.map +0 -1
- package/dist/renderers/index.js +0 -4
- package/dist/renderers/index.js.map +0 -1
- package/dist/validator/checks/instruction-blocks.d.ts +0 -5
- package/dist/validator/checks/instruction-blocks.d.ts.map +0 -1
- package/dist/validator/checks/instruction-blocks.js +0 -47
- package/dist/validator/checks/instruction-blocks.js.map +0 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export function checkTeamGraphEnhanced(team) {
|
|
2
|
+
const results = [];
|
|
3
|
+
const agentEntries = Object.entries(team.agents);
|
|
4
|
+
if (agentEntries.length === 0) {
|
|
5
|
+
return results;
|
|
6
|
+
}
|
|
7
|
+
const firstAgentId = agentEntries[0][0];
|
|
8
|
+
// Build a set of all agents referenced in any handoff
|
|
9
|
+
const referencedByHandoff = new Set();
|
|
10
|
+
let anyHandoffsDefined = false;
|
|
11
|
+
for (const [, agent] of agentEntries) {
|
|
12
|
+
const handoffs = agent.metadata?.handoffs ?? [];
|
|
13
|
+
if (handoffs.length > 0) {
|
|
14
|
+
anyHandoffsDefined = true;
|
|
15
|
+
for (const target of handoffs) {
|
|
16
|
+
referencedByHandoff.add(target);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// HANDOFF_TO_SELF — agent appears in its own handoffs
|
|
21
|
+
for (const [agentId, agent] of agentEntries) {
|
|
22
|
+
if (agent.metadata?.handoffs?.includes(agentId)) {
|
|
23
|
+
results.push({
|
|
24
|
+
severity: 'error',
|
|
25
|
+
category: 'Team graph',
|
|
26
|
+
code: 'HANDOFF_TO_SELF',
|
|
27
|
+
phase: 'team-graph',
|
|
28
|
+
message: `Agent "${agentId}" has a handoff to itself`,
|
|
29
|
+
agent: agentId,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Only run reachability checks when there are handoffs defined
|
|
34
|
+
if (!anyHandoffsDefined) {
|
|
35
|
+
return results;
|
|
36
|
+
}
|
|
37
|
+
// ORPHAN_AGENT — agent not referenced by any handoff, no handoffs of its own, and not the first agent
|
|
38
|
+
for (const [agentId, agent] of agentEntries) {
|
|
39
|
+
if (agentId === firstAgentId) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const hasHandoffs = (agent.metadata?.handoffs?.length ?? 0) > 0;
|
|
43
|
+
const isReferenced = referencedByHandoff.has(agentId);
|
|
44
|
+
if (!isReferenced && !hasHandoffs) {
|
|
45
|
+
results.push({
|
|
46
|
+
severity: 'warning',
|
|
47
|
+
category: 'Team graph',
|
|
48
|
+
code: 'ORPHAN_AGENT',
|
|
49
|
+
phase: 'team-graph',
|
|
50
|
+
message: `Agent "${agentId}" is not referenced in any handoff chain — it may be unreachable`,
|
|
51
|
+
agent: agentId,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// MULTIPLE_ROOTS — more than one agent not targeted by any other agent's handoffs
|
|
56
|
+
// (i.e., potential entry points / roots in the delegation graph)
|
|
57
|
+
const roots = agentEntries
|
|
58
|
+
.map(([id]) => id)
|
|
59
|
+
.filter((id) => !referencedByHandoff.has(id));
|
|
60
|
+
if (roots.length > 1) {
|
|
61
|
+
results.push({
|
|
62
|
+
severity: 'info',
|
|
63
|
+
category: 'Team graph',
|
|
64
|
+
code: 'MULTIPLE_ROOTS',
|
|
65
|
+
phase: 'team-graph',
|
|
66
|
+
message: `Multiple root agents detected: ${roots.join(', ')} — consider a single orchestrator entry point`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return results;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=team-graph-enhanced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-graph-enhanced.js","sourceRoot":"","sources":["../../../src/validator/checks/team-graph-enhanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CapabilityToolMap } from '../../registry/types.js';
|
|
2
2
|
import type { CoreTeam } from '../../core/types.js';
|
|
3
3
|
import type { ValidationResult } from '../types.js';
|
|
4
|
-
export declare function checkToolConflicts(team: CoreTeam, skillMap:
|
|
4
|
+
export declare function checkToolConflicts(team: CoreTeam, skillMap: CapabilityToolMap): ValidationResult[];
|
|
5
5
|
//# sourceMappingURL=tool-conflicts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-conflicts.d.ts","sourceRoot":"","sources":["../../../src/validator/checks/tool-conflicts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-conflicts.d.ts","sourceRoot":"","sources":["../../../src/validator/checks/tool-conflicts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,EAAE,CAoCpB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { agentHasCapability } from '../../core/capability-resolver.js';
|
|
2
2
|
export function checkToolConflicts(team, skillMap) {
|
|
3
3
|
const results = [];
|
|
4
4
|
for (const [agentId, agent] of Object.entries(team.agents)) {
|
|
5
5
|
// runtime.tools and runtime.disallowedTools are already expanded to CanonicalTool[]
|
|
6
|
-
// during normalization:
|
|
6
|
+
// during normalization: CapabilityId values (e.g. 'read_files') are resolved to their
|
|
7
7
|
// concrete tool equivalents (e.g. 'Read', 'Grep', 'Glob') before this checker runs.
|
|
8
8
|
const allow = new Set(agent.runtime.tools ?? []);
|
|
9
9
|
const deny = new Set(agent.runtime.disallowedTools ?? []);
|
|
@@ -19,7 +19,7 @@ export function checkToolConflicts(team, skillMap) {
|
|
|
19
19
|
}
|
|
20
20
|
const desc = agent.description.toLowerCase();
|
|
21
21
|
if ((desc.includes('read-only') || desc.includes('cannot modify') || desc.includes('does not write')) &&
|
|
22
|
-
|
|
22
|
+
agentHasCapability(agent.runtime.tools ?? [], 'write_files', skillMap)) {
|
|
23
23
|
results.push({
|
|
24
24
|
severity: 'warning',
|
|
25
25
|
category: 'Tool conflicts',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-conflicts.js","sourceRoot":"","sources":["../../../src/validator/checks/tool-conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tool-conflicts.js","sourceRoot":"","sources":["../../../src/validator/checks/tool-conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,QAA2B;IAE3B,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,oFAAoF;QACpF,sFAAsF;QACtF,oFAAoF;QACpF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,gBAAgB;oBAC1B,OAAO,EAAE,UAAU,OAAO,UAAU,IAAI,sCAAsC;oBAC9E,KAAK,EAAE,OAAO;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC7C,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACjG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,EACtE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,gBAAgB;gBAC1B,OAAO,EAAE,UAAU,OAAO,oEAAoE;gBAC9F,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trait-capability.d.ts","sourceRoot":"","sources":["../../../src/validator/checks/trait-capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,EAAE,CAyBzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function checkTraitCapabilities(team) {
|
|
2
|
+
const results = [];
|
|
3
|
+
for (const [agentId, agent] of Object.entries(team.agents)) {
|
|
4
|
+
// Orchestrators may rely purely on delegation — skip them
|
|
5
|
+
if (agent.description.toLowerCase().includes('orchestrat')) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
const hasTools = (agent.runtime.tools?.length ?? 0) > 0;
|
|
9
|
+
const hasDisallowedTools = (agent.runtime.disallowedTools?.length ?? 0) > 0;
|
|
10
|
+
if (!hasTools && !hasDisallowedTools) {
|
|
11
|
+
results.push({
|
|
12
|
+
severity: 'warning',
|
|
13
|
+
category: 'Traits',
|
|
14
|
+
code: 'EMPTY_CAPABILITIES',
|
|
15
|
+
phase: 'traits',
|
|
16
|
+
message: `Agent "${agentId}" has no capabilities — it cannot perform any actions`,
|
|
17
|
+
agent: agentId,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return results;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=trait-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trait-capability.js","sourceRoot":"","sources":["../../../src/validator/checks/trait-capability.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,0DAA0D;QAC1D,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAE5E,IAAI,CAAC,QAAQ,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,UAAU,OAAO,uDAAuD;gBACjF,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CapabilityId, CapabilityToolMap } from '../registry/types.js';
|
|
2
|
+
export interface ContradictionPattern {
|
|
3
|
+
pattern: RegExp;
|
|
4
|
+
/** If the pattern says "don't do X", the agent has this capability but shouldn't */
|
|
5
|
+
deniedCapability?: CapabilityId;
|
|
6
|
+
/** If the pattern says "do X", the agent should have this capability */
|
|
7
|
+
requiredCapability?: CapabilityId;
|
|
8
|
+
}
|
|
9
|
+
export interface ContradictionResult {
|
|
10
|
+
pattern: string;
|
|
11
|
+
capability: CapabilityId;
|
|
12
|
+
type: 'denied' | 'required';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Find contradictions between instruction text and agent capabilities.
|
|
16
|
+
* - "denied" means instruction says not to do X but agent HAS the capability
|
|
17
|
+
* - "required" means instruction says to do X but agent LACKS the capability
|
|
18
|
+
*/
|
|
19
|
+
export declare function findContradictions(content: string, agentTools: string[], skillMap: CapabilityToolMap): ContradictionResult[];
|
|
20
|
+
/**
|
|
21
|
+
* Extract agent names referenced in instruction content.
|
|
22
|
+
* Returns lowercased unique names, excluding common English stopwords.
|
|
23
|
+
*/
|
|
24
|
+
export declare function findReferencedAgents(content: string): string[];
|
|
25
|
+
//# sourceMappingURL=heuristics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../../src/validator/heuristics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,YAAY,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,YAAY,CAAC;IACzB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC7B;AAsCD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,iBAAiB,GAC1B,mBAAmB,EAAE,CA8BvB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB9D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { agentHasCapability } from '../core/capability-resolver.js';
|
|
2
|
+
const CONTRADICTION_PATTERNS = [
|
|
3
|
+
{
|
|
4
|
+
pattern: /do not (modify|edit|write|change) files/i,
|
|
5
|
+
deniedCapability: 'write_files',
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
pattern: /run (tests|the test suite|npm test|pytest)/i,
|
|
9
|
+
requiredCapability: 'execute',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
pattern: /search the web|look up|find documentation online/i,
|
|
13
|
+
requiredCapability: 'web',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
pattern: /delegate to \w+/i,
|
|
17
|
+
requiredCapability: 'delegate',
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
const AGENT_REFERENCE_PATTERNS = [
|
|
21
|
+
/delegate to (\w+)/gi,
|
|
22
|
+
/hand off to (\w+)/gi,
|
|
23
|
+
/ask (?:the )?(\w+) to/gi,
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Common English words that should not be treated as agent names.
|
|
27
|
+
* These appear naturally in instruction prose and are not agent identifiers.
|
|
28
|
+
*/
|
|
29
|
+
const STOPWORDS = new Set([
|
|
30
|
+
'the', 'a', 'an', 'your', 'my', 'our', 'their', 'its',
|
|
31
|
+
'this', 'that', 'these', 'those',
|
|
32
|
+
'appropriate', 'relevant', 'correct', 'right',
|
|
33
|
+
'user', 'human', 'team', 'it', 'them',
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* Find contradictions between instruction text and agent capabilities.
|
|
37
|
+
* - "denied" means instruction says not to do X but agent HAS the capability
|
|
38
|
+
* - "required" means instruction says to do X but agent LACKS the capability
|
|
39
|
+
*/
|
|
40
|
+
export function findContradictions(content, agentTools, skillMap) {
|
|
41
|
+
const results = [];
|
|
42
|
+
for (const entry of CONTRADICTION_PATTERNS) {
|
|
43
|
+
if (!entry.pattern.test(content))
|
|
44
|
+
continue;
|
|
45
|
+
if (entry.deniedCapability) {
|
|
46
|
+
// Instruction says "don't do X" — flag if agent HAS the capability
|
|
47
|
+
if (agentHasCapability(agentTools, entry.deniedCapability, skillMap)) {
|
|
48
|
+
results.push({
|
|
49
|
+
pattern: entry.pattern.source,
|
|
50
|
+
capability: entry.deniedCapability,
|
|
51
|
+
type: 'denied',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (entry.requiredCapability) {
|
|
56
|
+
// Instruction says "do X" — flag if agent LACKS the capability
|
|
57
|
+
if (!agentHasCapability(agentTools, entry.requiredCapability, skillMap)) {
|
|
58
|
+
results.push({
|
|
59
|
+
pattern: entry.pattern.source,
|
|
60
|
+
capability: entry.requiredCapability,
|
|
61
|
+
type: 'required',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract agent names referenced in instruction content.
|
|
70
|
+
* Returns lowercased unique names, excluding common English stopwords.
|
|
71
|
+
*/
|
|
72
|
+
export function findReferencedAgents(content) {
|
|
73
|
+
const names = new Set();
|
|
74
|
+
for (const pattern of AGENT_REFERENCE_PATTERNS) {
|
|
75
|
+
// Reset lastIndex for global patterns
|
|
76
|
+
pattern.lastIndex = 0;
|
|
77
|
+
let match;
|
|
78
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
79
|
+
const name = match[1].toLowerCase();
|
|
80
|
+
if (!STOPWORDS.has(name)) {
|
|
81
|
+
names.add(name);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return [...names];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=heuristics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../../src/validator/heuristics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAgBpE,MAAM,sBAAsB,GAA2B;IACrD;QACE,OAAO,EAAE,0CAA0C;QACnD,gBAAgB,EAAE,aAAa;KAChC;IACD;QACE,OAAO,EAAE,6CAA6C;QACtD,kBAAkB,EAAE,SAAS;KAC9B;IACD;QACE,OAAO,EAAE,mDAAmD;QAC5D,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,OAAO,EAAE,kBAAkB;QAC3B,kBAAkB,EAAE,UAAU;KAC/B;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAa;IACzC,qBAAqB;IACrB,qBAAqB;IACrB,yBAAyB;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;IACrD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAChC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;IAC7C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CACtC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,UAAoB,EACpB,QAA2B;IAE3B,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAS;QAE3C,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,mEAAmE;YACnE,IAAI,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;oBAC7B,UAAU,EAAE,KAAK,CAAC,gBAAgB;oBAClC,IAAI,EAAE,QAAQ;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC7B,+DAA+D;YAC/D,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;oBAC7B,UAAU,EAAE,KAAK,CAAC,kBAAkB;oBACpC,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,OAAO,IAAI,wBAAwB,EAAE,CAAC;QAC/C,sCAAsC;QACtC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAiB5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAsBpE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,aAAa,EAC5B,aAAa,CAAC,EAAE,OAAO,EAAE,GACxB,gBAAgB,EAAE,CAWpB"}
|
package/dist/validator/index.js
CHANGED
|
@@ -2,19 +2,39 @@ import { checkHandoffGraph } from './checks/handoff-graph.js';
|
|
|
2
2
|
import { checkToolConflicts } from './checks/tool-conflicts.js';
|
|
3
3
|
import { checkRoleWarnings } from './checks/role-warnings.js';
|
|
4
4
|
import { checkSecurityBaseline } from './checks/security-baseline.js';
|
|
5
|
-
import {
|
|
5
|
+
import { checkInstructions } from './checks/instructions.js';
|
|
6
|
+
import { checkRuntimeModelWarnings } from './checks/runtime-models.js';
|
|
6
7
|
import { evaluatePolicyAssertions } from '../core/policy-evaluator.js';
|
|
7
|
-
|
|
8
|
+
import { checkRegistryReferences } from './checks/registry.js';
|
|
9
|
+
import { checkEnvironments } from './checks/environment.js';
|
|
10
|
+
import { checkTraitCapabilities } from './checks/trait-capability.js';
|
|
11
|
+
import { checkCapabilityTools } from './checks/capability-tools.js';
|
|
12
|
+
import { checkPolicyCoherence } from './checks/policy-coherence.js';
|
|
13
|
+
import { checkCapabilityPolicyCross } from './checks/capability-policy.js';
|
|
14
|
+
import { checkSkillRequirements } from './checks/skill-requirements.js';
|
|
15
|
+
import { checkMcpServers } from './checks/mcp.js';
|
|
16
|
+
import { checkTeamGraphEnhanced } from './checks/team-graph-enhanced.js';
|
|
17
|
+
const CHECKERS = (skillMap, targetName) => [
|
|
18
|
+
checkRegistryReferences,
|
|
19
|
+
checkEnvironments,
|
|
20
|
+
checkTraitCapabilities, // Phase 2
|
|
21
|
+
(team) => checkCapabilityTools(team, skillMap), // Phase 3
|
|
8
22
|
(team) => checkHandoffGraph(team, skillMap),
|
|
23
|
+
checkTeamGraphEnhanced, // Phase 8 new
|
|
9
24
|
(team) => checkToolConflicts(team, skillMap),
|
|
10
25
|
(team) => checkRoleWarnings(team, skillMap),
|
|
26
|
+
(team) => checkRuntimeModelWarnings(team, targetName),
|
|
11
27
|
checkSecurityBaseline,
|
|
12
|
-
|
|
28
|
+
checkPolicyCoherence, // Phase 4
|
|
29
|
+
(team) => checkCapabilityPolicyCross(team, skillMap), // Phase 5
|
|
30
|
+
(team) => checkSkillRequirements(team, skillMap, targetName), // Phase 6
|
|
31
|
+
(team) => checkMcpServers(team, targetName), // Phase 10
|
|
32
|
+
(team) => checkInstructions(team, skillMap), // Phase 7
|
|
13
33
|
(team) => evaluatePolicyAssertions(team, skillMap),
|
|
14
34
|
];
|
|
15
35
|
export function runValidation(team, targetContext, extraCheckers) {
|
|
16
36
|
const results = [];
|
|
17
|
-
const baseCheckers = CHECKERS(targetContext.skillMap);
|
|
37
|
+
const baseCheckers = CHECKERS(targetContext.skillMap, targetContext.name);
|
|
18
38
|
const checkers = extraCheckers ? [...baseCheckers, ...extraCheckers] : baseCheckers;
|
|
19
39
|
for (const checker of checkers) {
|
|
20
40
|
results.push(...checker(team));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,MAAM,QAAQ,GAAG,CAAC,QAA2B,EAAE,UAAkB,EAAa,EAAE,CAAC;IAC/E,uBAAuB;IACvB,iBAAiB;IACjB,sBAAsB,EAAgC,UAAU;IAChE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAQ,UAAU;IAChE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC3C,sBAAsB,EAAgC,cAAc;IACpE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC;IACrD,qBAAqB;IACrB,oBAAoB,EAAkC,UAAU;IAChE,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,UAAU;IAChE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,UAAU;IACxE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,EAAkB,WAAW;IACxE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAa,UAAU;IAClE,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC;CACnD,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,IAAc,EACd,aAA4B,EAC5B,aAAyB;IAEzB,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/validator/reporter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/validator/reporter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA2CnD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAcnF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,oBAAoB,CAAC,EAAE,MAAM,GAC5B,IAAI,CAwEN;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAE9D"}
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
const CATEGORY_ORDER = [
|
|
3
|
+
{ label: 'Registry', okDescription: 'all references valid' },
|
|
4
|
+
{ label: 'Environment', okDescription: 'environments valid' },
|
|
5
|
+
{ label: 'Traits', okDescription: 'trait/capability composition valid' },
|
|
6
|
+
{ label: 'Capabilities', okDescription: 'capability-to-tool mapping valid' },
|
|
3
7
|
{ label: 'Handoff graph', okDescription: 'delegation paths verified' },
|
|
8
|
+
{ label: 'Team graph', okDescription: 'agent reachability verified' },
|
|
4
9
|
{ label: 'Tool conflicts', okDescription: 'no allow/deny overlaps' },
|
|
5
10
|
{ label: 'Role separation', okDescription: 'roles match capabilities' },
|
|
6
11
|
{ label: 'Security', okDescription: 'sandbox and permissions checked' },
|
|
7
|
-
{ label: '
|
|
12
|
+
{ label: 'Policy coherence', okDescription: 'no contradictions in policies' },
|
|
13
|
+
{ label: 'Capability-policy', okDescription: 'capabilities align with policies' },
|
|
14
|
+
{ label: 'Skills', okDescription: 'skill requirements satisfied' },
|
|
15
|
+
{ label: 'MCP', okDescription: 'MCP server configuration valid' },
|
|
16
|
+
{ label: 'Instructions', okDescription: 'instruction blocks and fragments valid' },
|
|
8
17
|
{ label: 'policy', okDescription: 'Policy assertions' },
|
|
9
18
|
];
|
|
10
19
|
function renderCategoryRow(icon, label, description, items) {
|
|
11
20
|
console.log(` ${icon} ${chalk.bold(label)} ${chalk.dim('-')} ${description}`);
|
|
12
21
|
for (const result of items) {
|
|
13
|
-
const prefix = result.severity === 'error'
|
|
22
|
+
const prefix = result.severity === 'error'
|
|
23
|
+
? chalk.red(' [error]')
|
|
24
|
+
: result.severity === 'warning'
|
|
25
|
+
? chalk.yellow(' [warn]')
|
|
26
|
+
: chalk.blue(' [info]');
|
|
14
27
|
console.log(` ${prefix} ${result.message}`);
|
|
15
28
|
}
|
|
16
29
|
}
|
|
@@ -39,18 +52,27 @@ export function printValidationReport(results, policyAssertionCount) {
|
|
|
39
52
|
const categoryResults = byCategory.get(meta.label) ?? [];
|
|
40
53
|
const errors = categoryResults.filter((result) => result.severity === 'error');
|
|
41
54
|
const warnings = categoryResults.filter((result) => result.severity === 'warning');
|
|
55
|
+
const infos = categoryResults.filter((result) => result.severity === 'info');
|
|
42
56
|
const displayLabel = meta.label === 'policy' ? 'Policy assertions' : meta.label;
|
|
43
57
|
if (errors.length > 0) {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
const parts = [chalk.red(`${errors.length} error${errors.length !== 1 ? 's' : ''}`)];
|
|
59
|
+
if (warnings.length > 0)
|
|
60
|
+
parts.push(chalk.yellow(`${warnings.length} warning${warnings.length !== 1 ? 's' : ''}`));
|
|
61
|
+
if (infos.length > 0)
|
|
62
|
+
parts.push(chalk.blue(`${infos.length} info`));
|
|
63
|
+
renderCategoryRow(chalk.red('[!!]'), displayLabel, parts.join(', '), [...errors, ...warnings, ...infos]);
|
|
49
64
|
continue;
|
|
50
65
|
}
|
|
51
66
|
if (warnings.length > 0) {
|
|
52
|
-
const
|
|
53
|
-
|
|
67
|
+
const parts = [chalk.yellow(`${warnings.length} warning${warnings.length !== 1 ? 's' : ''}`)];
|
|
68
|
+
if (infos.length > 0)
|
|
69
|
+
parts.push(chalk.blue(`${infos.length} info`));
|
|
70
|
+
renderCategoryRow(chalk.yellow('[--]'), displayLabel, parts.join(', '), [...warnings, ...infos]);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (infos.length > 0) {
|
|
74
|
+
const desc = chalk.blue(`${infos.length} info`);
|
|
75
|
+
renderCategoryRow(chalk.blue('[..]'), displayLabel, desc, infos);
|
|
54
76
|
continue;
|
|
55
77
|
}
|
|
56
78
|
const okDesc = meta.label === 'policy' && policyAssertionCount !== undefined
|
|
@@ -63,8 +85,10 @@ export function printValidationReport(results, policyAssertionCount) {
|
|
|
63
85
|
console.log('');
|
|
64
86
|
const totalErrors = results.filter((result) => result.severity === 'error').length;
|
|
65
87
|
const totalWarnings = results.filter((result) => result.severity === 'warning').length;
|
|
88
|
+
const totalInfos = results.filter((result) => result.severity === 'info').length;
|
|
66
89
|
if (totalErrors === 0 && totalWarnings === 0) {
|
|
67
|
-
|
|
90
|
+
const infoSuffix = totalInfos > 0 ? chalk.dim(` (${totalInfos} info)`) : '';
|
|
91
|
+
console.log(chalk.green('All checks passed.') + infoSuffix);
|
|
68
92
|
}
|
|
69
93
|
else {
|
|
70
94
|
const parts = [];
|
|
@@ -74,6 +98,9 @@ export function printValidationReport(results, policyAssertionCount) {
|
|
|
74
98
|
if (totalWarnings > 0) {
|
|
75
99
|
parts.push(chalk.yellow(`${totalWarnings} warning${totalWarnings !== 1 ? 's' : ''}`));
|
|
76
100
|
}
|
|
101
|
+
if (totalInfos > 0) {
|
|
102
|
+
parts.push(chalk.blue(`${totalInfos} info`));
|
|
103
|
+
}
|
|
77
104
|
console.log(`${parts.join(', ')} found.`);
|
|
78
105
|
}
|
|
79
106
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/validator/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,cAAc,GAAmB;IACrC,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,2BAA2B,EAAE;IACtE,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,wBAAwB,EAAE;IACpE,EAAE,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,0BAA0B,EAAE;IACvE,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iCAAiC,EAAE;IACvE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/validator/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { CoreTeam } from '../core/types.js';
|
|
2
2
|
export type Severity = 'error' | 'warning' | 'info';
|
|
3
|
+
export type ValidationPhase = 'registry' | 'traits' | 'capabilities' | 'policies' | 'capability-policy' | 'skills' | 'instructions' | 'team-graph' | 'environment' | 'mcp';
|
|
3
4
|
export interface ValidationResult {
|
|
4
5
|
severity: Severity;
|
|
5
6
|
category: string;
|
|
6
7
|
message: string;
|
|
7
8
|
agent?: string;
|
|
9
|
+
phase?: ValidationPhase;
|
|
10
|
+
code?: string;
|
|
8
11
|
}
|
|
9
12
|
export type Checker = (team: CoreTeam) => ValidationResult[];
|
|
10
13
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,QAAQ,GACR,cAAc,GACd,UAAU,GACV,mBAAmB,GACnB,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,aAAa,GACb,KAAK,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,gBAAgB,EAAE,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;AAsBlE,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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAsBlE,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,CA6ErE"}
|
package/dist/wizard/index.js
CHANGED
|
@@ -7,10 +7,10 @@ import { stepTargetSelection } from './steps/target-selection.js';
|
|
|
7
7
|
import { stepTeamSelection } from './steps/team-selection.js';
|
|
8
8
|
import { stepConfirmGenerate } from './steps/confirm-generate.js';
|
|
9
9
|
import { stepAgentCustomization } from './steps/agent-customization.js';
|
|
10
|
+
import { stepEnvironmentSelection } from './steps/environment-selection.js';
|
|
10
11
|
import { normalizeManifest, replaceManifestTarget } from '../manifest/normalize.js';
|
|
11
12
|
import { getTarget, getRegisteredTargetNames } from '../renderers/registry.js';
|
|
12
13
|
import { evaluateTeam, teamHasBlockingIssues, printManifestValidation } from '../application/validate-team.js';
|
|
13
|
-
import { detectPluginNames } from '../plugins/catalog.js';
|
|
14
14
|
import { printSuccess, printError, printHeader, printCommandSuccess, printNextSteps, } from '../utils/chalk-helpers.js';
|
|
15
15
|
import { abortCli } from '../cli/errors.js';
|
|
16
16
|
export async function runWizard(options) {
|
|
@@ -43,10 +43,7 @@ export async function runWizard(options) {
|
|
|
43
43
|
const customizedTeam = await stepAgentCustomization(normalizedTeam, targetContext, { nonInteractive });
|
|
44
44
|
rawManifest = replaceManifestTarget(rawManifest, targetName, customizedTeam);
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
if (detectedPlugins.length > 0) {
|
|
48
|
-
rawManifest.plugins = detectedPlugins;
|
|
49
|
-
}
|
|
46
|
+
rawManifest.project.environments = await stepEnvironmentSelection(cwd, rawManifest.project.environments, { nonInteractive });
|
|
50
47
|
const validation = evaluateTeam(rawManifest, { cwd });
|
|
51
48
|
if (teamHasBlockingIssues(validation)) {
|
|
52
49
|
printManifestValidation(validation);
|
package/dist/wizard/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/G,OAAO,
|
|
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;
|
|
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;AA0GvE,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,CA4DnB"}
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { expandCapabilities } from '../../core/capability-resolver.js';
|
|
3
|
+
import { defaultRegistry } from '../../registry/index.js';
|
|
4
4
|
import { promptConfirm, promptList, promptCheckbox, promptInput } from '../../utils/prompts.js';
|
|
5
|
-
|
|
6
|
-
* Human-readable labels for each AgentSkill value, shown in the wizard checkbox.
|
|
7
|
-
* Format: "<label> (<tools>)"
|
|
8
|
-
*/
|
|
9
|
-
function formatSkillLabel(skillId, description) {
|
|
10
|
-
const skillDef = getSkillDefinition(skillId);
|
|
11
|
-
const label = skillDef ? skillDef.description : skillId;
|
|
12
|
-
const shortLabel = label.split(' ')[0] ?? skillId;
|
|
13
|
-
return `${shortLabel.padEnd(16)}`;
|
|
14
|
-
}
|
|
15
|
-
function getSupportedSkills(targetContext) {
|
|
16
|
-
const allSkills = listSkillDefinitions().map((skill) => skill.id);
|
|
17
|
-
return allSkills.filter((skill) => (targetContext.skillMap[skill]?.length ?? 0) > 0);
|
|
18
|
-
}
|
|
5
|
+
import { formatSkillLabel, getSupportedSkills } from '../../utils/skill-prompt-options.js';
|
|
19
6
|
function removeConflictingDisallowedTools(tools, disallowedTools) {
|
|
20
7
|
if (!disallowedTools?.length) {
|
|
21
8
|
return disallowedTools;
|
|
@@ -51,7 +38,7 @@ async function promptRestrictedTools(targetContext, allowedTools, currentDisallo
|
|
|
51
38
|
return selectedRestrictedTools.length > 0 ? selectedRestrictedTools : undefined;
|
|
52
39
|
}
|
|
53
40
|
async function promptTargetModel(targetContext, currentModel) {
|
|
54
|
-
const targetModels =
|
|
41
|
+
const targetModels = defaultRegistry.listModels(targetContext.name);
|
|
55
42
|
if (targetModels.length > 0) {
|
|
56
43
|
const choices = targetModels.map((m) => ({
|
|
57
44
|
name: `${m.displayName.padEnd(20)} ${chalk.dim(`(${m.features.join(', ')})`)}`,
|
|
@@ -113,13 +100,13 @@ export async function stepAgentCustomization(team, targetContext, options) {
|
|
|
113
100
|
const selectedSkills = await promptCheckbox({
|
|
114
101
|
message: ` Skills for ${name}:`,
|
|
115
102
|
choices: supportedSkills.map((skill) => ({
|
|
116
|
-
name: formatSkillLabel(skill
|
|
103
|
+
name: formatSkillLabel(skill),
|
|
117
104
|
value: skill,
|
|
118
105
|
checked: currentSkills.includes(skill),
|
|
119
106
|
})),
|
|
120
107
|
});
|
|
121
108
|
const expandedTools = selectedSkills.length > 0
|
|
122
|
-
?
|
|
109
|
+
? expandCapabilities(selectedSkills, targetContext.skillMap)
|
|
123
110
|
: undefined;
|
|
124
111
|
const disallowedTools = await promptRestrictedTools(targetContext, expandedTools, agent.runtime.disallowedTools);
|
|
125
112
|
updatedAgents[name] = {
|