@@ -548,8 +548,7 @@ it creates. You can customize this behavior with the `attribution` option:
- `trailer_style`: Controls the attribution trailer added to commit messages
(default: `assisted-by`)
- - `assisted-by`: Adds `Assisted-by: [Model Name] via Crush <crush@charm.land>`
- (includes the model name)
+ - `assisted-by`: Adds `Assisted-by: Crush:[ModelID]` as specified in [the convention](https://docs.kernel.org/process/coding-assistants.html#attribution)
- `co-authored-by`: Adds `Co-Authored-By: Crush <crush@charm.land>`
- `none`: No attribution trailer
- `generated_with`: When true (default), adds `💘 Generated with Crush` line to
@@ -458,10 +458,10 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
}
// Get the model name for the agent
- modelName := ""
+ modelID := ""
if modelCfg, ok := c.cfg.Config().Models[agent.Model]; ok {
if model := c.cfg.Config().GetModel(modelCfg.Provider, modelCfg.Model); model != nil {
- modelName = model.Name
+ modelID = model.ID
}
}
@@ -474,7 +474,7 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
}
allTools = append(allTools,
- tools.NewBashTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Options.Attribution, modelName),
+ tools.NewBashTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Options.Attribution, modelID),
tools.NewCrushInfoTool(c.cfg, c.lspManager, c.allSkills, c.activeSkills, c.skillTracker),
tools.NewCrushLogsTool(logFile),
tools.NewJobOutputTool(),
@@ -65,7 +65,7 @@ type bashDescriptionData struct {
BannedCommands string
MaxOutputLength int
Attribution config.Attribution
- ModelName string
+ ModelID string
}
var bannedCommands = []string{
@@ -141,14 +141,14 @@ var bannedCommands = []string{
"ufw",
}
-func bashDescription(attribution *config.Attribution, modelName string) string {
+func bashDescription(attribution *config.Attribution, modelID string) string {
bannedCommandsStr := strings.Join(bannedCommands, ", ")
var out bytes.Buffer
if err := bashDescriptionTpl.Execute(&out, bashDescriptionData{
BannedCommands: bannedCommandsStr,
MaxOutputLength: MaxOutputLength,
Attribution: *attribution,
- ModelName: modelName,
+ ModelID: modelID,
}); err != nil {
// this should never happen.
panic("failed to execute bash description template: " + err.Error())
@@ -188,10 +188,10 @@ func blockFuncs() []shell.BlockFunc {
}
}
-func NewBashTool(permissions permission.Service, workingDir string, attribution *config.Attribution, modelName string) fantasy.AgentTool {
+func NewBashTool(permissions permission.Service, workingDir string, attribution *config.Attribution, modelID string) fantasy.AgentTool {
return fantasy.NewAgentTool(
BashToolName,
- string(bashDescription(attribution, modelName)),
+ string(bashDescription(attribution, modelID)),
func(ctx context.Context, params BashParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
if params.Command == "" {
return fantasy.NewTextErrorResponse("missing command"), nil
@@ -69,7 +69,7 @@ When user asks to create git commit:
{{ end}}
{{if eq .Attribution.TrailerStyle "assisted-by" }}
- Assisted-by: {{ .ModelName }} via Crush <crush@charm.land>
+ Assisted-by: Crush:{{ .ModelID }}
{{ else if eq .Attribution.TrailerStyle "co-authored-by" }}
Co-Authored-By: Crush <crush@charm.land>