(deps commandDeps)
| 225 | } |
| 226 | |
| 227 | func newMemoryWriteCommand(deps commandDeps) *cobra.Command { |
| 228 | var flags memorySelectorFlags |
| 229 | var typeRaw string |
| 230 | var name string |
| 231 | var description string |
| 232 | var contentFlag string |
| 233 | var dryRun bool |
| 234 | |
| 235 | cmd := &cobra.Command{ |
| 236 | Use: "write --type <type> --name <name> --content <@file|text>", |
| 237 | Short: "Create a Memory v2 entry through the controller", |
| 238 | Example: ` # Write workspace-scoped project memory from a file |
| 239 | agh memory write --scope workspace --type project --name "Runtime docs" --content @runtime.md |
| 240 | |
| 241 | # Write agent-global feedback |
| 242 | agh memory write --scope agent --agent reviewer --agent-tier global \ |
| 243 | --type feedback --name "Review tone" --content @feedback.md`, |
| 244 | Args: cobra.NoArgs, |
| 245 | RunE: func(cmd *cobra.Command, _ []string) error { |
| 246 | client, err := clientFromDeps(deps) |
| 247 | if err != nil { |
| 248 | return err |
| 249 | } |
| 250 | typ, err := parseRequiredMemoryType(typeRaw) |
| 251 | if err != nil { |
| 252 | return err |
| 253 | } |
| 254 | defaultScope, err := memcontract.DefaultScopeForType(typ) |
| 255 | if err != nil { |
| 256 | return err |
| 257 | } |
| 258 | selector, err := resolveMemorySelectorFlags(deps, flags, memorySelectorOptions{DefaultScope: defaultScope}) |
| 259 | if err != nil { |
| 260 | return err |
| 261 | } |
| 262 | content, err := resolveMemoryContent(cmd, deps, contentFlag) |
| 263 | if err != nil { |
| 264 | return err |
| 265 | } |
| 266 | if strings.TrimSpace(name) == "" { |
| 267 | return errors.New("memory.name_required: --name is required") |
| 268 | } |
| 269 | response, err := client.CreateMemory(cmd.Context(), MemoryCreateRequest{ |
| 270 | Scope: selector.Scope, |
| 271 | WorkspaceID: selector.WorkspaceID, |
| 272 | AgentName: selector.AgentName, |
| 273 | AgentTier: selector.AgentTier, |
| 274 | Origin: memcontract.OriginCLI, |
| 275 | Type: typ, |
| 276 | Name: strings.TrimSpace(name), |
| 277 | Description: strings.TrimSpace(description), |
| 278 | Content: content, |
| 279 | DryRun: dryRun, |
| 280 | }) |
| 281 | if err != nil { |
| 282 | return err |
| 283 | } |
| 284 | return writeCommandOutput(cmd, memoryMutationBundle("Memory Write", response)) |
no test coverage detected