(deps commandDeps, workspaceRef *string)
| 227 | } |
| 228 | |
| 229 | func newNetworkChannelsCreateCommand(deps commandDeps, workspaceRef *string) *cobra.Command { |
| 230 | var flags networkCreateChannelFlags |
| 231 | cmd := &cobra.Command{ |
| 232 | Use: "create [channel]", |
| 233 | Short: "Create a runtime channel and start one session per selected agent", |
| 234 | Args: cobra.MaximumNArgs(1), |
| 235 | Example: ` # Create a launch channel with two local agents |
| 236 | agh network --workspace ~/dev/ad8 channels create ad8_launch \ |
| 237 | --purpose "Coordinate launch work" \ |
| 238 | --agent site_copywriter \ |
| 239 | --agent growth_marketer \ |
| 240 | -o json`, |
| 241 | RunE: func(cmd *cobra.Command, args []string) error { |
| 242 | client, err := clientFromDeps(deps) |
| 243 | if err != nil { |
| 244 | return err |
| 245 | } |
| 246 | workspace, err := resolveNetworkWorkspaceRef(cmd, deps, client, workspaceRef) |
| 247 | if err != nil { |
| 248 | return err |
| 249 | } |
| 250 | channel, err := resolveNetworkCreateChannelName(args, flags.channel) |
| 251 | if err != nil { |
| 252 | return err |
| 253 | } |
| 254 | agentNames := trimSpawnAtoms(flags.agentNames) |
| 255 | if len(agentNames) == 0 { |
| 256 | return errors.New("cli: at least one --agent is required") |
| 257 | } |
| 258 | purpose := strings.TrimSpace(flags.purpose) |
| 259 | if purpose == "" { |
| 260 | return errors.New("cli: --purpose cannot be empty") |
| 261 | } |
| 262 | created, err := client.CreateNetworkChannel(cmd.Context(), workspace, CreateNetworkChannelRequest{ |
| 263 | Channel: channel, |
| 264 | Purpose: purpose, |
| 265 | FanoutPolicy: strings.TrimSpace(flags.fanoutPolicy), |
| 266 | CoordinatorPeerID: strings.TrimSpace(flags.coordinatorPeerID), |
| 267 | AgentNames: agentNames, |
| 268 | }) |
| 269 | if err != nil { |
| 270 | return err |
| 271 | } |
| 272 | return writeCommandOutput(cmd, networkChannelBundle(created)) |
| 273 | }, |
| 274 | } |
| 275 | cmd.Flags().StringVar(&flags.channel, networkChannelKey, "", "Channel name when not passed as an argument") |
| 276 | cmd.Flags().StringVar(&flags.purpose, "purpose", "", "Human-readable channel purpose") |
| 277 | cmd.Flags().StringVar( |
| 278 | &flags.fanoutPolicy, |
| 279 | "fanout-policy", |
| 280 | "", |
| 281 | "Delivery activation policy: capability_match, coordinator, or all_members", |
| 282 | ) |
| 283 | cmd.Flags().StringVar( |
| 284 | &flags.coordinatorPeerID, |
| 285 | "coordinator-peer-id", |
| 286 | "", |
no test coverage detected