Summary of the new feature / enhancement
Command names and aliases may collide. Today, we don't handle it, so an exception will be thrown when collision happens. We should handle the name/alias collision gracefully.
|
// The 'command.Name' is included in the 'command.Aliases' collection. |
|
// TODO: need to think about how to handle command names/aliases collision. |
|
// We don't handle collision today -- it will throw when collision happens. |
|
foreach (string alias in command.Aliases) |
|
{ |
|
_commands.Add(alias, command); |
|
} |
|
// The 'command.Name' is included in the 'command.Aliases' collection. |
|
// TODO: need to update accordingly when we handle command names/aliases collision. |
|
foreach (string alias in command.Aliases) |
|
{ |
|
_commands.Remove(alias); |
|
} |
Proposed technical implementation details (optional)
We load commands from an agent when switching to the agent and unload its commands when switching away from it. So, at a given time, only commands from one agent will co-exist with the core commands. Therefore, we shouldn't allow a name/alias to overwrite an existing one and hence we should throw a good error when collision happens.
Summary of the new feature / enhancement
Command names and aliases may collide. Today, we don't handle it, so an exception will be thrown when collision happens. We should handle the name/alias collision gracefully.
AIShell/shell/AIShell.Kernel/Command/CommandRunner.cs
Lines 61 to 67 in b10735a
AIShell/shell/AIShell.Kernel/Command/CommandRunner.cs
Lines 89 to 94 in b10735a
Proposed technical implementation details (optional)
We load commands from an agent when switching to the agent and unload its commands when switching away from it. So, at a given time, only commands from one agent will co-exist with the core commands. Therefore, we shouldn't allow a name/alias to overwrite an existing one and hence we should throw a good error when collision happens.